diff --git a/logo.png b/logo.png index 612dc30..580c15e 100644 Binary files a/logo.png and b/logo.png differ diff --git a/server/src/linter.ts b/server/src/linter.ts index c856b73..4c0b9c5 100644 --- a/server/src/linter.ts +++ b/server/src/linter.ts @@ -15,41 +15,40 @@ const filters = [ /Could not process include directive for header name:/ ] -const files: {[uri: string]: number} = {} +const files = new Map() -export const ext = { - '.fsh': 'frag', - '.gsh': 'geom', - '.vsh': 'vert', - //'.glsl': 'frag' //excluding non standard files, need to be treated differently -} +export const ext = new Map([ + ['.fsh', 'frag'], + ['.gsh', 'geom'], + ['.vsh', 'vert'], +]) -const tokens: {[key: string]: string} = { - 'SEMICOLON': ';', - 'COMMA': ',', - 'COLON': ':', - 'EQUAL': '=', - 'LEFT_PAREN': '(', - 'RIGHT_PAREN': ')', - 'DOT': '.', - 'BANG': '!', - 'DASH': '-', - 'TILDE': '~', - 'PLUS': '+', - 'STAR': '*', - 'SLASH': '/', - 'PERCENT': '%', - 'LEFT_ANGEL': '<', - 'RIGHT_ANGEL': '>', - 'VERICAL_BAR': '|', - 'CARET': '^', - 'AMPERSAND': '&', - 'QUESTION': '?', - 'LEFT_BRACKET': '[', - 'RIGHT_BRACKET': ']', - 'LEFT_BRACE': '{', - 'RIGHT_BRACE': '}' -} +const tokens = new Map([ + ['SEMICOLON', ';'], + ['COMMA', ','], + ['COLON', ':'], + ['EQUAL', '='], + ['LEFT_PAREN', '('], + ['RIGHT_PAREN', ')'], + ['DOT', '.'], + ['BANG', '!'], + ['DASH', '-'], + ['TILDE', '~'], + ['PLUS', '+'], + ['STAR', '*'], + ['SLASH', '/'], + ['PERCENT', '%'], + ['LEFT_ANGEL', '<'], + ['RIGHT_ANGEL', '>'], + ['VERICAL_BAR', '|'], + ['CARET', '^'], + ['AMPERSAND', '&'], + ['QUESTION', '?'], + ['[LEFT_BRACKET', '['], + ['RIGHT_BRACKET', ']'], + ['LEFT_BRACE', '{'], + ['RIGHT_BRACE', '}'], +]) // TODO exclude exts not in ext export function preprocess(lines: string[], docURI: string, topLevel: boolean, incStack: string[]) { @@ -88,7 +87,6 @@ export function preprocess(lines: string[], docURI: string, topLevel: boolean, i if (!topLevel) return - //console.log(lines.join('\n')) try { lint(docURI, lines, includes) } catch (e) { @@ -139,12 +137,14 @@ function lint(uri: string, lines: string[], includes: {lineNum: number, match: R message: replaceWord(msg), source: 'mc-glsl' } - //diagnostics[file ? uri : file].push(diag) + diagnostics[file ? uri : file].push(diag) }) daigsArray(diagnostics).forEach(d => connection.sendDiagnostics({uri: d.uri, diagnostics: d.diag})) } +const replaceWord = (msg: string) => Object.entries(tokens).reduce((acc, [key, value]) => acc.replace(key, value), msg) + const daigsArray = (diags: {[uri: string]: Diagnostic[]}) => Object.keys(diags).map(uri => ({uri: 'file://' + uri, diag: diags[uri]})) const filterMatches = (output: string) => output @@ -153,8 +153,6 @@ const filterMatches = (output: string) => output .map(s => s.match(reDiag)) .filter(match => match && match.length === 5) -const replaceWord = (msg: string) => Object.entries(tokens).reduce((acc, [key, value]) => acc.replace(key, value), msg) - function calcRange(lineNum: number, uri: string): Range { const lines = documents.get('file://' + uri).getText().split('\n') const line = lines[lineNum] diff --git a/server/src/server.ts b/server/src/server.ts index 51a2afe..ab26067 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -33,6 +33,7 @@ documents.onDidSave((event) => onEvent(event.document)) //documents.onDidChangeContent(onEvent) function onEvent(document: TextDocument) { + if (!ext.has(extname(document.uri))) return preprocess(document.getText().split('\n'), formatURI(document.uri), true, [document.uri.replace(/^file:\/\//, '')]) }