Suggest namespace prefixes based on schema element prefix
-add function to parse prefix from schema tag and return the prefix plus a colon or return nothing
-added calls to the new function
-modified the intellisense snippets to prepend the prefix value to the auto complete return element
-added schema regex to retrieve the prefix or empty value
Closes #120
diff --git a/package.json b/package.json
index a81ffdd..d7014c9 100644
--- a/package.json
+++ b/package.json
@@ -1,481 +1,487 @@
{
- "name": "apache-daffodil-vscode",
- "displayName": "Apache Daffodil VS Code Extension",
- "description": "VS Code extension for Apache Daffodil DFDL schema debugging",
- "version": "1.1.0-SNAPSHOT",
- "daffodilVersion": "3.3.0",
- "omegaEditServerHash": "ffabce0d095364d1c863466f522dfa0ac2f0574d6394a82c0239a613bb84baf7c7b9fd92fdb0457e1d3c9321249acc21567d7dcfd6ff0528e0e792da1b487407",
- "publisher": "asf",
- "author": "Apache Daffodil",
- "license": "Apache-2.0",
- "engines": {
- "vscode": "^1.55.0"
- },
- "icon": "images/daffodil.ico",
- "categories": [
- "Debuggers",
- "Programming Languages"
- ],
- "repository": {
- "type": "git",
- "url": "https://github.com/apache/daffodil-vscode.git"
- },
- "bugs": {
- "url": "https://github.com/apache/daffodil-vscode/issues"
- },
- "scripts": {
- "omega-edit-download": "node -e \"require('./build/scripts/omega_edit_download.ts').downloadServer()\"",
- "precompile": "node -p \"'export const LIB_VERSION = ' + JSON.stringify(require('./package.json').version) + ';'\" > src/version.ts",
- "compile": "tsc -p ./ && yarn omega-edit-download",
- "lint": "yarn run prettier src -c",
- "watch": "yarn omega-edit-download && webpack --watch --devtool nosources-source-map --config ./build/extension.webpack.config.js",
- "watch2": "tsc -watch -p ./",
- "webpack": "webpack --mode production --config ./build/extension.webpack.config.js",
- "prepackage": "yarn sbt && yarn install && yarn compile && yarn webpack",
- "package": "yarn package-setup && yarn package-create",
- "package-setup": "node -e \"require('./build/scripts/package.ts').setup()\"",
- "package-create": "node -e \"require('./build/scripts/package.ts').create()\"",
- "pretest": "yarn run compile && yarn run webpack",
- "test": "node ./out/tests/runTest.js",
- "sbt": "sbt universal:packageBin"
- },
- "dependencies": {
- "@grpc/grpc-js": "^1.5.4",
- "await-notify": "1.0.1",
- "child_process": "1.0.2",
- "google-protobuf": "3.20.1",
- "hexy": "0.3.4",
- "omega-edit": "0.9.20",
- "unzip-stream": "0.3.1",
- "uuid": "^8.3.2",
- "vscode-debugadapter": "1.51.0",
- "wait-port": "^0.3.0",
- "xdg-app-paths": "7.3.0"
- },
- "devDependencies": {
- "@types/glob": "^7.1.3",
- "@types/mocha": "^9.1.1",
- "@types/node": "^18.0.0",
- "@types/vscode": "^1.55.0",
- "@vscode/test-electron": "^2.1.5",
- "glob": "8.0.3",
- "mocha": "10.0.0",
- "prettier": "2.7.1",
- "ts-loader": "8.1.0",
- "typescript": "4.3.5",
- "vsce": "2.9.2",
- "vscode-debugadapter-testsupport": "1.51.0",
- "webpack": "5.73.0",
- "webpack-cli": "4.10.0"
- },
- "extensionDependencies": [
- "vincaslt.highlight-matching-tag"
- ],
- "main": "./dist/ext/extension.js",
- "activationEvents": [
- "onLanguage:dfdl",
- "onDebugResolve:dfdl",
- "onDebugDynamicConfigurations:dfdl",
- "onCommand:extension.dfdl-debug.getProgramName",
- "onCommand:extension.dfdl-debug.getDataName",
- "onCommand:extension.dfdl-debug.runEditorContents",
- "onCommand:extension.dfdl-debug.debugEditorContents",
- "onCommand:launch.config",
- "onCommand:data.edit",
- "onCommand:omega_edit.version",
- "onCommand:toggle.experimental",
- "onCommand:extension.dfdl-debug.debugLastEditorContents"
- ],
- "workspaceTrust": {
- "request": "never"
- },
- "contributes": {
- "languages": [
- {
- "id": "dfdl",
- "aliases": [
- "dfdl"
- ],
- "extensions": [
- ".dfdl.xsd"
- ],
- "configuration": "./language/dfdl.json"
- }
- ],
- "grammars": [
- {
- "language": "dfdl",
- "scopeName": "text.xml.dfdl.xsd",
- "path": "./language/syntaxes/dfdl.tmLanguage.json"
- }
- ],
- "menus": {
- "editor/title": [
- {
- "command": "launch.config",
- "group": "navigation@1"
- },
- {
- "command": "hexview.display",
- "when": "resourceLangId == dfdl",
- "group": "navigation@4"
- },
- {
- "command": "infoset.display",
- "when": "resourceLangId == dfdl",
- "group": "navigation@2"
- },
- {
- "command": "infoset.diff",
- "when": "resourceLangId == dfdl",
- "group": "navigation@3"
- }
- ],
- "editor/title/run": [
- {
- "command": "extension.dfdl-debug.runEditorContents",
- "when": "resourceLangId == dfdl"
- },
- {
- "command": "extension.dfdl-debug.debugEditorContents",
- "when": "resourceLangId == dfdl"
- },
- {
- "command": "extension.dfdl-debug.debugLastEditorContents",
- "when": "resourceLangId == dfdl"
- }
- ],
- "commandPalette": [
- {
- "command": "extension.dfdl-debug.debugEditorContents",
- "when": "resourceLangId == dfdl"
- },
- {
- "command": "extension.dfdl-debug.runEditorContents",
- "when": "resourceLangId == dfdl"
- },
- {
- "command": "data.edit",
- "enablement": "experimentalFeaturesEnabled"
- },
- {
- "command": "omega_edit.version",
- "enablement": "experimentalFeaturesEnabled"
- },
- {
- "command": "toggle.experimental"
- },
- {
- "command": "extension.dfdl-debug.debugLastEditorContents",
- "when": "resourceLangId == dfdl"
- }
- ],
- "debug/variables/context": [
- {
- "command": "extension.dfdl-debug.toggleFormatting",
- "when": "debugType == 'dfdl' && debugProtocolVariableMenuContext == 'simple'"
- }
- ]
- },
- "commands": [
- {
- "command": "extension.dfdl-debug.debugEditorContents",
- "title": "Debug File",
- "category": "Daffodil Debug",
- "enablement": "!inDebugMode",
- "icon": "$(debug-alt)"
- },
- {
- "command": "extension.dfdl-debug.runEditorContents",
- "title": "Run File",
- "category": "Daffodil Debug",
- "enablement": "!inDebugMode",
- "icon": "$(play)"
- },
- {
- "command": "extension.dfdl-debug.debugLastEditorContents",
- "title": "Debug Last File",
- "category": "Daffodil Debug",
- "enablement": "!inDebugMode",
- "icon": "$(debug-alt)"
- },
- {
- "command": "extension.dfdl-debug.toggleFormatting",
- "title": "Toggle between decimal and hex formatting",
- "category": "Daffodil Debug",
- "enablement": "inDebugMode"
- },
- {
- "command": "hexview.display",
- "title": "Display the hex view",
- "category": "Daffodil Debug",
- "enablement": "inDebugMode",
- "icon": "$(file-binary)"
- },
- {
- "command": "infoset.display",
- "title": "Display the infoset view",
- "category": "Daffodil Debug",
- "enablement": "inDebugMode",
- "icon": "$(file-code)"
- },
- {
- "command": "infoset.diff",
- "title": "View infoset diff",
- "category": "Daffodil Debug",
- "enablement": "inDebugMode",
- "icon": "$(diff)"
- },
- {
- "command": "infoset.save",
- "title": "Save the current infoset",
- "category": "Daffodil Debug",
- "enablement": "inDebugMode"
- },
- {
- "command": "launch.config",
- "title": "Configure launch.json",
- "category": "Daffodil Debug",
- "enablement": "!inDebugMode",
- "icon": "$(debug-configure)"
- },
- {
- "command": "toggle.experimental",
- "title": "Enable Experimental Features",
- "category": "Daffodil Debug"
- },
- {
- "command": "omega_edit.version",
- "title": "Omega Edit Ω Version Info",
- "category": "OmegaEdit",
- "enablement": "experimentalFeaturesEnabled"
- },
- {
- "command": "data.edit",
- "title": "Data Editor",
- "category": "OmegaEdit",
- "enablement": "experimentalFeaturesEnabled"
- },
- {
- "command": "position.goto",
- "title": "Go to position",
- "category": "OmegaEdit",
- "enablement": "experimentalFeaturesEnabled"
- }
- ],
- "keybindings": [
- {
- "command": "position.goto",
- "key": "ctrl+alt+g",
- "mac": "ctrl+cmd+g",
- "when": "editorTextFocus"
- }
- ],
- "breakpoints": [
- {
- "language": "dfdl"
- }
- ],
- "debuggers": [
- {
- "type": "dfdl",
- "languages": [
- "dfdl"
- ],
- "label": "Daffodil Debug",
- "program": "./out/extension.js",
- "runtime": "node",
- "configurationAttributes": {
- "launch": {
- "required": [
- "program",
- "data"
- ],
- "properties": {
- "program": {
- "type": "string",
- "description": "Absolute path to the DFDL schema file.",
- "default": "${command:AskForProgramName}"
- },
- "data": {
- "type": "string",
- "description": "Absolute path to the input data file.",
- "default": "${command:AskForDataName}"
- },
- "infosetOutput": {
- "type": "object",
- "description": "Destination for final Infoset (file-path | 'console' | 'none')",
- "default": {
- "type": "console",
- "path": "${workspaceFolder}/infoset.xml"
- }
- },
- "stopOnEntry": {
- "type": "boolean",
- "description": "Automatically stop after launch.",
- "default": true
- },
- "trace": {
- "type": "boolean",
- "description": "Enable logging of the Debug Adapter Protocol.",
- "default": true
- },
- "debugServer": {
- "type": "integer",
- "description": "Port debug server running on",
- "default": 4711
- },
- "useExistingServer": {
- "type": "boolean",
- "description": "Enable connection to running DAP Server",
- "default": false
- },
- "openHexView": {
- "type": "boolean",
- "description": "Open hexview on debug start",
- "default": false
- },
- "openInfosetView": {
- "type": "boolean",
- "description": "Open hexview on debug start",
- "default": false
- },
- "openInfosetDiffView": {
- "type": "boolean",
- "description": "Open hexview on debug start",
- "default": false
- },
- "daffodilDebugClasspath": {
- "type": "string",
- "description": "Additional classpaths to be exported to the debugger",
- "default": ""
- }
- }
- }
- },
- "initialConfigurations": [
- {
- "type": "dfdl",
- "request": "launch",
- "name": "Ask for file name",
- "program": "${command:AskForProgramName}",
- "stopOnEntry": true,
- "data": "${command:AskForDataName}",
- "infosetOutput": {
- "type": "file",
- "path": "${workspaceFolder}/infoset.xml"
- },
- "debugServer": 4711,
- "openHexView": false,
- "openInfosetView": false,
- "openInfosetDiffView": false,
- "daffodilDebugClasspath": ""
- }
- ],
- "configurationSnippets": [
- {
- "label": "Daffodil Debug: Launch",
- "description": "A new configuration for 'debugging' a user selected xml file.",
- "body": {
- "type": "dfdl",
- "request": "launch",
- "name": "Ask for file name",
- "program": "^\"\\${command:AskForProgramName}\"",
- "stopOnEntry": true,
- "data": "^\"\\${command:AskForDataName}\"",
- "infosetOutput": {
- "type": "file",
- "path": "${workspaceFolder}/infoset.xml"
- },
- "debugServer": 4711,
- "openHexView": false,
- "openInfosetView": false,
- "openInfosetDiffView": false,
- "daffodilDebugClasspath": ""
- }
- }
- ],
- "variables": {
- "AskForProgramName": "extension.dfdl-debug.getProgramName",
- "AskForDataName": "extension.dfdl-debug.getDataName"
- }
- }
- ],
- "configuration": [
- {
- "title": "Daffodil Debugger Global",
- "properties": {
- "type": {
- "type": "string",
- "default": "dfdl"
- },
- "program": {
- "type": "string",
- "description": "Absolute path to the DFDL schema file.",
- "default": "${command:AskForProgramName}"
- },
- "data": {
- "type": "string",
- "description": "Absolute path to the input data file.",
- "default": "${command:AskForDataName}"
- },
- "infosetOutputType": {
- "type": "string",
- "description": "Destination for final Infoset (file | 'console' | 'none')",
- "enum": [
- "file",
- "console",
- "none"
- ],
- "default": "none"
- },
- "infosetOutputFilePath": {
- "type": "string",
- "description": "Path to output for Infoset file (req: infosetOutput=file)",
- "default": "${workspaceFolder}/infoset.xml"
- },
- "stopOnEntry": {
- "type": "boolean",
- "description": "Automatically stop after launch.",
- "default": true
- },
- "trace": {
- "type": "boolean",
- "description": "Enable logging of the Debug Adapter Protocol.",
- "default": true
- },
- "useExistingServer": {
- "type": "boolean",
- "description": "Enable connection to running DAP Server",
- "default": false
- },
- "debugServer": {
- "type": "integer",
- "description": "Port debug server running on",
- "default": 4711
- },
- "openHexView": {
- "type": "boolean",
- "description": "Open hexview on debug start",
- "default": false
- },
- "openInfosetView": {
- "type": "boolean",
- "description": "Open hexview on debug start",
- "default": false
- },
- "openInfosetDiffView": {
- "type": "boolean",
- "description": "Open hexview on debug start",
- "default": false
- },
- "daffodilDebugClasspath": {
- "type": "string",
- "description": "Additional classpaths to be exported to the debugger",
- "default": ""
- }
- }
- }
- ]
- }
-}
+ "name": "apache-daffodil-vscode",
+ "displayName": "Apache Daffodil VS Code Extension",
+ "description": "VS Code extension for Apache Daffodil DFDL schema debugging",
+ "version": "1.1.0-SNAPSHOT",
+ "daffodilVersion": "3.3.0",
+ "omegaEditServerHash": "ffabce0d095364d1c863466f522dfa0ac2f0574d6394a82c0239a613bb84baf7c7b9fd92fdb0457e1d3c9321249acc21567d7dcfd6ff0528e0e792da1b487407",
+ "publisher": "asf",
+ "author": "Apache Daffodil",
+ "license": "Apache-2.0",
+ "engines": {
+ "vscode": "^1.55.0"
+ },
+ "icon": "images/daffodil.ico",
+ "categories": [
+ "Debuggers",
+ "Programming Languages"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/apache/daffodil-vscode.git"
+ },
+ "bugs": {
+ "url": "https://github.com/apache/daffodil-vscode/issues"
+ },
+ "scripts": {
+ "omega-edit-download": "node -e \"require('./build/scripts/omega_edit_download.ts').downloadServer()\"",
+ "precompile": "node -p \"'export const LIB_VERSION = ' + JSON.stringify(require('./package.json').version) + ';'\" > src/version.ts",
+ "compile": "tsc -p ./ && yarn omega-edit-download",
+ "lint": "yarn run prettier src -c",
+ "watch": "yarn omega-edit-download && webpack --watch --devtool nosources-source-map --config ./build/extension.webpack.config.js",
+ "watch2": "tsc -watch -p ./",
+ "webpack": "webpack --mode production --config ./build/extension.webpack.config.js",
+ "prepackage": "yarn sbt && yarn install && yarn compile && yarn webpack",
+ "package": "yarn package-setup && yarn package-create",
+ "package-setup": "node -e \"require('./build/scripts/package.ts').setup()\"",
+ "package-create": "node -e \"require('./build/scripts/package.ts').create()\"",
+ "pretest": "yarn run compile && yarn run webpack",
+ "test": "node ./out/tests/runTest.js",
+ "sbt": "sbt universal:packageBin"
+ },
+ "dependencies": {
+ "@grpc/grpc-js": "^1.5.4",
+ "await-notify": "1.0.1",
+ "child_process": "1.0.2",
+ "google-protobuf": "3.20.1",
+ "hexy": "0.3.4",
+ "omega-edit": "0.9.20",
+ "unzip-stream": "0.3.1",
+ "uuid": "^8.3.2",
+ "vscode-debugadapter": "1.51.0",
+ "wait-port": "^0.3.0",
+ "xdg-app-paths": "7.3.0"
+ },
+ "devDependencies": {
+ "@types/glob": "^7.1.3",
+ "@types/mocha": "^9.1.1",
+ "@types/node": "^18.0.0",
+ "@types/vscode": "^1.55.0",
+ "@vscode/test-electron": "^2.1.5",
+ "glob": "8.0.3",
+ "mocha": "10.0.0",
+ "prettier": "2.7.1",
+ "ts-loader": "8.1.0",
+ "typescript": "4.3.5",
+ "vsce": "2.9.2",
+ "vscode-debugadapter-testsupport": "1.51.0",
+ "webpack": "5.73.0",
+ "webpack-cli": "4.10.0"
+ },
+ "extensionDependencies": [
+ "vincaslt.highlight-matching-tag"
+ ],
+ "main": "./dist/ext/extension.js",
+ "activationEvents": [
+ "onLanguage:dfdl",
+ "onDebugResolve:dfdl",
+ "onDebugDynamicConfigurations:dfdl",
+ "onCommand:extension.dfdl-debug.getProgramName",
+ "onCommand:extension.dfdl-debug.getDataName",
+ "onCommand:extension.dfdl-debug.runEditorContents",
+ "onCommand:extension.dfdl-debug.debugEditorContents",
+ "onCommand:launch.config",
+ "onCommand:data.edit",
+ "onCommand:omega_edit.version",
+ "onCommand:toggle.experimental",
+ "onCommand:extension.dfdl-debug.debugLastEditorContents"
+ ],
+ "workspaceTrust": {
+ "request": "never"
+ },
+ "contributes": {
+ "languages": [
+ {
+ "id": "dfdl",
+ "aliases": [
+ "dfdl"
+ ],
+ "extensions": [
+ ".dfdl.xsd"
+ ],
+ "configuration": "./language/dfdl.json"
+ }
+ ],
+ "grammars": [
+ {
+ "language": "dfdl",
+ "scopeName": "text.xml.dfdl.xsd",
+ "path": "./language/syntaxes/dfdl.tmLanguage.json"
+ }
+ ],
+ "menus": {
+ "editor/title": [
+ {
+ "command": "launch.config",
+ "group": "navigation@1"
+ },
+ {
+ "command": "hexview.display",
+ "when": "resourceLangId == dfdl",
+ "group": "navigation@4"
+ },
+ {
+ "command": "infoset.display",
+ "when": "resourceLangId == dfdl",
+ "group": "navigation@2"
+ },
+ {
+ "command": "infoset.diff",
+ "when": "resourceLangId == dfdl",
+ "group": "navigation@3"
+ }
+ ],
+ "editor/title/run": [
+ {
+ "command": "extension.dfdl-debug.runEditorContents",
+ "when": "resourceLangId == dfdl"
+ },
+ {
+ "command": "extension.dfdl-debug.debugEditorContents",
+ "when": "resourceLangId == dfdl"
+ },
+ {
+ "command": "extension.dfdl-debug.debugLastEditorContents",
+ "when": "resourceLangId == dfdl"
+ }
+ ],
+ "commandPalette": [
+ {
+ "command": "extension.dfdl-debug.debugEditorContents",
+ "when": "resourceLangId == dfdl"
+ },
+ {
+ "command": "extension.dfdl-debug.runEditorContents",
+ "when": "resourceLangId == dfdl"
+ },
+ {
+ "command": "data.edit",
+ "enablement": "experimentalFeaturesEnabled"
+ },
+ {
+ "command": "omega_edit.version",
+ "enablement": "experimentalFeaturesEnabled"
+ },
+ {
+ "command": "toggle.experimental"
+ },
+ {
+ "command": "extension.dfdl-debug.debugLastEditorContents",
+ "when": "resourceLangId == dfdl"
+ }
+ ],
+ "debug/variables/context": [
+ {
+ "command": "extension.dfdl-debug.toggleFormatting",
+ "when": "debugType == 'dfdl' && debugProtocolVariableMenuContext == 'simple'"
+ }
+ ]
+ },
+ "commands": [
+ {
+ "command": "extension.dfdl-debug.debugEditorContents",
+ "title": "Debug File",
+ "category": "Daffodil Debug",
+ "enablement": "!inDebugMode",
+ "icon": "$(debug-alt)"
+ },
+ {
+ "command": "extension.dfdl-debug.runEditorContents",
+ "title": "Run File",
+ "category": "Daffodil Debug",
+ "enablement": "!inDebugMode",
+ "icon": "$(play)"
+ },
+ {
+ "command": "extension.dfdl-debug.debugLastEditorContents",
+ "title": "Debug Last File",
+ "category": "Daffodil Debug",
+ "enablement": "!inDebugMode",
+ "icon": "$(debug-alt)"
+ },
+ {
+ "command": "extension.dfdl-debug.toggleFormatting",
+ "title": "Toggle between decimal and hex formatting",
+ "category": "Daffodil Debug",
+ "enablement": "inDebugMode"
+ },
+ {
+ "command": "hexview.display",
+ "title": "Display the hex view",
+ "category": "Daffodil Debug",
+ "enablement": "inDebugMode",
+ "icon": "$(file-binary)"
+ },
+ {
+ "command": "infoset.display",
+ "title": "Display the infoset view",
+ "category": "Daffodil Debug",
+ "enablement": "inDebugMode",
+ "icon": "$(file-code)"
+ },
+ {
+ "command": "infoset.diff",
+ "title": "View infoset diff",
+ "category": "Daffodil Debug",
+ "enablement": "inDebugMode",
+ "icon": "$(diff)"
+ },
+ {
+ "command": "infoset.save",
+ "title": "Save the current infoset",
+ "category": "Daffodil Debug",
+ "enablement": "inDebugMode"
+ },
+ {
+ "command": "launch.config",
+ "title": "Configure launch.json",
+ "category": "Daffodil Debug",
+ "enablement": "!inDebugMode",
+ "icon": "$(debug-configure)"
+ },
+ {
+ "command": "toggle.experimental",
+ "title": "Enable Experimental Features",
+ "category": "Daffodil Debug"
+ },
+ {
+ "command": "omega_edit.version",
+ "title": "Omega Edit Ω Version Info",
+ "category": "OmegaEdit",
+ "enablement": "experimentalFeaturesEnabled"
+ },
+ {
+ "command": "data.edit",
+ "title": "Data Editor",
+ "category": "OmegaEdit",
+ "enablement": "experimentalFeaturesEnabled"
+ },
+ {
+ "command": "position.goto",
+ "title": "Go to position",
+ "category": "OmegaEdit",
+ "enablement": "experimentalFeaturesEnabled"
+ }
+ ],
+ "keybindings": [
+ {
+ "command": "position.goto",
+ "key": "ctrl+alt+g",
+ "mac": "ctrl+cmd+g",
+ "when": "editorTextFocus"
+ }
+ ],
+ "breakpoints": [
+ {
+ "language": "dfdl"
+ }
+ ],
+ "debuggers": [
+ {
+ "type": "dfdl",
+ "languages": [
+ "dfdl"
+ ],
+ "label": "Daffodil Debug",
+ "program": "./out/extension.js",
+ "runtime": "node",
+ "configurationAttributes": {
+ "launch": {
+ "required": [
+ "program",
+ "data"
+ ],
+ "properties": {
+ "program": {
+ "type": "string",
+ "description": "Absolute path to the DFDL schema file.",
+ "default": "${command:AskForProgramName}"
+ },
+ "data": {
+ "type": "string",
+ "description": "Absolute path to the input data file.",
+ "default": "${command:AskForDataName}"
+ },
+ "infosetOutput": {
+ "type": "object",
+ "description": "Destination for final Infoset (file-path | 'console' | 'none')",
+ "default": {
+ "type": "console",
+ "path": "${workspaceFolder}/infoset.xml"
+ }
+ },
+ "stopOnEntry": {
+ "type": "boolean",
+ "description": "Automatically stop after launch.",
+ "default": true
+ },
+ "trace": {
+ "type": "boolean",
+ "description": "Enable logging of the Debug Adapter Protocol.",
+ "default": true
+ },
+ "debugServer": {
+ "type": "integer",
+ "description": "Port debug server running on",
+ "default": 4711
+ },
+ "useExistingServer": {
+ "type": "boolean",
+ "description": "Enable connection to running DAP Server",
+ "default": false
+ },
+ "openHexView": {
+ "type": "boolean",
+ "description": "Open hexview on debug start",
+ "default": false
+ },
+ "openInfosetView": {
+ "type": "boolean",
+ "description": "Open hexview on debug start",
+ "default": false
+ },
+ "openInfosetDiffView": {
+ "type": "boolean",
+ "description": "Open hexview on debug start",
+ "default": false
+ },
+ "daffodilDebugClasspath": {
+ "type": "string",
+ "description": "Additional classpaths to be exported to the debugger",
+ "default": ""
+ }
+ }
+ }
+ },
+ "initialConfigurations": [
+ {
+ "type": "dfdl",
+ "request": "launch",
+ "name": "Ask for file name",
+ "program": "${command:AskForProgramName}",
+ "stopOnEntry": true,
+ "data": "${command:AskForDataName}",
+ "infosetOutput": {
+ "type": "file",
+ "path": "${workspaceFolder}/infoset.xml"
+ },
+ "debugServer": 4711,
+ "openHexView": false,
+ "openInfosetView": false,
+ "openInfosetDiffView": false,
+ "daffodilDebugClasspath": ""
+ }
+ ],
+ "configurationSnippets": [
+ {
+ "label": "Daffodil Debug: Launch",
+ "description": "A new configuration for 'debugging' a user selected xml file.",
+ "body": {
+ "type": "dfdl",
+ "request": "launch",
+ "name": "Ask for file name",
+ "program": "^\"\\${command:AskForProgramName}\"",
+ "stopOnEntry": true,
+ "data": "^\"\\${command:AskForDataName}\"",
+ "infosetOutput": {
+ "type": "file",
+ "path": "${workspaceFolder}/infoset.xml"
+ },
+ "debugServer": 4711,
+ "openHexView": false,
+ "openInfosetView": false,
+ "openInfosetDiffView": false,
+ "daffodilDebugClasspath": ""
+ }
+ }
+ ],
+ "variables": {
+ "AskForProgramName": "extension.dfdl-debug.getProgramName",
+ "AskForDataName": "extension.dfdl-debug.getDataName"
+ }
+ }
+ ],
+ "configuration": [
+ {
+ "title": "Daffodil Debugger Global",
+ "properties": {
+ "type": {
+ "type": "string",
+ "default": "dfdl"
+ },
+ "program": {
+ "type": "string",
+ "description": "Absolute path to the DFDL schema file.",
+ "default": "${command:AskForProgramName}"
+ },
+ "data": {
+ "type": "string",
+ "description": "Absolute path to the input data file.",
+ "default": "${command:AskForDataName}"
+ },
+ "infosetOutputType": {
+ "type": "string",
+ "description": "Destination for final Infoset (file | 'console' | 'none')",
+ "enum": [
+ "file",
+ "console",
+ "none"
+ ],
+ "default": "none"
+ },
+ "infosetOutputFilePath": {
+ "type": "string",
+ "description": "Path to output for Infoset file (req: infosetOutput=file)",
+ "default": "${workspaceFolder}/infoset.xml"
+ },
+ "stopOnEntry": {
+ "type": "boolean",
+ "description": "Automatically stop after launch.",
+ "default": true
+ },
+ "trace": {
+ "type": "boolean",
+ "description": "Enable logging of the Debug Adapter Protocol.",
+ "default": true
+ },
+ "useExistingServer": {
+ "type": "boolean",
+ "description": "Enable connection to running DAP Server",
+ "default": false
+ },
+ "debugServer": {
+ "type": "integer",
+ "description": "Port debug server running on",
+ "default": 4711
+ },
+ "openHexView": {
+ "type": "boolean",
+ "description": "Open hexview on debug start",
+ "default": false
+ },
+ "openInfosetView": {
+ "type": "boolean",
+ "description": "Open hexview on debug start",
+ "default": false
+ },
+ "openInfosetDiffView": {
+ "type": "boolean",
+ "description": "Open hexview on debug start",
+ "default": false
+ },
+ "daffodilDebugClasspath": {
+ "type": "string",
+ "description": "Additional classpaths to be exported to the debugger",
+ "default": ""
+ }
+ }
+ }
+ ]
+ },
+ "__metadata": {
+ "id": "4f1304da-7e65-48f1-9126-0a143e2e5ef2",
+ "publisherDisplayName": "Apache Software Foundation",
+ "publisherId": "4dbc1d1a-d64b-46f8-8756-1c234855f645",
+ "isPreReleaseVersion": false
+ }
+}
\ No newline at end of file
diff --git a/src/language/providers/closeElement.ts b/src/language/providers/closeElement.ts
index 7d271c4..6ba48ef 100644
--- a/src/language/providers/closeElement.ts
+++ b/src/language/providers/closeElement.ts
@@ -16,7 +16,7 @@
*/
import * as vscode from 'vscode'
-import { insertSnippet, nearestOpen } from './utils'
+import { getXsdNsPrefix, insertSnippet, nearestOpen } from './utils'
export function getCloseElementProvider() {
return vscode.languages.registerCompletionItemProvider(
@@ -27,22 +27,24 @@
position: vscode.Position
) {
var backpos = position.with(position.line, position.character - 1)
+ const nsPrefix = getXsdNsPrefix(document, position)
const nearestOpenItem = nearestOpen(document, position)
const wholeLine = document
.lineAt(position)
.text.substr(0, position.character)
if (
+ !wholeLine.includes('</') &&
wholeLine.endsWith('>') &&
- (wholeLine.includes('xs:element') ||
+ (wholeLine.includes('<' + nsPrefix + 'element') ||
nearestOpenItem.includes('element') ||
- wholeLine.includes('xs:group') ||
+ wholeLine.includes('<' + nsPrefix + 'group') ||
nearestOpenItem.includes('group') ||
- wholeLine.includes('xs:sequence') ||
+ wholeLine.includes('<' + nsPrefix + 'sequence') ||
nearestOpenItem.includes('sequence') ||
- wholeLine.includes('xs:simpleType') ||
+ wholeLine.includes('<' + nsPrefix + 'simpleType') ||
nearestOpenItem.includes('simpleType') ||
- wholeLine.includes('xs:choice') ||
+ wholeLine.includes('<' + nsPrefix + 'choice') ||
nearestOpenItem.includes('choice') ||
wholeLine.includes('dfdl:defineVariable') ||
nearestOpenItem.includes('Variable'))
@@ -53,37 +55,40 @@
})
if (
wholeLine.endsWith('>') &&
- (wholeLine.includes('xs:element ref') ||
- wholeLine.includes('xs:group ref'))
+ (wholeLine.includes('<' + nsPrefix + 'element ref') ||
+ wholeLine.includes('<' + nsPrefix + 'group ref'))
) {
insertSnippet(' />\n$0', backpos)
} else if (
wholeLine.endsWith('>') &&
- (wholeLine.includes('xs:element') ||
+ (wholeLine.includes('<' + nsPrefix + 'element') ||
nearestOpenItem.includes('element'))
) {
- insertSnippet('>\n\t$0\n</xs:element>', backpos)
+ insertSnippet('>\n\t$0\n</' + nsPrefix + 'element>', backpos)
} else if (
wholeLine.endsWith('>') &&
- (wholeLine.includes('xs:group') ||
+ (wholeLine.includes('<' + nsPrefix + 'group') ||
nearestOpenItem.includes('group'))
) {
- insertSnippet('>\n\t$0\n</xs:group>', backpos)
+ insertSnippet('>\n\t$0\n</' + nsPrefix + 'group>', backpos)
} else if (
- (wholeLine.endsWith('>') && wholeLine.includes('xs:sequence')) ||
+ (wholeLine.endsWith('>') &&
+ wholeLine.includes('<' + nsPrefix + 'sequence')) ||
nearestOpenItem.includes('sequence')
) {
- insertSnippet('>\n\t$0\n</xs:sequence>', backpos)
+ insertSnippet('>\n\t$0\n</' + nsPrefix + 'sequence>', backpos)
} else if (
- (wholeLine.endsWith('>') && wholeLine.includes('xs:choice')) ||
+ (wholeLine.endsWith('>') &&
+ wholeLine.includes('<' + nsPrefix + 'choice')) ||
nearestOpenItem.includes('choice')
) {
- insertSnippet('>\n\t$0\n</xs:choice>', backpos)
+ insertSnippet('>\n\t$0\n</' + nsPrefix + 'choice>', backpos)
} else if (
- (wholeLine.endsWith('>') && wholeLine.includes('xs:simpleType')) ||
+ (wholeLine.endsWith('>') &&
+ wholeLine.includes('<' + nsPrefix + 'simpleType')) ||
nearestOpenItem.includes('simpleType')
) {
- insertSnippet('>\n\t$0\n</xs:simpleType>', backpos)
+ insertSnippet('>\n\t$0\n</' + nsPrefix + 'simpleType>', backpos)
} else if (
(wholeLine.endsWith('>') &&
wholeLine.includes('dfdl:defineVariable')) ||
@@ -96,9 +101,9 @@
})
insertSnippet('>\n</dfdl:defineVariable>\n', backpos)
var backpos2 = position.with(position.line + 2, startPos - 2)
- insertSnippet('</xs:appinfo>\n', backpos2)
+ insertSnippet('</<' + nsPrefix + 'appinfo>\n', backpos2)
var backpos3 = position.with(position.line + 3, startPos - 4)
- insertSnippet('</xs:annotation>$0', backpos3)
+ insertSnippet('</<' + nsPrefix + 'annotation>$0', backpos3)
} else if (
(wholeLine.endsWith('>') &&
wholeLine.includes('dfdl:setVariable')) ||
@@ -111,9 +116,9 @@
})
insertSnippet('>\n</dfdl:setVariable>\n', backpos)
var backpos2 = position.with(position.line + 2, startPos - 2)
- insertSnippet('</xs:appinfo>\n', backpos2)
+ insertSnippet('</' + nsPrefix + 'appinfo>\n', backpos2)
var backpos3 = position.with(position.line + 3, startPos - 4)
- insertSnippet('</xs:annotation>$0', backpos3)
+ insertSnippet('</' + nsPrefix + 'annotation>$0', backpos3)
}
}
return undefined
diff --git a/src/language/providers/closeElementSlash.ts b/src/language/providers/closeElementSlash.ts
index 9019444..39fca75 100644
--- a/src/language/providers/closeElementSlash.ts
+++ b/src/language/providers/closeElementSlash.ts
@@ -16,7 +16,12 @@
*/
import * as vscode from 'vscode'
-import { insertSnippet, nearestOpen, checkBraceOpen } from './utils'
+import {
+ insertSnippet,
+ nearestOpen,
+ checkBraceOpen,
+ getXsdNsPrefix,
+} from './utils'
export function getCloseElementSlashProvider() {
return vscode.languages.registerCompletionItemProvider(
@@ -27,6 +32,7 @@
position: vscode.Position
) {
var backpos = position.with(position.line, position.character - 1)
+ const nsPrefix = getXsdNsPrefix(document, position)
const wholeLine = document
.lineAt(position)
.text.substr(0, position.character)
@@ -36,11 +42,11 @@
}
if (
wholeLine.endsWith('/') &&
- (wholeLine.includes('xs:element') ||
+ (wholeLine.includes('<' + nsPrefix + 'element') ||
nearestOpenItem.includes('element') ||
- wholeLine.includes('xs:group') ||
+ wholeLine.includes('<' + nsPrefix + 'group') ||
nearestOpenItem.includes('group') ||
- wholeLine.includes('xs:sequence') ||
+ wholeLine.includes('<' + nsPrefix + 'sequence') ||
nearestOpenItem.includes('sequence'))
) {
var range = new vscode.Range(backpos, position)
@@ -63,9 +69,9 @@
})
insertSnippet('/>\n', backpos)
var backpos2 = position.with(position.line + 1, startPos - 2)
- insertSnippet('</xs:appinfo>\n', backpos2)
+ insertSnippet('</<' + nsPrefix + 'appinfo>\n', backpos2)
var backpos3 = position.with(position.line + 2, startPos - 4)
- insertSnippet('</xs:annotation>$0', backpos3)
+ insertSnippet('</<' + nsPrefix + 'annotation>$0', backpos3)
}
return undefined
},
diff --git a/src/language/providers/elementCompletion.ts b/src/language/providers/elementCompletion.ts
index 4d06297..64532e9 100644
--- a/src/language/providers/elementCompletion.ts
+++ b/src/language/providers/elementCompletion.ts
@@ -16,7 +16,7 @@
*/
import * as vscode from 'vscode'
-import { checkBraceOpen } from './utils'
+import { checkBraceOpen, getXsdNsPrefix } from './utils'
import { elementCompletion } from './intellisense/elementItems'
import { createCompletionItem } from './utils'
@@ -32,6 +32,7 @@
console.log('in elementCompletionProvider - brace is showing open')
return undefined
}
+ var nsPrefix = getXsdNsPrefix(document, position)
var definedVariables = getDefinedVariables(document)
// a completion item that inserts its text as snippet,
@@ -39,12 +40,14 @@
// honored by the editor.
let compItems: vscode.CompletionItem[] = []
- elementCompletion(definedVariables, dfdlFormatString).items.forEach(
- (e) => {
- const completionItem = createCompletionItem(e, '')
- compItems.push(completionItem)
- }
- )
+ elementCompletion(
+ definedVariables,
+ dfdlFormatString,
+ nsPrefix
+ ).items.forEach((e) => {
+ const completionItem = createCompletionItem(e, '')
+ compItems.push(completionItem)
+ })
return compItems
},
diff --git a/src/language/providers/intellisense/elementItems.ts b/src/language/providers/intellisense/elementItems.ts
index 7d51715..bbedd1c 100644
--- a/src/language/providers/intellisense/elementItems.ts
+++ b/src/language/providers/intellisense/elementItems.ts
@@ -16,7 +16,7 @@
*/
// prettier-ignore
-export const elementCompletion = (definedVariables, dfdlFormatString) => {
+export const elementCompletion = (definedVariables, dfdlFormatString, nsPrefix) => {
return {
items: [
{
@@ -29,36 +29,36 @@
},
{
item: 'xs:element name',
- snippetString: '<xs:element name="$1"$0',
+ snippetString: '<' + nsPrefix + 'element name="$1"$0',
markdownString: 'A new xs element',
},
{
item: 'xs:element ref',
- snippetString: '<xs:element ref="$1"$0',
+ snippetString: '<' + nsPrefix + 'element ref="$1"$0',
markdownString: 'A new dfdl reference to an item',
},
{
item: 'xs:group name',
- snippetString: '<xs:group name = "$1">\n\t$0\n</xs:group>',
+ snippetString: '<' + nsPrefix + 'group name = "$1">\n\t$0\n</' + nsPrefix + 'group>',
},
{
item: 'xs:group ref',
- snippetString: '<xs:group ref="$1"$0',
+ snippetString: '<' + nsPrefix + 'group ref="$1"$0',
markdownString: 'A new dfdl reference to an item',
},
{
item: 'dfdl:assert',
- snippetString: '<xs:annotation>\n\t<xs:appinfo source="http://www.ogf.org/dfdl/">\n\t\t<dfdl:assert>"<$1>"</dfdl:assert>\n\t</xs:appinfo>\n</xs:annotation>$0',
+ snippetString: '<' + nsPrefix + 'annotation>\n\t<' + nsPrefix + 'appinfo source="http://www.ogf.org/dfdl/">\n\t\t<dfdl:assert>"<$1>"</dfdl:assert>\n\t</' + nsPrefix + 'appinfo>\n</' + nsPrefix + 'annotation>$0',
markdownString: 'dfdl assertion test',
},
{
item: 'dfdL:discriminator',
- snippetString: '<xs:annotation>\n\t<xs:appinfo source="http://www.ogf.org/dfdl/">\n\t\t<dfdl:discriminator test="{$1}"/>\n\t</xs:appinfo>\n</xs:annotation>$0',
+ snippetString: '<' + nsPrefix + 'annotation>\n\t<' + nsPrefix + 'appinfo source="http://www.ogf.org/dfdl/">\n\t\t<dfdl:discriminator test="{$1}"/>\n\t</' + nsPrefix + 'appinfo>\n</' + nsPrefix + 'annotation>$0',
markdownString: 'dfdl discriminator test',
},
{
item: 'dfdl:hiddenGroupRef',
- snippetString: '<xs:sequence dfdl:hiddenGroupRef="$1"/>\n$0',
+ snippetString: '<' + nsPrefix + 'sequence dfdl:hiddenGroupRef="$1"/>\n$0',
},
{
item: 'dfdl:format',
@@ -66,47 +66,47 @@
},
{
item: 'xs:annotation',
- snippetString: '<xs:annotation>\n\t<xs:appinfo source="http://www.ogf.org/dfdl/">\n\t\t$0\n\t</xs:appinfo>\n</xs:annotation>',
+ snippetString: '<' + nsPrefix + 'annotation>\n\t<' + nsPrefix + 'appinfo source="http://www.ogf.org/dfdl/">\n\t\t$0\n\t</' + nsPrefix + 'appinfo>\n</' + nsPrefix + 'annotation>',
},
{
item: 'xs:appinfo',
- snippetString: '<xs:annotation>\n\t<xs:appinfo source="http://www.ogf.org/dfdl/">\n\t\t$0\n\t</xs:appinfo>\n</xs:annotation>',
+ snippetString: '<' + nsPrefix + 'annotation>\n\t<' + nsPrefix + 'appinfo source="http://www.ogf.org/dfdl/">\n\t\t$0\n\t</' + nsPrefix + 'appinfo>\n</' + nsPrefix + 'annotation>',
},
{
item: 'xs:complexType',
- snippetString: '<xs:complexType>\n\t$0\n</xs:complexType>',
+ snippetString: '<' + nsPrefix + 'complexType>\n\t$0\n</' + nsPrefix + 'complexType>',
markdownString: 'Starts a complex type definition',
},
{
item: 'xs:complexType name=',
- snippetString: '<xs:complexType Name="$1">\n\t$0\n</xs:complexType>',
+ snippetString: '<' + nsPrefix + 'complexType Name="$1">\n\t$0\n</' + nsPrefix + 'complexType>',
markdownString: 'Starts a complex type definition',
},
{
item: 'xs:simpleType',
- snippetString: '<xs:simpleType>\n\t$0\n</xs:simpleType>',
+ snippetString: '<' + nsPrefix + 'simpleType>\n\t$0\n</' + nsPrefix + 'simpleType>',
markdownString: 'Starts a simple type definition',
},
{
item: 'xs:simpleType name=',
- snippetString: '<xs:simpleType Name="$1"$0',
+ snippetString: '<' + nsPrefix + 'simpleType Name="$1"$0',
markdownString: 'Starts a simple type definition',
},
{
item: 'xs:sequence',
- snippetString: '<xs:sequence',
+ snippetString: '<' + nsPrefix + 'sequence',
},
{
item: 'xs:choice',
- snippetString: '<xs:choice',
+ snippetString: '<' + nsPrefix + 'choice',
},
{
item: 'dfdl:defineVariable',
- snippetString: '<xs:annotation>\n\t<xs:appinfo source="http://www.ogf.org/dfdl/">\n\t\t<dfdl:defineVariable name="$1"$0',
+ snippetString: '<' + nsPrefix + 'annotation>\n\t<' + nsPrefix + 'appinfo source="http://www.ogf.org/dfdl/">\n\t\t<dfdl:defineVariable name="$1"$0',
},
{
item: 'dfdl:setVariable',
- snippetString: '<xs:annotation>\n\t<xs:appinfo source="http://www.ogf.org/dfdl/">\n\t\t<dfdl:setVariable ref="${1|' + definedVariables + '|}"$0',
+ snippetString: '<' + nsPrefix + 'annotation>\n\t<' + nsPrefix + 'appinfo source="http://www.ogf.org/dfdl/">\n\t\t<dfdl:setVariable ref="${1|' + definedVariables + '|}"$0',
},
],
}
diff --git a/src/language/providers/utils.ts b/src/language/providers/utils.ts
index 19979aa..0f2bc31 100644
--- a/src/language/providers/utils.ts
+++ b/src/language/providers/utils.ts
@@ -17,6 +17,8 @@
import * as vscode from 'vscode'
+const schemaPrefixRegEx = new RegExp('</?(|[^ ]+:)schema')
+
// Function to insert snippet to active editor
export function insertSnippet(snippetString: string, backpos: vscode.Position) {
vscode.window.activeTextEditor?.insertSnippet(
@@ -31,15 +33,11 @@
position: vscode.Position
) {
var lineNum = position.line
- const wholeLine = document
- .lineAt(lineNum)
- .text.substr(0, document.lineAt(lineNum).range.end.character)
+ const wholeLine = document.lineAt(lineNum).text
while (wholeLine.length === 0) {
--lineNum
}
- const previousLine = document
- .lineAt(lineNum)
- .text.substr(0, document.lineAt(lineNum - 1).range.end.character)
+ const previousLine = document.lineAt(lineNum).text
if (
previousLine.includes('</') ||
previousLine.includes('/>') ||
@@ -61,15 +59,14 @@
) {
var lineNum = position.line
var lineCount = 0
+ const nsPrefix = getXsdNsPrefix(document, position)
while (lineNum !== 0) {
--lineNum
++lineCount
- const wholeLine = document
- .lineAt(lineNum)
- .text.substr(0, document.lineAt(lineNum).range.end.character)
+ const wholeLine = document.lineAt(lineNum).text
if (
- wholeLine.includes('<xs:element') &&
- !wholeLine.includes('</xs:element') &&
+ wholeLine.includes('<' + nsPrefix + 'element') &&
+ !wholeLine.includes('</' + nsPrefix + 'element') &&
!wholeLine.includes('/>')
) {
return lineCount
@@ -83,10 +80,9 @@
position: vscode.Position
) {
var lineNum = position.line
+ const nsPrefix = getXsdNsPrefix(document, position)
while (lineNum !== -1) {
- const wholeLine = document
- .lineAt(lineNum)
- .text.substring(0, document.lineAt(lineNum).range.end.character)
+ const wholeLine = document.lineAt(lineNum).text
if (wholeLine.includes('element') && !wholeLine.includes('/>')) {
if (checkElementOpen(document, position)) {
return 'element'
@@ -101,8 +97,8 @@
}
} else if (wholeLine.includes('group')) {
if (
- wholeLine.includes('<xs:group') &&
- !wholeLine.includes('</xs:group') &&
+ wholeLine.includes('<' + nsPrefix + 'group') &&
+ !wholeLine.includes('</' + nsPrefix + 'group') &&
!wholeLine.includes('/>') &&
!wholeLine.includes('/')
) {
@@ -135,25 +131,24 @@
document: vscode.TextDocument,
position: vscode.Position
) {
+ const nsPrefix = getXsdNsPrefix(document, position)
var lineNum = position.line
while (lineNum !== -1) {
- const wholeLine = document
- .lineAt(lineNum)
- .text.substr(0, document.lineAt(lineNum).range.end.character)
+ const wholeLine = document.lineAt(lineNum).text
if (
- wholeLine.includes('<xs:element') &&
+ wholeLine.includes('<' + nsPrefix + 'element') &&
(wholeLine.includes('>') ||
- wholeLine.includes('</xs:element') ||
+ wholeLine.includes('</' + nsPrefix + 'element') ||
wholeLine.includes('/>'))
) {
return false
}
- if (wholeLine.includes('</xs:element>')) {
+ if (wholeLine.includes('</' + nsPrefix + 'element')) {
return false
}
if (
- wholeLine.includes('<xs:element') &&
- !wholeLine.includes('</xs:element') &&
+ wholeLine.includes('<' + nsPrefix + 'element') &&
+ !wholeLine.includes('</' + nsPrefix + 'element') &&
!wholeLine.includes('/>') &&
!wholeLine.includes('>')
) {
@@ -168,21 +163,21 @@
document: vscode.TextDocument,
position: vscode.Position
) {
+ const nsPrefix = getXsdNsPrefix(document, position)
var lineNum = position.line
while (lineNum !== 0) {
- const wholeLine = document
- .lineAt(lineNum)
- .text.substr(0, document.lineAt(lineNum).range.end.character)
+ const wholeLine = document.lineAt(lineNum).text
if (
- (wholeLine.includes('<xs:sequence') &&
- (wholeLine.includes('</xs:sequence') || wholeLine.includes('/>'))) ||
- wholeLine.includes('</xs:sequence>')
+ (wholeLine.includes('<' + nsPrefix + 'sequence') &&
+ (wholeLine.includes('</' + nsPrefix + 'sequence') ||
+ wholeLine.includes('/>'))) ||
+ wholeLine.includes('</' + nsPrefix + 'sequence>')
) {
return false
}
if (
- wholeLine.includes('<xs:sequence') &&
- !wholeLine.includes('</xs:sequence') &&
+ wholeLine.includes('<' + nsPrefix + 'sequence') &&
+ !wholeLine.includes('</' + nsPrefix + 'sequence') &&
!wholeLine.includes('/>')
) {
return true
@@ -196,21 +191,21 @@
document: vscode.TextDocument,
position: vscode.Position
) {
+ const nsPrefix = getXsdNsPrefix(document, position)
var lineNum = position.line
while (lineNum !== 0) {
- const wholeLine = document
- .lineAt(lineNum)
- .text.substr(0, document.lineAt(lineNum).range.end.character)
+ const wholeLine = document.lineAt(lineNum).text
if (
- (wholeLine.includes('<xs:choice') &&
- (wholeLine.includes('</xs:choice') || wholeLine.includes('/>'))) ||
- wholeLine.includes('</xs:choice>')
+ (wholeLine.includes('<' + nsPrefix + 'choice') &&
+ (wholeLine.includes('</' + nsPrefix + 'choice') ||
+ wholeLine.includes('/>'))) ||
+ wholeLine.includes('</' + nsPrefix + 'choice>')
) {
return false
}
if (
- wholeLine.includes('<xs:choice') &&
- !wholeLine.includes('</xs:choice') &&
+ wholeLine.includes('<' + nsPrefix + 'choice') &&
+ !wholeLine.includes('</' + nsPrefix + 'choice') &&
!wholeLine.includes('/>')
) {
return true
@@ -223,15 +218,13 @@
document: vscode.TextDocument,
position: vscode.Position
) {
+ const nsPrefix = getXsdNsPrefix(document, position)
var lineNum = position.line
while (lineNum !== 0) {
- const wholeLine = document
- .lineAt(lineNum)
- .text.substr(0, document.lineAt(lineNum).range.end.character)
-
+ const wholeLine = document.lineAt(lineNum).text
if (
- wholeLine.includes('<xs:simpleType') &&
- !wholeLine.includes('</xs:simpleType') &&
+ wholeLine.includes('<' + nsPrefix + 'simpleType') &&
+ !wholeLine.includes('</' + nsPrefix + 'simpleType') &&
!wholeLine.includes('/>')
) {
return true
@@ -247,9 +240,7 @@
) {
var lineNum = position.line
while (lineNum !== 0) {
- const wholeLine = document
- .lineAt(lineNum)
- .text.substr(0, document.lineAt(lineNum).range.end.character)
+ const wholeLine = document.lineAt(lineNum).text
if (
wholeLine.includes('<dfdl:defineVariable') &&
!wholeLine.includes('</dfdl:defineVariable') &&
@@ -268,9 +259,7 @@
) {
var lineNum = position.line
while (lineNum !== 0) {
- const wholeLine = document
- .lineAt(lineNum)
- .text.substr(0, document.lineAt(lineNum).range.end.character)
+ const wholeLine = document.lineAt(lineNum).text
if (
wholeLine.includes('<dfdl:setVariable') &&
!wholeLine.includes('</dfdl:setVariable') &&
@@ -283,6 +272,26 @@
return false
}
+//returns an empty value or a prefix plus a colon
+export function getXsdNsPrefix(
+ document: vscode.TextDocument,
+ position: vscode.Position
+) {
+ var initialLineNum = position.line
+ var lineNum = 0
+ while (initialLineNum !== 0 && lineNum <= initialLineNum) {
+ const lineText = document.lineAt(lineNum).text
+ // returns either empty prefix value or a prefix plus a colon
+ let text = lineText.match(schemaPrefixRegEx)
+ if (text != null) {
+ return text[1]
+ }
+ ++lineNum
+ }
+ //returns the standard prefix plus a colon in the case of missing schema tag
+ return 'xs:'
+}
+
export function checkBraceOpen(
document: vscode.TextDocument,
position: vscode.Position
@@ -290,9 +299,8 @@
var lineNum = position.line
while (lineNum !== 0) {
- const wholeLine = document
- .lineAt(lineNum)
- .text.substring(0, document.lineAt(lineNum).range.end.character)
+ const wholeLine = document.lineAt(lineNum).text
+ //.text.substring(0, document.lineAt(lineNum).range.end.character)
if (
wholeLine.includes('"{') &&
diff --git a/src/tests/suite/language/items.test.ts b/src/tests/suite/language/items.test.ts
index 5198439..55de964 100644
--- a/src/tests/suite/language/items.test.ts
+++ b/src/tests/suite/language/items.test.ts
@@ -85,7 +85,7 @@
})
test('all elementItems available', async () => {
- elementCompletion('', '').items.forEach((item) => {
+ elementCompletion('', '', '').items.forEach((item) => {
assert.strictEqual(expectedElementItems.includes(item.item), true)
})
})