Port vscode-xquery to vscode-xml

I'll be consolidating the two extensions into one.
This commit is contained in:
Josh Johnson 2016-01-08 10:44:46 -05:00
parent b259f68d72
commit 8738058d8c
8 changed files with 1290 additions and 4 deletions

View file

@ -0,0 +1,46 @@
'use strict';
import * as vsc from 'vscode';
import { XQueryCompleter, XQueryCompletionItem } from '../services/XQueryCompleter';
export class XQueryCompletionItemProvider implements vsc.CompletionItemProvider {
provideCompletionItems(document: vsc.TextDocument, position: vsc.Position): vsc.CompletionItem[] {
let items: vsc.CompletionItem[] = new Array<vsc.CompletionItem>();
let completer: XQueryCompleter = new XQueryCompleter(document.getText());
let completions: XQueryCompletionItem[] = completer.getCompletions(position.line, position.character);
completions.forEach((completion: XQueryCompletionItem) => {
let item: vsc.CompletionItem = new vsc.CompletionItem(completion.name);
item.insertText = completion.value;
switch (completion.meta) {
// functions (always qualified with a colon)
case 'function':
item.kind = vsc.CompletionItemKind.Function;
let funcStart = (completion.value.indexOf(':') + 1);
let funcEnd = completion.value.indexOf('(');
item.insertText = completion.value.substring(funcStart, funcEnd);
break;
// variables and parameters (always qualified with a dollar sign)
case 'Let binding':
case 'Local variable':
case 'Window variable':
case 'Function parameter':
item.kind = vsc.CompletionItemKind.Variable;
item.insertText = completion.value.substring(1);
break;
// everything else
default: item.kind = vsc.CompletionItemKind.Text;
}
items.push(item);
});
return items;
}
}

34
src/providers/Linting.ts Normal file
View file

@ -0,0 +1,34 @@
'use strict';
import * as vsc from 'vscode';
import { XQueryLinter, XQueryDiagnostic } from '../services/XQueryLinter';
export class XQueryLintingFeatureProvider {
private static _coreDiagnostics: vsc.DiagnosticCollection;
static get coreDiagnostics(): vsc.DiagnosticCollection {
if (!XQueryLintingFeatureProvider._coreDiagnostics) {
XQueryLintingFeatureProvider._coreDiagnostics = vsc.languages.createDiagnosticCollection('XQueryDiagnostics');
}
return XQueryLintingFeatureProvider._coreDiagnostics;
}
static provideXQueryDiagnostics(editor: vsc.TextEditor): void {
let diagnostics: vsc.Diagnostic[] = new Array<vsc.Diagnostic>();
let xqDiagnostics: XQueryDiagnostic[] = XQueryLinter.lint(editor.document.getText());
xqDiagnostics.forEach((xqd: XQueryDiagnostic) => {
let vSeverity: vsc.DiagnosticSeverity = (xqd.severity == 1) ? vsc.DiagnosticSeverity.Warning : vsc.DiagnosticSeverity.Error;
let startPos: vsc.Position = new vsc.Position(xqd.startLine, xqd.startColumn);
let endPos: vsc.Position = new vsc.Position(xqd.endLine, xqd.endColumn);
let range: vsc.Range = new vsc.Range(startPos, endPos);
let diagnostic: vsc.Diagnostic = new vsc.Diagnostic(range, xqd.message, vSeverity);
diagnostics.push(diagnostic);
});
XQueryLintingFeatureProvider.coreDiagnostics.set(editor.document.uri, diagnostics);
}
}