From 67e9c991a491e468d7890bb8975a787fd7dadcb9 Mon Sep 17 00:00:00 2001 From: Noah Santschi-Cooney Date: Thu, 14 Jun 2018 01:29:11 +0100 Subject: [PATCH] Linting on save instead. Added a basic preprocess beginning, adding in the extension. Not complete --- server/src/linter.ts | 21 +++++++++++++++++++-- server/src/server.ts | 12 ++++++++++-- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/server/src/linter.ts b/server/src/linter.ts index 848c9de..62f7627 100644 --- a/server/src/linter.ts +++ b/server/src/linter.ts @@ -4,6 +4,8 @@ import { TextDocument, Diagnostic, DiagnosticSeverity, Range } from 'vscode-lang import { exec } from 'child_process' const reDiag = /(ERROR|WARNING): (?:\d):(\d+): '(?:.*)' : (.+)/ +const reVersion = /#version [\d]{3}/ +const include = '#extension GL_GOOGLE_include_directive : require' const filters = [ /(No code generated)/, @@ -53,8 +55,23 @@ const replaceWord = (msg: string) => { } export function preprocess(document: TextDocument) { + const lines = document.getText().split('\n') + let inComment = false + for (let i = 0; i < lines.length; i++) { + const line = lines[i] + if (line.includes('/*')) inComment = true + if (line.includes('*/')) inComment = false + if (line.trim().startsWith('//')) break + if (!inComment && reVersion.test(line)) { + lines.splice(i + 1, 0, include) + break + } + if (i === lines.length - 1) lines.splice(0, 0, include) + } + console.log(lines.join('\n')) + //const root = document.uri.replace(/^file:\/\//, '').replace(conf.minecraftPath, '').replace(path.basename(document.uri), '') - lint(document.getText(), document.uri) + lint(lines.join('\n'), document.uri) } function lint(text: string, uri: string) { @@ -65,7 +82,7 @@ function lint(text: string, uri: string) { const [type, line, msg] = match.slice(1) diagnostics.push({ severity: type === 'ERROR' ? DiagnosticSeverity.Error : DiagnosticSeverity.Warning, - range: calcRange(parseInt(line), uri), + range: calcRange(parseInt(line) - 1, uri), message: replaceWord(msg), source: 'mc-glsl' }) diff --git a/server/src/server.ts b/server/src/server.ts index a9e7476..fc2586f 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -22,10 +22,18 @@ connection.onInitialize((params): vsclang.InitializeResult => { }; }); -documents.onDidChangeContent((change) => { +documents.onDidOpen((event) => { + preprocess(event.document) +}) + +documents.onDidSave((event) => { + preprocess(event.document) +}) + +/* documents.onDidChangeContent((change) => { preprocess(change.document); }); - + */ connection.onDidChangeConfiguration((change) => { const temp = change.settings.mcglsl as Config conf = new Config(temp.minecraftPath, temp.glslangPath)