vscode-basex #9
6 changed files with 164 additions and 158 deletions
217
package.json
217
package.json
|
@ -2,7 +2,7 @@
|
||||||
"name": "vscode-basex",
|
"name": "vscode-basex",
|
||||||
"displayName": "BaseX tools",
|
"displayName": "BaseX tools",
|
||||||
"description": "BaseX tools: XQuery, XML, XPath Tools for Visual Studio Code",
|
"description": "BaseX tools: XQuery, XML, XPath Tools for Visual Studio Code",
|
||||||
"version": "0.0.47",
|
"version": "0.0.48",
|
||||||
"preview": true,
|
"preview": true,
|
||||||
"publisher": "quodatum",
|
"publisher": "quodatum",
|
||||||
"author": "Andy Bunce (https://github.com/Quodatum)",
|
"author": "Andy Bunce (https://github.com/Quodatum)",
|
||||||
|
@ -72,107 +72,122 @@
|
||||||
"title": "BaseX Tools: Minify XML"
|
"title": "BaseX Tools: Minify XML"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"configuration": {
|
"configuration": [
|
||||||
"title": "BaseX Tools Configuration",
|
{
|
||||||
"type": "object",
|
"id": "xmltree",
|
||||||
"properties": {
|
"title": "XML tree view ",
|
||||||
"basexTools.xmlTree.enableTreeView": {
|
"properties": {
|
||||||
"type": "boolean",
|
"basexTools.xmlTree.enableTreeView": {
|
||||||
"default": true,
|
"type": "boolean",
|
||||||
"description": "Enables the XML Document view in the explorer for XML documents.",
|
"default": true,
|
||||||
"scope": "window"
|
"description": "Enables the XML Document view in the explorer for XML documents.",
|
||||||
},
|
"scope": "window"
|
||||||
"basexTools.xmlTree.enableViewMetadata": {
|
},
|
||||||
"type": "boolean",
|
"basexTools.xmlTree.enableViewMetadata": {
|
||||||
"default": true,
|
"type": "boolean",
|
||||||
"description": "Enables attribute and child element counts in the XML Document view.",
|
"default": true,
|
||||||
"scope": "window"
|
"description": "Enables attribute and child element counts in the XML Document view.",
|
||||||
},
|
"scope": "window"
|
||||||
"basexTools.xmlTree.enableViewCursorSync": {
|
},
|
||||||
"type": "boolean",
|
"basexTools.xmlTree.enableViewCursorSync": {
|
||||||
"default": false,
|
"type": "boolean",
|
||||||
"description": "Enables auto-reveal of elements in the XML Document view when a start tag is clicked in the editor.",
|
"default": false,
|
||||||
"scope": "window"
|
"description": "Enables auto-reveal of elements in the XML Document view when a start tag is clicked in the editor.",
|
||||||
},
|
"scope": "window"
|
||||||
"basexTools.enforcePrettySelfClosingTagOnFormat": {
|
}
|
||||||
"type": "boolean",
|
}
|
||||||
"default": false,
|
},
|
||||||
"description": "Enforces a space before the forward slash at the end of a self-closing XML tag.",
|
{
|
||||||
"scope": "resource"
|
"id": "xpath",
|
||||||
},
|
"title": "XPath ",
|
||||||
"basexTools.xpath.ignoreDefaultNamespace": {
|
"properties":{
|
||||||
"type": "boolean",
|
"basexTools.xpath.ignoreDefaultNamespace": {
|
||||||
"default": true,
|
"type": "boolean",
|
||||||
"description": "Ignore default xmlns attributes when evaluating XPath.",
|
"default": true,
|
||||||
"scope": "window"
|
"description": "Ignore default xmlns attributes when evaluating XPath.",
|
||||||
},
|
"scope": "window"
|
||||||
"basexTools.xpath.persistXPathQuery": {
|
},
|
||||||
"type": "boolean",
|
"basexTools.xpath.persistXPathQuery": {
|
||||||
"default": true,
|
"type": "boolean",
|
||||||
"description": "Remember the last XPath query used.",
|
"default": true,
|
||||||
"scope": "window"
|
"description": "Remember the last XPath query used.",
|
||||||
},
|
"scope": "window"
|
||||||
"basexTools.removeCommentsOnMinify": {
|
}
|
||||||
"type": "boolean",
|
}
|
||||||
"default": false,
|
},
|
||||||
"description": "Remove XML comments during minification.",
|
{
|
||||||
"scope": "resource"
|
"title": "BaseX Tools ",
|
||||||
},
|
"type": "object",
|
||||||
"basexTools.splitAttributesOnFormat": {
|
"properties": {
|
||||||
"type": "boolean",
|
"basexTools.enforcePrettySelfClosingTagOnFormat": {
|
||||||
"default": false,
|
"type": "boolean",
|
||||||
"description": "Put each attribute on a new line when formatting XML. Overrides `basexTools.splitXmlnsOnFormat` if set to `true`.",
|
"default": false,
|
||||||
"scope": "resource"
|
"description": "Enforces a space before the forward slash at the end of a self-closing XML tag.",
|
||||||
},
|
"scope": "resource"
|
||||||
"basexTools.splitXmlnsOnFormat": {
|
},
|
||||||
"type": "boolean",
|
|
||||||
"default": true,
|
"basexTools.removeCommentsOnMinify": {
|
||||||
"description": "Put each xmlns attribute on a new line when formatting XML.",
|
"type": "boolean",
|
||||||
"scope": "resource"
|
"default": false,
|
||||||
},
|
"description": "Remove XML comments during minification.",
|
||||||
"basexTools.xmlFormatterImplementation": {
|
"scope": "resource"
|
||||||
"type": "string",
|
},
|
||||||
"enum": [
|
"basexTools.splitAttributesOnFormat": {
|
||||||
"classic",
|
"type": "boolean",
|
||||||
"v2"
|
"default": false,
|
||||||
],
|
"description": "Put each attribute on a new line when formatting XML. Overrides `basexTools.splitXmlnsOnFormat` if set to `true`.",
|
||||||
"default": "v2",
|
"scope": "resource"
|
||||||
"description": "Supported XML Formatters: classic",
|
},
|
||||||
"scope": "window"
|
"basexTools.splitXmlnsOnFormat": {
|
||||||
},
|
"type": "boolean",
|
||||||
"basexTools.xqueryExecutionArguments": {
|
"default": true,
|
||||||
"type": "array",
|
"description": "Put each xmlns attribute on a new line when formatting XML.",
|
||||||
"default": [
|
"scope": "resource"
|
||||||
"-xquery",
|
},
|
||||||
"$(script)",
|
"basexTools.xmlFormatterImplementation": {
|
||||||
"-in",
|
"type": "string",
|
||||||
"$(input)",
|
"enum": [
|
||||||
"-out",
|
"classic",
|
||||||
"$(input).output.xml"
|
"v2"
|
||||||
],
|
],
|
||||||
"description": "Arguments to be passed to the XQuery execution engine.",
|
"default": "v2",
|
||||||
"scope": "window"
|
"description": "Supported XML Formatters: classic",
|
||||||
},
|
"scope": "window"
|
||||||
"basexTools.xqueryExecutionEngine": {
|
},
|
||||||
"type": "string",
|
"basexTools.xqueryExecutionArguments": {
|
||||||
"default": "",
|
"type": "array",
|
||||||
"description": "The full path to the executable to run when executing XQuery scripts.",
|
"default": [
|
||||||
"scope": "window"
|
"-xquery",
|
||||||
},
|
"$(script)",
|
||||||
"basexTools.xqueryExecutionInputLimit": {
|
"-in",
|
||||||
"type": "integer",
|
"$(input)",
|
||||||
"default": 100,
|
"-out",
|
||||||
"description": "The maximum number of input files to enumerate when executing XQuery scripts.",
|
"$(input).output.xml"
|
||||||
"scope": "window"
|
],
|
||||||
},
|
"description": "Arguments to be passed to the XQuery execution engine.",
|
||||||
"basexTools.xqueryExecutionInputSearchPattern": {
|
"scope": "window"
|
||||||
"type": "string",
|
},
|
||||||
"default": "**/*.xml",
|
"basexTools.xqueryExecutionEngine": {
|
||||||
"description": "The pattern used to search for input XML files when executing XQuery scripts.",
|
"type": "string",
|
||||||
"scope": "window"
|
"default": "",
|
||||||
|
"description": "The full path to the executable to run when executing XQuery scripts.",
|
||||||
|
"scope": "window"
|
||||||
|
},
|
||||||
|
"basexTools.xqueryExecutionInputLimit": {
|
||||||
|
"type": "integer",
|
||||||
|
"default": 100,
|
||||||
|
"description": "The maximum number of input files to enumerate when executing XQuery scripts.",
|
||||||
|
"scope": "window"
|
||||||
|
},
|
||||||
|
"basexTools.xqueryExecutionInputSearchPattern": {
|
||||||
|
"type": "string",
|
||||||
|
"default": "**/*.xml",
|
||||||
|
"description": "The pattern used to search for input XML files when executing XQuery scripts.",
|
||||||
|
"scope": "window"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
],
|
||||||
"grammars": [
|
"grammars": [
|
||||||
{
|
{
|
||||||
"language": "xquery",
|
"language": "xquery",
|
||||||
|
@ -289,4 +304,4 @@
|
||||||
"@xmldom/xmldom": "^0.8.1",
|
"@xmldom/xmldom": "^0.8.1",
|
||||||
"xpath": "0.0.32"
|
"xpath": "0.0.32"
|
||||||
}
|
}
|
||||||
}
|
}
|
5
src/CHANGELOG.md
Normal file
5
src/CHANGELOG.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
# 0.0.48
|
||||||
|
* Fix xmlToText #6
|
||||||
|
* FIX outline all vars
|
||||||
|
|
||||||
|
# 0.0.47
|
|
@ -1,4 +1,4 @@
|
||||||
export * from "./formatAsXml";
|
export * from "./formatAsXml";
|
||||||
export * from "./minifyXml";
|
export * from "./minifyXml";
|
||||||
export * from "./xmlToText";
|
export * from "./xmlToText";
|
||||||
export * from "./textToXml";
|
|
||||||
|
|
|
@ -1,33 +0,0 @@
|
||||||
import { workspace } from "vscode";
|
|
||||||
import { ProviderResult, Range, TextEdit, TextEditor, Selection } from "vscode";
|
|
||||||
|
|
||||||
import { NativeCommands } from "../../common";
|
|
||||||
import * as constants from "../../constants";
|
|
||||||
|
|
||||||
import { XmlFormatterFactory } from "../xml-formatter";
|
|
||||||
import { XmlFormattingEditProvider } from "../xml-formatting-edit-provider";
|
|
||||||
import { XmlFormattingOptionsFactory } from "../xml-formatting-options";
|
|
||||||
|
|
||||||
export function textToXml(textEditor: TextEditor): void {
|
|
||||||
textEditor.edit(textEdit => {
|
|
||||||
const selections = textEditor.selections;
|
|
||||||
selections.forEach(selection => {
|
|
||||||
if (selection.isEmpty) {
|
|
||||||
selection = new Selection(
|
|
||||||
textEditor.document.positionAt(0),
|
|
||||||
textEditor.document.positionAt(textEditor.document.getText().length)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
const txt = textEditor.document.getText(new Range(selection.start, selection.end));
|
|
||||||
const transformed = txt
|
|
||||||
.replace(/</g, "<")
|
|
||||||
.replace(/>/g, ">")
|
|
||||||
.replace(/&/g, "&")
|
|
||||||
// tslint:disable-next-line
|
|
||||||
.replace(/"/g, '"')
|
|
||||||
.replace(/'/g, "'");
|
|
||||||
|
|
||||||
textEdit.replace(selection, transformed);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
|
@ -1,12 +1,7 @@
|
||||||
import { workspace } from "vscode";
|
|
||||||
import { ProviderResult, Range, TextEdit, TextEditor, Selection } from "vscode";
|
|
||||||
|
|
||||||
import { NativeCommands } from "../../common";
|
import { Range, TextEditor, Selection } from "vscode";
|
||||||
import * as constants from "../../constants";
|
|
||||||
|
|
||||||
import { XmlFormatterFactory } from "../xml-formatter";
|
|
||||||
import { XmlFormattingEditProvider } from "../xml-formatting-edit-provider";
|
|
||||||
import { XmlFormattingOptionsFactory } from "../xml-formatting-options";
|
|
||||||
|
|
||||||
export function xmlToText(textEditor: TextEditor): void {
|
export function xmlToText(textEditor: TextEditor): void {
|
||||||
textEditor.edit(textEdit => {
|
textEditor.edit(textEdit => {
|
||||||
|
@ -20,9 +15,9 @@ export function xmlToText(textEditor: TextEditor): void {
|
||||||
}
|
}
|
||||||
const txt = textEditor.document.getText(new Range(selection.start, selection.end));
|
const txt = textEditor.document.getText(new Range(selection.start, selection.end));
|
||||||
const transformed = txt
|
const transformed = txt
|
||||||
|
.replace(/&/g, "&")
|
||||||
.replace(/</g, "<")
|
.replace(/</g, "<")
|
||||||
.replace(/>/g, ">")
|
.replace(/>/g, ">")
|
||||||
.replace(/&/g, "&")
|
|
||||||
.replace(/"/g, """)
|
.replace(/"/g, """)
|
||||||
.replace(/'/g, "'");
|
.replace(/'/g, "'");
|
||||||
|
|
||||||
|
@ -30,3 +25,27 @@ export function xmlToText(textEditor: TextEditor): void {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
export function textToXml(textEditor: TextEditor): void {
|
||||||
|
textEditor.edit(textEdit => {
|
||||||
|
const selections = textEditor.selections;
|
||||||
|
selections.forEach(selection => {
|
||||||
|
if (selection.isEmpty) {
|
||||||
|
selection = new Selection(
|
||||||
|
textEditor.document.positionAt(0),
|
||||||
|
textEditor.document.positionAt(textEditor.document.getText().length)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
const txt = textEditor.document.getText(new Range(selection.start, selection.end));
|
||||||
|
const transformed = txt
|
||||||
|
.replace(/</g, "<")
|
||||||
|
.replace(/>/g, ">")
|
||||||
|
.replace(/&/g, "&")
|
||||||
|
// tslint:disable-next-line
|
||||||
|
.replace(/"/g, '"')
|
||||||
|
.replace(/'/g, "'");
|
||||||
|
|
||||||
|
textEdit.replace(selection, transformed);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,12 +5,12 @@ import { channel } from "../common/logger";
|
||||||
//
|
//
|
||||||
// This class handles Symbols
|
// This class handles Symbols
|
||||||
//
|
//
|
||||||
function makeSymbol (name :string,desc :string,icon :vscode.SymbolKind,pos :any) {
|
function makeSymbol(name: string, description: string, icon: vscode.SymbolKind, pos: any) {
|
||||||
const spos = new vscode.Position(pos.sl, pos.sc);
|
const spos = new vscode.Position(pos.sl, pos.sc);
|
||||||
const epos = new vscode.Position(pos.el, pos.ec);
|
const epos = new vscode.Position(pos.el, pos.ec);
|
||||||
const fullrange=new vscode.Range(spos,epos);
|
const fullrange = new vscode.Range(spos, epos);
|
||||||
const selrange=new vscode.Range(spos,spos);
|
const selrange = new vscode.Range(spos, spos);
|
||||||
return new vscode.DocumentSymbol(name,"var", vscode.SymbolKind.Variable, fullrange, selrange);
|
return new vscode.DocumentSymbol(name, description, icon, fullrange, selrange);
|
||||||
}
|
}
|
||||||
|
|
||||||
export class Symbols implements vscode.DocumentSymbolProvider {
|
export class Symbols implements vscode.DocumentSymbolProvider {
|
||||||
|
@ -23,23 +23,23 @@ export class Symbols implements vscode.DocumentSymbolProvider {
|
||||||
const symbols: vscode.DocumentSymbol[] = [];
|
const symbols: vscode.DocumentSymbol[] = [];
|
||||||
const text = document.getText();
|
const text = document.getText();
|
||||||
const linter = new (XQLint as any)(text, { "styleCheck": false });
|
const linter = new (XQLint as any)(text, { "styleCheck": false });
|
||||||
const xqdoc= linter.getXQDoc();
|
const xqdoc = linter.getXQDoc();
|
||||||
channel.log(xqdoc.variables);
|
channel.log("got xqdoc");
|
||||||
// type: type,
|
// type: type,
|
||||||
// pos: pos,
|
// pos: pos,
|
||||||
// qname: qname,
|
// qname: qname,
|
||||||
// annotations: {}
|
// annotations: {}
|
||||||
xqdoc.variables.forEach(v => {
|
xqdoc.variables.forEach(v => {
|
||||||
const name = v.name;
|
const name = v.name;
|
||||||
const info =makeSymbol(name,"var", vscode.SymbolKind.Variable,v.pos)
|
const info = makeSymbol(name, "var", vscode.SymbolKind.Variable, v.pos)
|
||||||
symbols.push(info);
|
symbols.push(info);
|
||||||
});
|
});
|
||||||
xqdoc.functions.forEach(v => {
|
xqdoc.functions.forEach(v => {
|
||||||
const name = v.name;
|
const name = v.name;
|
||||||
const info =makeSymbol(name,"Fu", vscode.SymbolKind.Function,v.pos)
|
const info = makeSymbol(name, "Fu", vscode.SymbolKind.Function, v.pos)
|
||||||
symbols.push(info);
|
symbols.push(info);
|
||||||
});
|
});
|
||||||
channel.log("Symbols done" + document.uri);
|
channel.log("Symbols done " + document.uri);
|
||||||
return symbols;
|
return symbols;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue