mirror of
https://github.com/Strum355/mcshader-lsp.git
synced 2025-08-31 13:57:27 +00:00
Gonna be using seperate regex for linux and windows for error parsing. Need to investigate errors not being thrown
This commit is contained in:
parent
3b4ee25a86
commit
cefd0e2e67
3 changed files with 22 additions and 16 deletions
|
@ -1,16 +1,18 @@
|
||||||
import * as vscode from 'vscode'
|
import * as vscode from 'vscode'
|
||||||
import * as path from 'path'
|
import * as path from 'path'
|
||||||
import * as os from 'os'
|
import * as os from 'os'
|
||||||
|
import { regLinuxOutput } from './linter/glslProvider'
|
||||||
// glslangPath: Path to glslangValidator (assumed in PATH by default)
|
// glslangPath: Path to glslangValidator (assumed in PATH by default)
|
||||||
// workDir: the directory in which all the files should be, ending in /shaders
|
// workDir: the directory in which all the files should be, ending in /shaders
|
||||||
// tmpdir: the directory into which the symlinks are stored, should be the OS's temp dir
|
// tmpdir: the directory into which the symlinks are stored, should be the OS's temp dir
|
||||||
// isWin: are we on Windows?
|
// isWin: are we on Windows?
|
||||||
export class Config {
|
export class Config {
|
||||||
|
public readonly minecraftPath: string
|
||||||
public readonly glslangPath: string
|
public readonly glslangPath: string
|
||||||
public readonly workDir: string
|
public readonly workDir: string
|
||||||
public readonly tmpdir: string
|
public readonly tmpdir: string
|
||||||
public readonly isWin: boolean
|
public readonly isWin: boolean
|
||||||
|
public readonly outputMatch: RegExp
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
const c = vscode.workspace.getConfiguration('mcglsl')
|
const c = vscode.workspace.getConfiguration('mcglsl')
|
||||||
|
@ -19,11 +21,13 @@ export class Config {
|
||||||
console.log('[MC-GLSL] temp directory root set to', path.join(os.tmpdir(), vscode.workspace.name!, 'shaders'))
|
console.log('[MC-GLSL] temp directory root set to', path.join(os.tmpdir(), vscode.workspace.name!, 'shaders'))
|
||||||
|
|
||||||
this.glslangPath = c.get('glslangValidatorPath') as string
|
this.glslangPath = c.get('glslangValidatorPath') as string
|
||||||
|
this.minecraftPath = c.get('minecraftPath') as string
|
||||||
|
this.isWin = os.platform() === 'win32'
|
||||||
|
this.tmpdir = path.join(os.tmpdir(), vscode.workspace.name!, 'shaders')
|
||||||
|
this.outputMatch = regLinuxOutput
|
||||||
this.workDir = path.basename(vscode.workspace.rootPath!) === 'shaders' ?
|
this.workDir = path.basename(vscode.workspace.rootPath!) === 'shaders' ?
|
||||||
vscode.workspace.rootPath! :
|
vscode.workspace.rootPath! :
|
||||||
path.join(vscode.workspace.rootPath!, 'shaders')
|
path.join(vscode.workspace.rootPath!, 'shaders')
|
||||||
this.tmpdir = path.join(os.tmpdir(), vscode.workspace.name!, 'shaders')
|
|
||||||
this.isWin = os.platform() === 'win32'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public onChange(e: vscode.ConfigurationChangeEvent) {
|
public onChange(e: vscode.ConfigurationChangeEvent) {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import * as vscode from 'vscode'
|
import * as vscode from 'vscode'
|
||||||
import * as cp from 'child_process'
|
|
||||||
import * as shell from 'shelljs'
|
import * as shell from 'shelljs'
|
||||||
import * as path from 'path'
|
import * as path from 'path'
|
||||||
|
import { runLinter } from '../asyncSpawn'
|
||||||
import '../global'
|
import '../global'
|
||||||
import { Config } from '../config'
|
import { Config } from '../config'
|
||||||
|
|
||||||
|
@ -21,9 +21,8 @@ const filters: RegExp[] = [
|
||||||
/\/\w*.(vert|frag)$/
|
/\/\w*.(vert|frag)$/
|
||||||
]
|
]
|
||||||
|
|
||||||
const regSyntaxError = /(syntax error)/
|
|
||||||
const regOutputMatch = /^(WARNING|ERROR): ([.\/\\\w]+):(\d+): ((?:'[\w\W]*'){1} :[\w ]+)/
|
|
||||||
const regInclude = /^(?: |\t)*(?:#include) "((?:\/[\S]+)+\.(?:glsl))"$/
|
const regInclude = /^(?: |\t)*(?:#include) "((?:\/[\S]+)+\.(?:glsl))"$/
|
||||||
|
export const regLinuxOutput = /^(WARNING|ERROR): ((?:\/[^/\n]*)+\/*):(\d+): ((?:'[\w\W]*'){1} :[\w ]+)/
|
||||||
|
|
||||||
export default class GLSLProvider implements vscode.CodeActionProvider {
|
export default class GLSLProvider implements vscode.CodeActionProvider {
|
||||||
private diagnosticCollection: vscode.DiagnosticCollection // where errors/warnings/hints are pushed to be displayed
|
private diagnosticCollection: vscode.DiagnosticCollection // where errors/warnings/hints are pushed to be displayed
|
||||||
|
@ -80,24 +79,26 @@ export default class GLSLProvider implements vscode.CodeActionProvider {
|
||||||
private filterMessages = (res: string) => res
|
private filterMessages = (res: string) => res
|
||||||
.split('\n')
|
.split('\n')
|
||||||
.filter(s => s.length > 1 && !this.matchesFilters(s))
|
.filter(s => s.length > 1 && !this.matchesFilters(s))
|
||||||
.map(s => s.match(regOutputMatch))
|
.map(s => s.match(this.config.outputMatch))
|
||||||
.filter(match => match && match.length > 3)
|
.filter(match => match && match.length > 3)
|
||||||
|
|
||||||
private filterPerLine(matches: RegExpMatchArray[], document: vscode.TextDocument) {
|
|
||||||
return matches.filter(match => {
|
|
||||||
const line = document.lineAt(parseInt(match![2]))
|
|
||||||
return !(regSyntaxError.test(match[0]) && line.text.leftTrim().startsWith('#include'))
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// The big boi that does all the shtuff
|
// The big boi that does all the shtuff
|
||||||
private lint(document: vscode.TextDocument) {
|
private async lint(document: vscode.TextDocument) {
|
||||||
if (document.languageId !== 'glsl') return
|
if (document.languageId !== 'glsl') return
|
||||||
|
|
||||||
const ext = extensions[path.extname(document.fileName)]
|
const ext = extensions[path.extname(document.fileName)]
|
||||||
|
const root = '-I'
|
||||||
|
let res = ''
|
||||||
|
|
||||||
const res = cp.spawnSync(this.config.glslangPath, ['-S', ext, document.uri.path]).output[1].toString()
|
try {
|
||||||
|
res = await runLinter(this.config.glslangPath, ['-E', '-S', ext, document.uri.path])
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
console.log(res)
|
||||||
const messageMatches = this.filterMessages(res) as RegExpMatchArray[]
|
const messageMatches = this.filterMessages(res) as RegExpMatchArray[]
|
||||||
|
console.log(messageMatches)
|
||||||
|
|
||||||
const diags: vscode.Diagnostic[] = []
|
const diags: vscode.Diagnostic[] = []
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
"eofline": false,
|
"eofline": false,
|
||||||
"member-ordering": false,
|
"member-ordering": false,
|
||||||
"trailing-comma": false,
|
"trailing-comma": false,
|
||||||
|
"no-var-requires": false,
|
||||||
"max-line-length": {
|
"max-line-length": {
|
||||||
"severity": "warning",
|
"severity": "warning",
|
||||||
"options": [170]
|
"options": [170]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue