Add XQuery Linting Feature
This commit is contained in:
parent
2c6a5ceaa0
commit
ace85c8841
4 changed files with 434 additions and 61 deletions
|
|
@ -1,10 +1,11 @@
|
|||
import { languages, workspace } from "vscode";
|
||||
import { ExtensionContext, WorkspaceConfiguration } from "vscode";
|
||||
import { languages, window, workspace } from "vscode";
|
||||
import { ExtensionContext, TextEditor, TextEditorSelectionChangeEvent, WorkspaceConfiguration } from "vscode";
|
||||
|
||||
import { XmlFormatter } from "./formatting/xml-formatter";
|
||||
import { XmlFormattingEditProvider } from "./formatting/xml-formatting-edit-provider";
|
||||
import { ClassicXmlFormatter } from "./formatting/formatters/classic-xml-formatter";
|
||||
import { V2XmlFormatter } from "./formatting/formatters/v2-xml-formatter";
|
||||
import { XQueryLinter } from "./linting/xquery-linter";
|
||||
|
||||
import * as constants from "./constants";
|
||||
|
||||
|
|
@ -26,8 +27,35 @@ export function activate(context: ExtensionContext) {
|
|||
languages.registerDocumentFormattingEditProvider("xml", xmlFormattingEditProvider),
|
||||
languages.registerDocumentRangeFormattingEditProvider("xml", xmlFormattingEditProvider)
|
||||
);
|
||||
|
||||
/* Linting Features */
|
||||
context.subscriptions.push(
|
||||
window.onDidChangeActiveTextEditor(_handleChangeActiveTextEditor),
|
||||
window.onDidChangeTextEditorSelection(_handleChangeTextEditorSelection)
|
||||
);
|
||||
}
|
||||
|
||||
export function deactivate() {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
|
||||
function _handleContextChange(editor: TextEditor): void {
|
||||
if (!editor || !editor.document) {
|
||||
return;
|
||||
}
|
||||
|
||||
switch (editor.document.languageId) {
|
||||
case "xquery":
|
||||
languages.createDiagnosticCollection("XQueryDiagnostics").set(editor.document.uri, new XQueryLinter().lint(editor.document.getText()));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function _handleChangeActiveTextEditor(editor: TextEditor): void {
|
||||
_handleContextChange(editor);
|
||||
}
|
||||
|
||||
function _handleChangeTextEditorSelection(e: TextEditorSelectionChangeEvent): void {
|
||||
_handleContextChange(e.textEditor);
|
||||
}
|
||||
|
|
|
|||
23
src/linting/xquery-linter.ts
Normal file
23
src/linting/xquery-linter.ts
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
import { Diagnostic, DiagnosticSeverity, Position, Range } from "vscode";
|
||||
|
||||
const XQLint = require("xqlint").XQLint;
|
||||
|
||||
export class XQueryLinter {
|
||||
static SEVERITY_WARNING: number = 1;
|
||||
static SEVERITY_ERROR: number = 2;
|
||||
|
||||
lint(text: string): Diagnostic[] {
|
||||
const linter = new XQLint(text);
|
||||
const diagnostics = new Array<Diagnostic>();
|
||||
|
||||
linter.getErrors().forEach((error: any) => {
|
||||
diagnostics.push(new Diagnostic(new Range(new Position(error.pos.sl, error.pos.sc), new Position(error.pos.el, error.pos.ec)), error.message, DiagnosticSeverity.Error));
|
||||
});
|
||||
|
||||
linter.getWarnings().forEach((warning: any) => {
|
||||
diagnostics.push(new Diagnostic(new Range(new Position(warning.pos.sl, warning.pos.sc), new Position(warning.pos.el, warning.pos.ec)), warning.message, DiagnosticSeverity.Warning));
|
||||
});
|
||||
|
||||
return diagnostics;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue