diff --git a/.eslintrc b/.eslintrc.json
similarity index 100%
rename from .eslintrc
rename to .eslintrc.json
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 1a324740cbd..34edacfa967 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -1,10 +1,10 @@
---
name: Bug report
about: Create a report to help us improve
-
---
-
+
+
- VSCode Version:
diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md
index 2043e48c7aa..a0435cb1d3e 100644
--- a/.github/ISSUE_TEMPLATE/question.md
+++ b/.github/ISSUE_TEMPLATE/question.md
@@ -1,9 +1,9 @@
---
name: Question
-about: The issue tracker is not for questions. Please ask questions on https://stackoverflow.com/questions/tagged/vscode.
+about: The issue tracker is not for questions. Please ask questions on https://stackoverflow.com/questions/tagged/visual-studio-code.
---
🚨 The issue tracker is not for questions 🚨
-If you have a question, please ask it on https://stackoverflow.com/questions/tagged/vscode.
+If you have a question, please ask it on https://stackoverflow.com/questions/tagged/visual-studio-code.
diff --git a/.github/calendar.yml b/.github/calendar.yml
index a08deeaee6c..d7827edb02b 100644
--- a/.github/calendar.yml
+++ b/.github/calendar.yml
@@ -21,5 +21,11 @@
'2018-05-15 12:00, US/Pacific': 'development',
'2018-05-28 18:00, US/Pacific': 'endgame',
# 'release' not needed anymore, return to 'development' after releasing.
- '2018-06-06 12:00, US/Pacific': 'development',
+ '2018-06-06 12:00, US/Pacific': 'development', # 1.24.0 released
+ '2018-06-25 18:00, US/Pacific': 'endgame',
+ '2018-07-05 12:00, US/Pacific': 'development', # 1.25.0 released
+ '2018-07-30 18:00, US/Pacific': 'endgame',
+ '2018-08-13 12:00, US/Pacific': 'development', # 1.26.0 released
+ '2018-08-27 18:00, US/Pacific': 'endgame',
+# '2018-09-05 12:00, US/Pacific': 'development', # 1.27.0 released
}
diff --git a/.github/classifier.yml b/.github/classifier.yml
index af9e2f84e41..994c12071a2 100644
--- a/.github/classifier.yml
+++ b/.github/classifier.yml
@@ -1,43 +1,69 @@
{
perform: true,
alwaysRequireAssignee: false,
- labelsRequiringAssignee: [ feature-request ],
+ labelsRequiringAssignee: [],
autoAssignees: {
+ L10N: [],
+ VIM: [],
api: {
assignees: [ jrieken ],
assignLabel: false
},
- color-picker: [],
- css-less-sass: [ aeschli ],
+ cli: [],
+ color-palette: [],
+ config: [],
+ css-less-scss: [ aeschli ],
+ debug-console: [],
debug: {
assignees: [ weinand ],
assignLabel: false
},
diff-editor: [],
+ dropdown: [],
editor: [],
editor-1000-limit: [],
editor-autoclosing: [],
editor-autoindent: [],
editor-brackets: [],
editor-clipboard: [],
+ editor-code-actions: [],
+ editor-code-lens: [],
+ editor-color-picker: [],
+ editor-colors: [],
editor-columnselect: [],
+ editor-commands: [],
editor-contrib: [],
- editor-core: [],
- editor-find-widget: [],
+ editor-drag-and-drop: [],
+ editor-find: [],
editor-folding: [],
+ editor-hover: [],
editor-ime: [],
editor-input: [],
+ editor-ligatures: [],
+ editor-links: [],
editor-minimap: [],
editor-multicursor: [],
+ editor-parameter-hints: [],
+ editor-rendering: [],
editor-smooth: [],
+ editor-symbols: [],
+ editor-textbuffer: [],
editor-wrapping: [],
emmet: [ ramya-rao-a ],
error-list: [],
+ explorer-custom: [],
+ extension-host: [],
extensions: [],
+ file-decorations: [],
file-encoding: {
assignees: [],
assignLabel: false
},
+ file-explorer: {
+ assignees: [ bpasero ],
+ assignLabel: false
+ },
+ file-glob: [],
file-io: {
assignees: [],
assignLabel: false
@@ -46,45 +72,73 @@
assignees: [],
assignLabel: false
},
- file-explorer: {
- assignees: [ isidorn ],
- assignLabel: false
- },
- format: [],
+ formatting: [],
git: [ joaomoreno ],
+ grammar: [],
hot-exit: [ Tyriar ],
html: [ aeschli ],
- i18n: [],
install-update: [],
integrated-terminal: [ Tyriar ],
+ integration-test: [],
+ intellisense-config: [],
+ issue-reporter: [ RMacfarlane ],
javascript: [ mjbvz ],
json: [],
- keybindings: [],
keyboard-layout: [],
+ keybindings: [],
+ keybindings-editor: [],
+ lang-diagnostics: [],
languages basic: [],
+ list: [],
+ log: [],
markdown: [ mjbvz ],
+ marketplace: [],
+ menus: [],
merge-conflict: [ chrmarti ],
multi-root: {
assignees: [],
assignLabel: false
},
+ os-integration: [],
+ outline: [],
+ output: [],
perf-profile: [],
+ perf-bloat: [],
+ perf-startup: [],
php: [ roblourens ],
proxy: [],
+ quick-pick: [ chrmarti ],
+ release-notes: [],
remote: {
assignees: [ jrieken ],
assignLabel: false
},
+ rename: [],
+ run-as-admin: [],
+ samples: [],
scm: [],
search: [ roblourens ],
+ search-replace: [],
+ settings-editor: [],
+ shared-process: [],
+ smart-select: [],
+ smoke-test: [],
snippets: {
assignees: [ jrieken ],
assignLabel: false
},
+ suggest: [],
tasks: [ dbaeumer ],
telemetry: [],
themes: [],
+ tokenization: [],
+ tree: [],
typescript: [ mjbvz ],
+ unit-test: [],
+ uri: [],
+ ux: [],
+ vscode-build: [],
+ webview: [],
workbench: {
assignees: [],
assignLabel: false
@@ -109,6 +163,10 @@
assignees: [],
assignLabel: false
},
+ workbench-grid: {
+ assignees: [],
+ assignLabel: false
+ },
workbench-history: {
assignees: [],
assignLabel: false
@@ -145,6 +203,10 @@
assignees: [],
assignLabel: false
},
+ workbench-views: {
+ assignees: [],
+ assignLabel: false
+ },
workbench-welcome: [ chrmarti ]
}
}
diff --git a/.github/commands.yml b/.github/commands.yml
index ba8c8d7f3ce..56edba1d4da 100644
--- a/.github/commands.yml
+++ b/.github/commands.yml
@@ -29,7 +29,7 @@
type: 'label',
name: '*out-of-scope',
action: 'close',
- comment: "This issue is being closed to keep the number of issues in our inbox on a manageable level, we are closing issues that have been on the backlog for a long time but have not gained traction: We look at the number of votes the issue has received and the number of duplicate issues filed. If you disagree and feel that this issue is crucial: We are happy to listen and to reconsider.\n\nIf you wonder what we are up to, please see our [roadmap](https://aka.ms/vscoderoadmap) and [issue reporting](https://aka.ms/vscodeissuereporting) guidelines.\n\nThanks for your understanding and happy coding!"
+ comment: "This issue is being closed to keep the number of issues in our inbox on a manageable level, we are closing issues that are not going to be addressed in the foreseeable future: We look at the number of votes the issue has received and the number of duplicate issues filed. If you disagree and feel that this issue is crucial: We are happy to listen and to reconsider.\n\nIf you wonder what we are up to, please see our [roadmap](https://aka.ms/vscoderoadmap) and [issue reporting](https://aka.ms/vscodeissuereporting) guidelines.\n\nThanks for your understanding and happy coding!"
},
{
type: 'label',
@@ -62,5 +62,12 @@
action: 'comment',
comment: "Potential duplicates:\n${potentialDuplicates}"
},
+ {
+ type: 'comment',
+ name: 'needsMoreInfo',
+ action: 'updateLabels',
+ addLabel: 'needs more info',
+ comment: "Thanks for creating this issue! We figured it's missing some basic information or in some other way doesn't follow our [issue reporting](https://aka.ms/vscodeissuereporting) guidelines. Please take the time to review these and update the issue.\n\nHappy Coding!"
+ },
]
}
diff --git a/.github/new_release.yml b/.github/new_release.yml
index a17089e852d..7482b60b108 100644
--- a/.github/new_release.yml
+++ b/.github/new_release.yml
@@ -1,6 +1,6 @@
{
newReleaseLabel: 'new release',
newReleaseColor: '006b75',
- daysAfterRelease: 7,
+ daysAfterRelease: 5,
perform: true
-}
\ No newline at end of file
+}
diff --git a/.gitignore b/.gitignore
index ccf4cca05f5..6a9804cd237 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,9 +3,12 @@ npm-debug.log
Thumbs.db
node_modules/
.build/
+extensions/**/dist/
out/
out-build/
out-editor/
+out-editor-src/
+out-editor-build/
out-editor-esm/
out-editor-min/
out-monaco-editor-core/
@@ -14,4 +17,5 @@ out-vscode-min/
build/node_modules
coverage/
test_data/
-yarn-error.log
\ No newline at end of file
+test-results/
+yarn-error.log
diff --git a/.vscode/launch.json b/.vscode/launch.json
index 4761367d036..73b99e84fbb 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -19,6 +19,7 @@
"protocol": "inspector",
"port": 5870,
"restart": true,
+ "smartStep": true,
"outFiles": [
"${workspaceFolder}/out/**/*.js"
]
@@ -29,6 +30,7 @@
"name": "Attach to Shared Process",
"protocol": "inspector",
"port": 5871,
+ "smartStep": true,
"outFiles": [
"${workspaceFolder}/out/**/*.js"
]
@@ -39,6 +41,7 @@
"protocol": "inspector",
"name": "Attach to Search Process",
"port": 5876,
+ "smartStep": true,
"outFiles": [
"${workspaceFolder}/out/**/*.js"
]
@@ -49,6 +52,7 @@
"name": "Attach to CLI Process",
"protocol": "inspector",
"port": 5874,
+ "smartStep": true,
"outFiles": [
"${workspaceFolder}/out/**/*.js"
]
@@ -59,6 +63,7 @@
"name": "Attach to Main Process",
"protocol": "inspector",
"port": 5875,
+ "smartStep": true,
"outFiles": [
"${workspaceFolder}/out/**/*.js"
]
@@ -124,6 +129,7 @@
"type": "chrome",
"request": "attach",
"name": "Attach to VS Code",
+ "smartStep": true,
"port": 9222
},
{
@@ -139,10 +145,11 @@
"linux": {
"runtimeExecutable": "${workspaceFolder}/scripts/code.sh"
},
- "urlFilter": "*index.html*",
+ "urlFilter": "*workbench.html*",
"runtimeArgs": [
"--inspect=5875"
],
+ "smartStep": true,
"skipFiles": [
"**/winjs*.js"
],
@@ -201,7 +208,7 @@
"linux": {
"runtimeExecutable": "${workspaceFolder}/.build/electron/code-oss"
},
- "stopOnEntry": false,
+ "outputCapture": "std",
"args": [
"--delay",
"--timeout",
@@ -235,6 +242,15 @@
"VSCODE_DEV": "1",
"VSCODE_CLI": "1"
}
+ },
+ {
+ "name": "Launch Built-in Extension",
+ "type": "extensionHost",
+ "request": "launch",
+ "runtimeExecutable": "${execPath}",
+ "args": [
+ "--extensionDevelopmentPath=${workspaceRoot}/extensions/debug-auto-launch"
+ ]
}
],
"compounds": [
diff --git a/.yarnrc b/.yarnrc
index 42f08fa0c02..58d37cc88fb 100644
--- a/.yarnrc
+++ b/.yarnrc
@@ -1,3 +1,3 @@
disturl "https://atom.io/download/electron"
-target "1.7.12"
+target "2.0.7"
runtime "electron"
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 09ee1ca9270..f3166331378 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -59,7 +59,7 @@ Please include the following with each issue:
* What you expected to see, versus what you actually saw
-* Images, animations, or a link to a video showing the issue occuring
+* Images, animations, or a link to a video showing the issue occurring
* A code snippet that demonstrates the issue or a link to a code repository the developers can easily pull down to recreate the issue locally
@@ -81,7 +81,7 @@ Don't feel bad if the developers can't reproduce the issue right away. They will
### Follow Your Issue
-Once submitted, your report will go into the [issue tracking](https://github.com/Microsoft/vscode/wiki/Issue-Tracking) work flow. Be sure to understand what will happen next, so you know what to expect, and how to continue to assist throughout the process.
+Once submitted, your report will go into the [issue tracking](https://github.com/Microsoft/vscode/wiki/Issue-Tracking) workflow. Be sure to understand what will happen next, so you know what to expect, and how to continue to assist throughout the process.
## Automated Issue Management
diff --git a/OSSREADME.json b/OSSREADME.json
index 8f167afc904..e15cccabcad 100644
--- a/OSSREADME.json
+++ b/OSSREADME.json
@@ -2,7 +2,7 @@
[
{
"name": "chromium",
- "version": "58.0.3029.110",
+ "version": "61.0.3163.100",
"repositoryURL": "http://www.chromium.org/Home",
"licenseDetail": [
"BSD License",
@@ -38,20 +38,20 @@
},
{
"name": "libchromiumcontent",
- "version": "58.0.3029.110",
+ "version": "61.0.3163.100",
"license": "MIT",
"repositoryURL": "https://github.com/electron/libchromiumcontent",
"isProd": true
},
{
"name": "nodejs",
- "version": "7.9.0",
+ "version": "8.9.3",
"repositoryURL": "https://github.com/nodejs/node",
"isProd": true
},
{
"name": "electron",
- "version": "1.7.3",
+ "version": "2.0.7",
"license": "MIT",
"repositoryURL": "https://github.com/electron/electron",
"isProd": true
diff --git a/README.md b/README.md
index c44f8166301..7b861aad8c9 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,8 @@
# Visual Studio Code - Open Source
-[](https://aka.ms/vscode-builds)
-[](https://coveralls.io/github/Microsoft/vscode?branch=master)
+[](https://aka.ms/vscode-builds)
+[](https://github.com/Microsoft/vscode/issues?utf8=✓&q=is%3Aissue+is%3Aopen+label%3Afeature-request)
+[](https://github.com/Microsoft/vscode/issues?utf8=✓&q=is%3Aissue+is%3Aopen+label%3Abug)
[](https://gitter.im/Microsoft/vscode)
[VS Code](https://code.visualstudio.com) is a new type of tool that combines the simplicity of
@@ -16,9 +17,9 @@ VS Code is updated monthly with new features and bug fixes. You can download it
The [`vscode`](https://github.com/microsoft/vscode) repository is where we do development and there are many ways you can participate in the project, for example:
-* [Submit bugs and feature requests](https://github.com/microsoft/vscode/issues) and help us verify as they are checked in
-* Review [source code changes](https://github.com/microsoft/vscode/pulls)
-* Review the [documentation](https://github.com/microsoft/vscode-docs) and make pull requests for anything from typos to new content
+* [Submit bugs and feature requests](https://github.com/microsoft/vscode/issues) and help us verify as they are checked in.
+* Review [source code changes](https://github.com/microsoft/vscode/pulls).
+* Review the [documentation](https://github.com/microsoft/vscode-docs) and make pull requests for anything from typos to new content.
## Contributing
@@ -42,6 +43,7 @@ Please see also our [Code of Conduct](CODE_OF_CONDUCT.md).
* [Tweet](https://twitter.com/code) us with other feedback.
## Related Projects
+
Many of the core components and extensions to Code live in their own repositories on GitHub. For example, the [node debug adapter](https://github.com/microsoft/vscode-node-debug) and the [mono debug adapter](https://github.com/microsoft/vscode-mono-debug).
For a complete list, please see the [Related Projects](https://github.com/Microsoft/vscode/wiki/Related-Projects) page on our wiki.
diff --git a/ThirdPartyNotices.txt b/ThirdPartyNotices.txt
index b2fe9e4c585..80e9fd6e808 100644
--- a/ThirdPartyNotices.txt
+++ b/ThirdPartyNotices.txt
@@ -21,48 +21,51 @@ This project incorporates components from the projects listed below. The origina
14. davidrios/pug-tmbundle (https://github.com/davidrios/pug-tmbundle)
15. definitelytyped (https://github.com/DefinitelyTyped/DefinitelyTyped)
16. demyte/language-cshtml (https://github.com/demyte/language-cshtml)
-17. dotnet/csharp-tmLanguage version 0.1.0 (https://github.com/dotnet/csharp-tmLanguage)
-18. expand-abbreviation version 0.5.8 (https://github.com/emmetio/expand-abbreviation)
-19. fadeevab/make.tmbundle (https://github.com/fadeevab/make.tmbundle)
-20. freebroccolo/atom-language-swift (https://github.com/freebroccolo/atom-language-swift)
-21. HTML 5.1 W3C Working Draft version 08 October 2015 (http://www.w3.org/TR/2015/WD-html51-20151008/)
-22. Ikuyadeu/vscode-R (https://github.com/Ikuyadeu/vscode-R)
-23. Ionic documentation version 1.2.4 (https://github.com/ionic-team/ionic-site)
-24. ionide/ionide-fsgrammar (https://github.com/ionide/ionide-fsgrammar)
-25. js-beautify version 1.6.8 (https://github.com/beautify-web/js-beautify)
-26. Jxck/assert version 1.0.0 (https://github.com/Jxck/assert)
-27. language-docker (https://github.com/moby/moby)
-28. language-go version 0.39.0 (https://github.com/atom/language-go)
-29. language-less (https://github.com/atom/language-less)
-30. language-php (https://github.com/atom/language-php)
-31. language-rust version 0.4.9 (https://github.com/zargony/atom-language-rust)
-32. MagicStack/MagicPython (https://github.com/MagicStack/MagicPython)
-33. mdn-data version 1.1.12 (https://github.com/mdn/data)
-34. Microsoft/TypeScript-TmLanguage version 0.0.1 (https://github.com/Microsoft/TypeScript-TmLanguage)
-35. Microsoft/vscode-JSON.tmLanguage (https://github.com/Microsoft/vscode-JSON.tmLanguage)
-36. Microsoft/vscode-mssql (https://github.com/Microsoft/vscode-mssql)
-37. mmims/language-batchfile (https://github.com/mmims/language-batchfile)
-38. octicons-code version 3.1.0 (https://octicons.github.com)
-39. octicons-font version 3.1.0 (https://octicons.github.com)
-40. PowerShell/EditorSyntax (https://github.com/powershell/editorsyntax)
-41. seti-ui version 0.1.0 (https://github.com/jesseweed/seti-ui)
-42. shaders-tmLanguage version 0.1.0 (https://github.com/tgjones/shaders-tmLanguage)
-43. textmate/asp.vb.net.tmbundle (https://github.com/textmate/asp.vb.net.tmbundle)
-44. textmate/c.tmbundle (https://github.com/textmate/c.tmbundle)
-45. textmate/diff.tmbundle (https://github.com/textmate/diff.tmbundle)
-46. textmate/git.tmbundle (https://github.com/textmate/git.tmbundle)
-47. textmate/groovy.tmbundle (https://github.com/textmate/groovy.tmbundle)
-48. textmate/html.tmbundle (https://github.com/textmate/html.tmbundle)
-49. textmate/ini.tmbundle (https://github.com/textmate/ini.tmbundle)
-50. textmate/javascript.tmbundle (https://github.com/textmate/javascript.tmbundle)
-51. textmate/lua.tmbundle (https://github.com/textmate/lua.tmbundle)
-52. textmate/markdown.tmbundle (https://github.com/textmate/markdown.tmbundle)
-53. textmate/perl.tmbundle (https://github.com/textmate/perl.tmbundle)
-54. textmate/ruby.tmbundle (https://github.com/textmate/ruby.tmbundle)
-55. textmate/yaml.tmbundle (https://github.com/textmate/yaml.tmbundle)
-56. TypeScript-TmLanguage version 0.1.8 (https://github.com/Microsoft/TypeScript-TmLanguage)
-57. vscode-logfile-highlighter version 1.2.0 (https://github.com/emilast/vscode-logfile-highlighter)
-58. vscode-swift version 0.0.1 (https://github.com/owensd/vscode-swift)
+17. Document Object Model ()
+18. dotnet/csharp-tmLanguage version 0.1.0 (https://github.com/dotnet/csharp-tmLanguage)
+19. expand-abbreviation version 0.5.8 (https://github.com/emmetio/expand-abbreviation)
+20. fadeevab/make.tmbundle (https://github.com/fadeevab/make.tmbundle)
+21. freebroccolo/atom-language-swift (https://github.com/freebroccolo/atom-language-swift)
+22. HTML 5.1 W3C Working Draft version 08 October 2015 (http://www.w3.org/TR/2015/WD-html51-20151008/)
+23. Ikuyadeu/vscode-R (https://github.com/Ikuyadeu/vscode-R)
+24. Ionic documentation version 1.2.4 (https://github.com/ionic-team/ionic-site)
+25. ionide/ionide-fsgrammar (https://github.com/ionide/ionide-fsgrammar)
+26. js-beautify version 1.6.8 (https://github.com/beautify-web/js-beautify)
+27. Jxck/assert version 1.0.0 (https://github.com/Jxck/assert)
+28. language-docker (https://github.com/moby/moby)
+29. language-go version 0.39.0 (https://github.com/atom/language-go)
+30. language-less (https://github.com/atom/language-less)
+31. language-php (https://github.com/atom/language-php)
+32. language-rust version 0.4.9 (https://github.com/zargony/atom-language-rust)
+33. MagicStack/MagicPython (https://github.com/MagicStack/MagicPython)
+34. mdn-data version 1.1.12 (https://github.com/mdn/data)
+35. Microsoft/TypeScript-TmLanguage version 0.0.1 (https://github.com/Microsoft/TypeScript-TmLanguage)
+36. Microsoft/vscode-JSON.tmLanguage (https://github.com/Microsoft/vscode-JSON.tmLanguage)
+37. Microsoft/vscode-mssql (https://github.com/Microsoft/vscode-mssql)
+38. mmims/language-batchfile (https://github.com/mmims/language-batchfile)
+39. octicons-code version 3.1.0 (https://octicons.github.com)
+40. octicons-font version 3.1.0 (https://octicons.github.com)
+41. PowerShell/EditorSyntax (https://github.com/powershell/editorsyntax)
+42. seti-ui version 0.1.0 (https://github.com/jesseweed/seti-ui)
+43. shaders-tmLanguage version 0.1.0 (https://github.com/tgjones/shaders-tmLanguage)
+44. textmate/asp.vb.net.tmbundle (https://github.com/textmate/asp.vb.net.tmbundle)
+45. textmate/c.tmbundle (https://github.com/textmate/c.tmbundle)
+46. textmate/diff.tmbundle (https://github.com/textmate/diff.tmbundle)
+47. textmate/git.tmbundle (https://github.com/textmate/git.tmbundle)
+48. textmate/groovy.tmbundle (https://github.com/textmate/groovy.tmbundle)
+49. textmate/html.tmbundle (https://github.com/textmate/html.tmbundle)
+50. textmate/ini.tmbundle (https://github.com/textmate/ini.tmbundle)
+51. textmate/javascript.tmbundle (https://github.com/textmate/javascript.tmbundle)
+52. textmate/lua.tmbundle (https://github.com/textmate/lua.tmbundle)
+53. textmate/markdown.tmbundle (https://github.com/textmate/markdown.tmbundle)
+54. textmate/perl.tmbundle (https://github.com/textmate/perl.tmbundle)
+55. textmate/ruby.tmbundle (https://github.com/textmate/ruby.tmbundle)
+56. textmate/yaml.tmbundle (https://github.com/textmate/yaml.tmbundle)
+57. TypeScript-TmLanguage version 0.1.8 (https://github.com/Microsoft/TypeScript-TmLanguage)
+58. Unicode ()
+59. vscode-logfile-highlighter version 1.2.0 (https://github.com/emilast/vscode-logfile-highlighter)
+60. vscode-swift version 0.0.1 (https://github.com/owensd/vscode-swift)
+61. Web Background Synchronization (https://github.com/WICG/BackgroundSync)
%% atom/language-c NOTICES AND INFORMATION BEGIN HERE
@@ -600,6 +603,27 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
=========================================
END OF demyte/language-cshtml NOTICES AND INFORMATION
+%% Document Object Model NOTICES AND INFORMATION BEGIN HERE
+=========================================
+W3C License
+This work is being provided by the copyright holders under the following license.
+By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions.
+Permission to copy, modify, and distribute this work, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following
+on ALL copies of the work or portions thereof, including modifications:
+* The full text of this NOTICE in a location viewable to users of the redistributed or derivative work.
+* Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C Software and Document Short Notice should be included.
+* Notice of any changes or modifications, through a copyright statement on the new code or document such as "This software or document includes material copied from or derived
+from Document Object Model. Copyright © 2015 W3C® (MIT, ERCIM, Keio, Beihang)."
+Disclaimers
+THIS WORK IS PROVIDED "AS IS
+ AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR
+FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
+COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT.
+The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work without specific, written prior permission.
+Title to copyright in this work will at all times remain with copyright holders.
+=========================================
+END OF Document Object Model NOTICES AND INFORMATION
+
%% dotnet/csharp-tmLanguage NOTICES AND INFORMATION BEGIN HERE
=========================================
MIT License
@@ -831,7 +855,7 @@ END OF ionide/ionide-fsgrammar NOTICES AND INFORMATION
=========================================
The MIT License (MIT)
-Copyright (c) 2007-2017 Einar Lielmanis, Liam Newman, and contributors.
+Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
@@ -2225,6 +2249,66 @@ THE SOFTWARE.
=========================================
END OF TypeScript-TmLanguage NOTICES AND INFORMATION
+%% Unicode NOTICES AND INFORMATION BEGIN HERE
+=========================================
+Unicode Data Files include all data files under the directories
+http://www.unicode.org/Public/, http://www.unicode.org/reports/,
+http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and
+http://www.unicode.org/utility/trac/browser/.
+
+Unicode Data Files do not include PDF online code charts under the
+directory http://www.unicode.org/Public/.
+
+Software includes any source code published in the Unicode Standard
+or under the directories
+http://www.unicode.org/Public/, http://www.unicode.org/reports/,
+http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and
+http://www.unicode.org/utility/trac/browser/.
+
+NOTICE TO USER: Carefully read the following legal agreement.
+BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S
+DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"),
+YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE
+TERMS AND CONDITIONS OF THIS AGREEMENT.
+IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE
+THE DATA FILES OR SOFTWARE.
+
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright (c) 1991-2017 Unicode, Inc. All rights reserved.
+Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Unicode data files and any associated documentation
+(the "Data Files") or Unicode software and any associated documentation
+(the "Software") to deal in the Data Files or Software
+without restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, and/or sell copies of
+the Data Files or Software, and to permit persons to whom the Data Files
+or Software are furnished to do so, provided that either
+(a) this copyright and permission notice appear with all copies
+of the Data Files or Software, or
+(b) this copyright and permission notice appear in associated
+Documentation.
+
+THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
+NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
+DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder
+shall not be used in advertising or otherwise to promote the sale,
+use or other dealings in these Data Files or Software without prior
+written authorization of the copyright holder.
+=========================================
+END OF Unicode NOTICES AND INFORMATION
+
%% vscode-logfile-highlighter NOTICES AND INFORMATION BEGIN HERE
=========================================
The MIT License (MIT)
@@ -2274,4 +2358,210 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
=========================================
-END OF vscode-swift NOTICES AND INFORMATION
\ No newline at end of file
+END OF vscode-swift NOTICES AND INFORMATION
+
+%% Web Background Synchronization NOTICES AND INFORMATION BEGIN HERE
+=========================================
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+=========================================
+END OF Web Background Synchronization NOTICES AND INFORMATION
\ No newline at end of file
diff --git a/build/builtInExtensions.json b/build/builtInExtensions.json
index 795500b06eb..0fba2a82a6f 100644
--- a/build/builtInExtensions.json
+++ b/build/builtInExtensions.json
@@ -1,12 +1,12 @@
[
{
"name": "ms-vscode.node-debug",
- "version": "1.24.0",
+ "version": "1.28.1",
"repo": "https://github.com/Microsoft/vscode-node-debug"
},
{
"name": "ms-vscode.node-debug2",
- "version": "1.25.0",
+ "version": "1.28.0",
"repo": "https://github.com/Microsoft/vscode-node-debug2"
}
]
diff --git a/build/dependencies.js b/build/dependencies.js
index a0b1ee01dc5..2adf7e29ca7 100644
--- a/build/dependencies.js
+++ b/build/dependencies.js
@@ -43,7 +43,7 @@ function asYarnDependency(prefix, tree) {
}
function getYarnProductionDependencies(cwd) {
- const raw = cp.execSync('yarn list --json', { cwd, encoding: 'utf8', env: { ...process.env, NODE_ENV: 'production' }, stdio: [null, null, 'ignore'] });
+ const raw = cp.execSync('yarn list --json', { cwd, encoding: 'utf8', env: { ...process.env, NODE_ENV: 'production' }, stdio: [null, null, 'inherit'] });
const match = /^{"type":"tree".*$/m.exec(raw);
if (!match || match.length !== 1) {
diff --git a/build/gulpfile.editor.js b/build/gulpfile.editor.js
index 3fc14da5045..0c7a37b1f76 100644
--- a/build/gulpfile.editor.js
+++ b/build/gulpfile.editor.js
@@ -12,10 +12,12 @@ const File = require('vinyl');
const i18n = require('./lib/i18n');
const standalone = require('./lib/standalone');
const cp = require('child_process');
+const compilation = require('./lib/compilation');
+const monacoapi = require('./monaco/api');
+const fs = require('fs');
var root = path.dirname(__dirname);
var sha1 = util.getVersion(root);
-// @ts-ignore Microsoft/TypeScript#21262 complains about a require of a JSON file
var semver = require('./monaco/package.json').version;
var headerVersion = semver + '(' + sha1 + ')';
@@ -59,29 +61,56 @@ var BUNDLED_FILE_HEADER = [
''
].join('\n');
-function editorLoaderConfig() {
- var result = common.loaderConfig();
-
- // never ship octicons in editor
- result.paths['vs/base/browser/ui/octiconLabel/octiconLabel'] = 'out-build/vs/base/browser/ui/octiconLabel/octiconLabel.mock';
-
- // force css inlining to use base64 -- see https://github.com/Microsoft/monaco-editor/issues/148
- result['vs/css'] = {
- inlineResources: 'base64',
- inlineResourcesLimit: 3000 // see https://github.com/Microsoft/monaco-editor/issues/336
- };
-
- return result;
-}
-
const languages = i18n.defaultLanguages.concat([]); // i18n.defaultLanguages.concat(process.env.VSCODE_QUALITY !== 'stable' ? i18n.extraLanguages : []);
+gulp.task('clean-editor-src', util.rimraf('out-editor-src'));
+gulp.task('extract-editor-src', ['clean-editor-src'], function () {
+ console.log(`If the build fails, consider tweaking shakeLevel below to a lower value.`);
+ const apiusages = monacoapi.execute().usageContent;
+ const extrausages = fs.readFileSync(path.join(root, 'build', 'monaco', 'monaco.usage.recipe')).toString();
+ standalone.extractEditor({
+ sourcesRoot: path.join(root, 'src'),
+ entryPoints: [
+ 'vs/editor/editor.main',
+ 'vs/editor/editor.worker',
+ 'vs/base/worker/workerMain',
+ ],
+ inlineEntryPoints: [
+ apiusages,
+ extrausages
+ ],
+ libs: [
+ `lib.d.ts`,
+ `lib.es2015.collection.d.ts`
+ ],
+ redirects: {
+ 'vs/base/browser/ui/octiconLabel/octiconLabel': 'vs/base/browser/ui/octiconLabel/octiconLabel.mock',
+ },
+ compilerOptions: {
+ module: 2, // ModuleKind.AMD
+ },
+ shakeLevel: 2, // 0-Files, 1-InnerFile, 2-ClassMembers
+ importIgnorePattern: /^vs\/css!/,
+ destRoot: path.join(root, 'out-editor-src')
+ });
+});
+
+// Full compile, including nls and inline sources in sourcemaps, for build
+gulp.task('clean-editor-build', util.rimraf('out-editor-build'));
+gulp.task('compile-editor-build', ['clean-editor-build', 'extract-editor-src'], compilation.compileTask('out-editor-src', 'out-editor-build', true));
+
gulp.task('clean-optimized-editor', util.rimraf('out-editor'));
-gulp.task('optimize-editor', ['clean-optimized-editor', 'compile-client-build'], common.optimizeTask({
+gulp.task('optimize-editor', ['clean-optimized-editor', 'compile-editor-build'], common.optimizeTask({
+ src: 'out-editor-build',
entryPoints: editorEntryPoints,
otherSources: editorOtherSources,
resources: editorResources,
- loaderConfig: editorLoaderConfig(),
+ loaderConfig: {
+ paths: {
+ 'vs': 'out-editor-build/vs',
+ 'vscode': 'empty:'
+ }
+ },
bundleLoader: false,
header: BUNDLED_FILE_HEADER,
bundleInfo: true,
@@ -93,17 +122,25 @@ gulp.task('clean-minified-editor', util.rimraf('out-editor-min'));
gulp.task('minify-editor', ['clean-minified-editor', 'optimize-editor'], common.minifyTask('out-editor'));
gulp.task('clean-editor-esm', util.rimraf('out-editor-esm'));
-gulp.task('extract-editor-esm', ['clean-editor-esm', 'clean-editor-distro'], function () {
- standalone.createESMSourcesAndResources({
- entryPoints: [
- 'vs/editor/editor.main',
- 'vs/editor/editor.worker'
- ],
+gulp.task('extract-editor-esm', ['clean-editor-esm', 'clean-editor-distro', 'extract-editor-src'], function () {
+ standalone.createESMSourcesAndResources2({
+ srcFolder: './out-editor-src',
outFolder: './out-editor-esm/src',
outResourcesFolder: './out-monaco-editor-core/esm',
- redirects: {
- 'vs/base/browser/ui/octiconLabel/octiconLabel': 'vs/base/browser/ui/octiconLabel/octiconLabel.mock',
- 'vs/nls': 'vs/nls.mock',
+ ignores: [
+ 'inlineEntryPoint:0.ts',
+ 'inlineEntryPoint:1.ts',
+ 'vs/loader.js',
+ 'vs/nls.ts',
+ 'vs/nls.build.js',
+ 'vs/nls.d.ts',
+ 'vs/css.js',
+ 'vs/css.build.js',
+ 'vs/css.d.ts',
+ 'vs/base/worker/workerMain.ts',
+ ],
+ renames: {
+ 'vs/nls.mock.ts': 'vs/nls.ts'
}
});
});
@@ -165,7 +202,7 @@ gulp.task('editor-distro', ['clean-editor-distro', 'compile-editor-esm', 'minify
this.emit('data', new File({
path: data.path.replace(/monaco\.d\.ts/, 'editor.api.d.ts'),
base: data.base,
- contents: new Buffer(toExternalDTS(data.contents.toString()))
+ contents: Buffer.from(toExternalDTS(data.contents.toString()))
}));
}))
.pipe(gulp.dest('out-monaco-editor-core/esm/vs/editor')),
@@ -230,7 +267,7 @@ gulp.task('editor-distro', ['clean-editor-distro', 'compile-editor-esm', 'minify
});
gulp.task('analyze-editor-distro', function () {
- // @ts-ignore Microsoft/TypeScript#21262 complains about a require of a JSON file
+ // @ts-ignore
var bundleInfo = require('../out-editor/bundleInfo.json');
var graph = bundleInfo.graph;
var bundles = bundleInfo.bundles;
diff --git a/build/gulpfile.extensions.js b/build/gulpfile.extensions.js
index 3ec638c2f22..bd38427a422 100644
--- a/build/gulpfile.extensions.js
+++ b/build/gulpfile.extensions.js
@@ -20,7 +20,6 @@ const sourcemaps = require('gulp-sourcemaps');
const nlsDev = require('vscode-nls-dev');
const root = path.dirname(__dirname);
const commit = util.getVersion(root);
-const i18n = require('./lib/i18n');
const plumber = require('gulp-plumber');
const extensionsPath = path.join(path.dirname(__dirname), 'extensions');
@@ -32,8 +31,6 @@ const compilations = glob.sync('**/tsconfig.json', {
const getBaseUrl = out => `https://ticino.blob.core.windows.net/sourcemaps/${commit}/${out}`;
-const languages = i18n.defaultLanguages.concat(process.env.VSCODE_QUALITY !== 'stable' ? i18n.extraLanguages : []);
-
const tasks = compilations.map(function (tsconfigFile) {
const absolutePath = path.join(extensionsPath, tsconfigFile);
const relativeDirname = path.dirname(tsconfigFile);
@@ -58,7 +55,6 @@ const tasks = compilations.map(function (tsconfigFile) {
const srcBase = path.join(root, 'src');
const src = path.join(srcBase, '**');
const out = path.join(root, 'out');
- const i18nPath = path.join(__dirname, '..', 'i18n');
const baseUrl = getBaseUrl(out);
let headerId, headerOut;
@@ -102,9 +98,9 @@ const tasks = compilations.map(function (tsconfigFile) {
sourceRoot: '../src'
}))
.pipe(tsFilter.restore)
- .pipe(build ? nlsDev.createAdditionalLanguageFiles(languages, i18nPath, out) : es.through())
.pipe(build ? nlsDev.bundleMetaDataFiles(headerId, headerOut) : es.through())
- .pipe(build ? nlsDev.bundleLanguageFiles() : es.through())
+ // Filter out *.nls.json file. We needed them only to bundle meta data file.
+ .pipe(filter(['**', '!**/*.nls.json']))
.pipe(reporter.end(emitError));
return es.duplex(input, output);
@@ -171,4 +167,4 @@ gulp.task('watch-extensions', tasks.map(t => t.watch));
gulp.task('clean-extensions-build', tasks.map(t => t.cleanBuild));
gulp.task('compile-extensions-build', tasks.map(t => t.compileBuild));
-gulp.task('watch-extensions-build', tasks.map(t => t.watchBuild));
\ No newline at end of file
+gulp.task('watch-extensions-build', tasks.map(t => t.watchBuild));
diff --git a/build/gulpfile.hygiene.js b/build/gulpfile.hygiene.js
index a84e78dece1..893568ca9c5 100644
--- a/build/gulpfile.hygiene.js
+++ b/build/gulpfile.hygiene.js
@@ -44,7 +44,9 @@ const indentationFilter = [
'!ThirdPartyNotices.txt',
'!LICENSE.txt',
'!src/vs/nls.js',
+ '!src/vs/nls.build.js',
'!src/vs/css.js',
+ '!src/vs/css.build.js',
'!src/vs/loader.js',
'!src/vs/base/common/marked/marked.js',
'!src/vs/base/common/winjs.base.js',
@@ -82,6 +84,7 @@ const indentationFilter = [
'!build/{lib,tslintRules}/**/*.js',
'!build/**/*.sh',
'!build/tfs/**/*.js',
+ '!build/tfs/**/*.config',
'!**/Dockerfile',
'!extensions/markdown-language-features/media/*.js'
];
@@ -104,6 +107,7 @@ const copyrightFilter = [
'!**/*.code-workspace',
'!build/**/*.init',
'!resources/linux/snap/snapcraft.yaml',
+ '!resources/linux/snap/electron-launch',
'!resources/win32/bin/code.js',
'!extensions/markdown-language-features/media/highlight.css',
'!extensions/html-language-features/server/src/modes/typescript/*',
diff --git a/build/gulpfile.mixin.js b/build/gulpfile.mixin.js
index a370981ab3c..29cce77c5dd 100644
--- a/build/gulpfile.mixin.js
+++ b/build/gulpfile.mixin.js
@@ -15,7 +15,6 @@ const remote = require('gulp-remote-src');
const zip = require('gulp-vinyl-zip');
const assign = require('object-assign');
-// @ts-ignore Microsoft/TypeScript#21262 complains about a require of a JSON file
const pkg = require('../package.json');
gulp.task('mixin', function () {
@@ -56,7 +55,6 @@ gulp.task('mixin', function () {
.pipe(util.rebase(2))
.pipe(productJsonFilter)
.pipe(buffer())
- // @ts-ignore Microsoft/TypeScript#21262 complains about a require of a JSON file
.pipe(json(o => assign({}, require('../product.json'), o)))
.pipe(productJsonFilter.restore);
diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js
index 30a1563d7b9..46c045e0e89 100644
--- a/build/gulpfile.vscode.js
+++ b/build/gulpfile.vscode.js
@@ -17,23 +17,18 @@ const vfs = require('vinyl-fs');
const rename = require('gulp-rename');
const replace = require('gulp-replace');
const filter = require('gulp-filter');
-const buffer = require('gulp-buffer');
const json = require('gulp-json-editor');
const _ = require('underscore');
const util = require('./lib/util');
const ext = require('./lib/extensions');
const buildfile = require('../src/buildfile');
const common = require('./lib/optimize');
-const nlsDev = require('vscode-nls-dev');
const root = path.dirname(__dirname);
const commit = util.getVersion(root);
-// @ts-ignore Microsoft/TypeScript#21262 complains about a require of a JSON file
const packageJson = require('../package.json');
-// @ts-ignore Microsoft/TypeScript#21262 complains about a require of a JSON file
const product = require('../product.json');
const crypto = require('crypto');
const i18n = require('./lib/i18n');
-const glob = require('glob');
const deps = require('./dependencies');
const getElectronVersion = require('./lib/electron').getElectronVersion;
const createAsar = require('./lib/asar').createAsar;
@@ -42,21 +37,12 @@ const productionDependencies = deps.getProductionDependencies(path.dirname(__dir
// @ts-ignore
const baseModules = Object.keys(process.binding('natives')).filter(n => !/^_|\//.test(n));
const nodeModules = ['electron', 'original-fs']
+ // @ts-ignore JSON checking: dependencies property is optional
.concat(Object.keys(product.dependencies || {}))
.concat(_.uniq(productionDependencies.map(d => d.name)))
.concat(baseModules);
// Build
-// @ts-ignore Microsoft/TypeScript#21262 complains about a require of a JSON file
-const builtInExtensions = require('./builtInExtensions.json');
-
-const excludedExtensions = [
- 'vscode-api-tests',
- 'vscode-colorize-tests',
- 'ms-vscode.node-debug',
- 'ms-vscode.node-debug2',
-];
-
const vscodeEntryPoints = _.flatten([
buildfile.entrypoint('vs/workbench/workbench.main'),
buildfile.base,
@@ -69,23 +55,24 @@ const vscodeResources = [
'out-build/cli.js',
'out-build/driver.js',
'out-build/bootstrap.js',
+ 'out-build/bootstrap-fork.js',
'out-build/bootstrap-amd.js',
+ 'out-build/bootstrap-window.js',
'out-build/paths.js',
'out-build/vs/**/*.{svg,png,cur,html}',
'out-build/vs/base/common/performance.js',
- 'out-build/vs/base/node/{stdForkStart.js,terminateProcess.sh, cpuUsage.sh}',
+ 'out-build/vs/base/node/{stdForkStart.js,terminateProcess.sh,cpuUsage.sh}',
'out-build/vs/base/browser/ui/octiconLabel/octicons/**',
'out-build/vs/workbench/browser/media/*-theme.css',
- 'out-build/vs/workbench/electron-browser/bootstrap/**',
'out-build/vs/workbench/parts/debug/**/*.json',
'out-build/vs/workbench/parts/execution/**/*.scpt',
'out-build/vs/workbench/parts/webview/electron-browser/webview-pre.js',
'out-build/vs/**/markdown.css',
'out-build/vs/workbench/parts/tasks/**/*.json',
- 'out-build/vs/workbench/parts/terminal/electron-browser/terminalProcess.js',
'out-build/vs/workbench/parts/welcome/walkThrough/**/*.md',
'out-build/vs/workbench/services/files/**/*.exe',
'out-build/vs/workbench/services/files/**/*.md',
+ 'out-build/vs/code/electron-browser/workbench/**',
'out-build/vs/code/electron-browser/sharedProcess/sharedProcess.js',
'out-build/vs/code/electron-browser/issue/issueReporter.js',
'out-build/vs/code/electron-browser/processExplorer/processExplorer.js',
@@ -98,33 +85,33 @@ const BUNDLED_FILE_HEADER = [
' *--------------------------------------------------------*/'
].join('\n');
-const languages = i18n.defaultLanguages.concat([]); // i18n.defaultLanguages.concat(process.env.VSCODE_QUALITY !== 'stable' ? i18n.extraLanguages : []);
-
gulp.task('clean-optimized-vscode', util.rimraf('out-vscode'));
gulp.task('optimize-vscode', ['clean-optimized-vscode', 'compile-build', 'compile-extensions-build'], common.optimizeTask({
+ src: 'out-build',
entryPoints: vscodeEntryPoints,
otherSources: [],
resources: vscodeResources,
loaderConfig: common.loaderConfig(nodeModules),
header: BUNDLED_FILE_HEADER,
out: 'out-vscode',
- languages: languages,
bundleInfo: undefined
}));
gulp.task('optimize-index-js', ['optimize-vscode'], () => {
- const fullpath = path.join(process.cwd(), 'out-vscode/vs/workbench/electron-browser/bootstrap/index.js');
+ const fullpath = path.join(process.cwd(), 'out-vscode/vs/code/electron-browser/workbench/workbench.js');
const contents = fs.readFileSync(fullpath).toString();
const newContents = contents.replace('[/*BUILD->INSERT_NODE_MODULES*/]', JSON.stringify(nodeModules));
fs.writeFileSync(fullpath, newContents);
});
-const baseUrl = `https://ticino.blob.core.windows.net/sourcemaps/${commit}/core`;
+const sourceMappingURLBase = `https://ticino.blob.core.windows.net/sourcemaps/${commit}`;
gulp.task('clean-minified-vscode', util.rimraf('out-vscode-min'));
-gulp.task('minify-vscode', ['clean-minified-vscode', 'optimize-index-js'], common.minifyTask('out-vscode', baseUrl));
+gulp.task('minify-vscode', ['clean-minified-vscode', 'optimize-index-js'], common.minifyTask('out-vscode', `${sourceMappingURLBase}/core`));
// Package
+
+// @ts-ignore JSON checking: darwinCredits is optional
const darwinCreditsTemplate = product.darwinCredits && _.template(fs.readFileSync(path.join(root, product.darwinCredits), 'utf8'));
const config = {
@@ -153,6 +140,8 @@ const config = {
linuxExecutableName: product.applicationName,
winIcon: 'resources/win32/code.ico',
token: process.env['VSCODE_MIXIN_PASSWORD'] || process.env['GITHUB_TOKEN'] || void 0,
+
+ // @ts-ignore JSON checking: electronRepository is optional
repo: product.electronRepository || void 0
};
@@ -225,48 +214,23 @@ function packageTask(platform, arch, opts) {
const checksums = computeChecksums(out, [
'vs/workbench/workbench.main.js',
'vs/workbench/workbench.main.css',
- 'vs/workbench/electron-browser/bootstrap/index.html',
- 'vs/workbench/electron-browser/bootstrap/index.js',
- 'vs/workbench/electron-browser/bootstrap/preload.js'
+ 'vs/code/electron-browser/workbench/workbench.html',
+ 'vs/code/electron-browser/workbench/workbench.js'
]);
const src = gulp.src(out + '/**', { base: '.' })
- .pipe(rename(function (path) { path.dirname = path.dirname.replace(new RegExp('^' + out), 'out'); }));
-
- const root = path.resolve(path.join(__dirname, '..'));
- const localExtensionDescriptions = glob.sync('extensions/*/package.json')
- .map(manifestPath => {
- const extensionPath = path.dirname(path.join(root, manifestPath));
- const extensionName = path.basename(extensionPath);
- return { name: extensionName, path: extensionPath };
- })
- .filter(({ name }) => excludedExtensions.indexOf(name) === -1)
- .filter(({ name }) => builtInExtensions.every(b => b.name !== name));
-
- const localExtensions = es.merge(...localExtensionDescriptions.map(extension => {
- const nlsFilter = filter('**/*.nls.json', { restore: true });
-
- return ext.fromLocal(extension.path)
- .pipe(rename(p => p.dirname = `extensions/${extension.name}/${p.dirname}`))
- // // TODO@Dirk: this filter / buffer is here to make sure the nls.json files are buffered
- .pipe(nlsFilter)
- .pipe(buffer())
- .pipe(nlsDev.createAdditionalLanguageFiles(languages, path.join(__dirname, '..', 'i18n')))
- .pipe(nlsFilter.restore);
- }));
-
- const localExtensionDependencies = gulp.src('extensions/node_modules/**', { base: '.' });
-
- const marketplaceExtensions = es.merge(...builtInExtensions.map(extension => {
- return ext.fromMarketplace(extension.name, extension.version)
- .pipe(rename(p => p.dirname = `extensions/${extension.name}/${p.dirname}`));
- }));
-
- const sources = es.merge(src, localExtensions, localExtensionDependencies, marketplaceExtensions)
+ .pipe(rename(function (path) { path.dirname = path.dirname.replace(new RegExp('^' + out), 'out'); }))
.pipe(util.setExecutableBit(['**/*.sh']))
.pipe(filter(['**', '!**/*.js.map']));
+ const root = path.resolve(path.join(__dirname, '..'));
+
+ const sources = es.merge(src, ext.packageExtensionsStream({
+ sourceMappingURLBase: sourceMappingURLBase
+ }));
+
let version = packageJson.version;
+ // @ts-ignore JSON checking: quality is optional
const quality = product.quality;
if (quality && quality !== 'stable') {
@@ -277,10 +241,15 @@ function packageTask(platform, arch, opts) {
const packageJsonStream = gulp.src(['package.json'], { base: '.' })
.pipe(json({ name, version }));
- const settingsSearchBuildId = getSettingsSearchBuildId(packageJson);
const date = new Date().toISOString();
+ const productJsonUpdate = { commit, date, checksums };
+
+ if (shouldSetupSettingsSearch()) {
+ productJsonUpdate.settingsSearchBuildId = getSettingsSearchBuildId(packageJson);
+ }
+
const productJsonStream = gulp.src(['product.json'], { base: '.' })
- .pipe(json({ commit, date, checksums, settingsSearchBuildId }));
+ .pipe(json(productJsonUpdate));
const license = gulp.src(['LICENSES.chromium.html', 'LICENSE.txt', 'ThirdPartyNotices.txt', 'licenses/**'], { base: '.' });
@@ -291,6 +260,7 @@ function packageTask(platform, arch, opts) {
const depsSrc = [
..._.flatten(productionDependencies.map(d => path.relative(root, d.path)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`])),
+ // @ts-ignore JSON checking: dependencies is optional
..._.flatten(Object.keys(product.dependencies || {}).map(d => [`node_modules/${d}/**`, `!node_modules/${d}/**/{test,tests}/**`]))
];
@@ -359,6 +329,15 @@ function packageTask(platform, arch, opts) {
.pipe(rename('bin/' + product.applicationName)));
}
+ // submit all stats that have been collected
+ // during the build phase
+ if (opts.stats) {
+ result.on('end', () => {
+ const { submitAllStats } = require('./lib/stats');
+ submitAllStats(product, commit).then(() => console.log('Submitted bundle stats!'));
+ });
+ }
+
return result.pipe(vfs.dest(destination));
};
}
@@ -371,20 +350,23 @@ gulp.task('clean-vscode-darwin', util.rimraf(path.join(buildRoot, 'VSCode-darwin
gulp.task('clean-vscode-linux-ia32', util.rimraf(path.join(buildRoot, 'VSCode-linux-ia32')));
gulp.task('clean-vscode-linux-x64', util.rimraf(path.join(buildRoot, 'VSCode-linux-x64')));
gulp.task('clean-vscode-linux-arm', util.rimraf(path.join(buildRoot, 'VSCode-linux-arm')));
+gulp.task('clean-vscode-linux-arm64', util.rimraf(path.join(buildRoot, 'VSCode-linux-arm64')));
gulp.task('vscode-win32-ia32', ['optimize-vscode', 'clean-vscode-win32-ia32'], packageTask('win32', 'ia32'));
gulp.task('vscode-win32-x64', ['optimize-vscode', 'clean-vscode-win32-x64'], packageTask('win32', 'x64'));
-gulp.task('vscode-darwin', ['optimize-vscode', 'clean-vscode-darwin'], packageTask('darwin'));
+gulp.task('vscode-darwin', ['optimize-vscode', 'clean-vscode-darwin'], packageTask('darwin', null, { stats: true }));
gulp.task('vscode-linux-ia32', ['optimize-vscode', 'clean-vscode-linux-ia32'], packageTask('linux', 'ia32'));
gulp.task('vscode-linux-x64', ['optimize-vscode', 'clean-vscode-linux-x64'], packageTask('linux', 'x64'));
gulp.task('vscode-linux-arm', ['optimize-vscode', 'clean-vscode-linux-arm'], packageTask('linux', 'arm'));
+gulp.task('vscode-linux-arm64', ['optimize-vscode', 'clean-vscode-linux-arm64'], packageTask('linux', 'arm64'));
gulp.task('vscode-win32-ia32-min', ['minify-vscode', 'clean-vscode-win32-ia32'], packageTask('win32', 'ia32', { minified: true }));
gulp.task('vscode-win32-x64-min', ['minify-vscode', 'clean-vscode-win32-x64'], packageTask('win32', 'x64', { minified: true }));
-gulp.task('vscode-darwin-min', ['minify-vscode', 'clean-vscode-darwin'], packageTask('darwin', null, { minified: true }));
+gulp.task('vscode-darwin-min', ['minify-vscode', 'clean-vscode-darwin'], packageTask('darwin', null, { minified: true, stats: true }));
gulp.task('vscode-linux-ia32-min', ['minify-vscode', 'clean-vscode-linux-ia32'], packageTask('linux', 'ia32', { minified: true }));
gulp.task('vscode-linux-x64-min', ['minify-vscode', 'clean-vscode-linux-x64'], packageTask('linux', 'x64', { minified: true }));
gulp.task('vscode-linux-arm-min', ['minify-vscode', 'clean-vscode-linux-arm'], packageTask('linux', 'arm', { minified: true }));
+gulp.task('vscode-linux-arm64-min', ['minify-vscode', 'clean-vscode-linux-arm64'], packageTask('linux', 'arm64', { minified: true }));
// Transifex Localizations
@@ -434,37 +416,38 @@ gulp.task('vscode-translations-push-test', ['optimize-vscode'], function () {
});
gulp.task('vscode-translations-pull', function () {
- [...i18n.defaultLanguages, ...i18n.extraLanguages].forEach(language => {
- i18n.pullCoreAndExtensionsXlfFiles(apiHostname, apiName, apiToken, language).pipe(vfs.dest(`../vscode-localization/${language.id}/build`));
-
+ return es.merge([...i18n.defaultLanguages, ...i18n.extraLanguages].map(language => {
let includeDefault = !!innoSetupConfig[language.id].defaultInfo;
- i18n.pullSetupXlfFiles(apiHostname, apiName, apiToken, language, includeDefault).pipe(vfs.dest(`../vscode-localization/${language.id}/setup`));
- });
+ return i18n.pullSetupXlfFiles(apiHostname, apiName, apiToken, language, includeDefault).pipe(vfs.dest(`../vscode-localization/${language.id}/setup`));
+ }));
});
gulp.task('vscode-translations-import', function () {
- [...i18n.defaultLanguages, ...i18n.extraLanguages].forEach(language => {
- gulp.src(`../vscode-localization/${language.id}/build/*/*.xlf`)
- .pipe(i18n.prepareI18nFiles())
- .pipe(vfs.dest(`./i18n/${language.folderName}`));
- gulp.src(`../vscode-localization/${language.id}/setup/*/*.xlf`)
+ return es.merge([...i18n.defaultLanguages, ...i18n.extraLanguages].map(language => {
+ return gulp.src(`../vscode-localization/${language.id}/setup/*/*.xlf`)
.pipe(i18n.prepareIslFiles(language, innoSetupConfig[language.id]))
.pipe(vfs.dest(`./build/win32/i18n`));
- });
+ }));
});
// Sourcemaps
-gulp.task('upload-vscode-sourcemaps', ['minify-vscode'], () => {
+gulp.task('upload-vscode-sourcemaps', ['vscode-darwin-min', 'minify-vscode'], () => {
const vs = gulp.src('out-vscode-min/**/*.map', { base: 'out-vscode-min' })
.pipe(es.mapSync(f => {
f.path = `${f.base}/core/${f.relative}`;
return f;
}));
- const extensions = gulp.src('extensions/**/out/**/*.map', { base: '.' });
+ const extensionsOut = gulp.src('extensions/**/out/**/*.map', { base: '.' });
+ const extensionsDist = gulp.src('extensions/**/dist/**/*.map', { base: '.' });
- return es.merge(vs, extensions)
+ return es.merge(vs, extensionsOut, extensionsDist)
+ .pipe(es.through(function (data) {
+ // debug
+ console.log('Uploading Sourcemap', data.relative);
+ this.emit('data', data);
+ }))
.pipe(azure.upload({
account: process.env.AZURE_STORAGE_ACCOUNT,
key: process.env.AZURE_STORAGE_ACCESS_KEY,
@@ -475,9 +458,8 @@ gulp.task('upload-vscode-sourcemaps', ['minify-vscode'], () => {
const allConfigDetailsPath = path.join(os.tmpdir(), 'configuration.json');
gulp.task('upload-vscode-configuration', ['generate-vscode-configuration'], () => {
- const branch = process.env.BUILD_SOURCEBRANCH;
-
- if (!/\/master$/.test(branch) && branch.indexOf('/release/') < 0) {
+ if (!shouldSetupSettingsSearch()) {
+ const branch = process.env.BUILD_SOURCEBRANCH;
console.log(`Only runs on master and release branches, not ${branch}`);
return;
}
@@ -500,13 +482,24 @@ gulp.task('upload-vscode-configuration', ['generate-vscode-configuration'], () =
}));
});
-function getSettingsSearchBuildId(packageJson) {
- const previous = util.getPreviousVersion(packageJson.version);
+function shouldSetupSettingsSearch() {
+ const branch = process.env.BUILD_SOURCEBRANCH;
+ return branch && (/\/master$/.test(branch) || branch.indexOf('/release/') >= 0);
+}
+function getSettingsSearchBuildId(packageJson) {
try {
- const out = cp.execSync(`git rev-list ${previous}..HEAD --count`);
+ const branch = process.env.BUILD_SOURCEBRANCH;
+ const branchId = branch.indexOf('/release/') >= 0 ? 0 :
+ /\/master$/.test(branch) ? 1 :
+ 2; // Some unexpected branch
+
+ const out = cp.execSync(`git rev-list HEAD --count`);
const count = parseInt(out.toString());
- return util.versionStringToNumber(packageJson.version) * 1e4 + count;
+
+ //
+ // 1.25.1, 1,234,567 commits, master = 1250112345671
+ return util.versionStringToNumber(packageJson.version) * 1e8 + count * 10 + branchId;
} catch (e) {
throw new Error('Could not determine build number: ' + e.toString());
}
@@ -520,6 +513,10 @@ gulp.task('generate-vscode-configuration', () => {
return reject(new Error('$AGENT_BUILDDIRECTORY not set'));
}
+ if (process.env.VSCODE_QUALITY !== 'insider' && process.env.VSCODE_QUALITY !== 'stable') {
+ return resolve();
+ }
+
const userDataDir = path.join(os.tmpdir(), 'tmpuserdata');
const extensionsDir = path.join(os.tmpdir(), 'tmpextdir');
const appName = process.env.VSCODE_QUALITY === 'insider' ? 'Visual\\ Studio\\ Code\\ -\\ Insiders.app' : 'Visual\\ Studio\\ Code.app';
diff --git a/build/gulpfile.vscode.linux.js b/build/gulpfile.vscode.linux.js
index ecbc45df320..ff4ba02d804 100644
--- a/build/gulpfile.vscode.linux.js
+++ b/build/gulpfile.vscode.linux.js
@@ -12,17 +12,14 @@ const shell = require('gulp-shell');
const es = require('event-stream');
const vfs = require('vinyl-fs');
const util = require('./lib/util');
-// @ts-ignore Microsoft/TypeScript#21262 complains about a require of a JSON file
const packageJson = require('../package.json');
-// @ts-ignore Microsoft/TypeScript#21262 complains about a require of a JSON file
const product = require('../product.json');
-// @ts-ignore Microsoft/TypeScript#21262 complains about a require of a JSON file
const rpmDependencies = require('../resources/linux/rpm/dependencies.json');
const linuxPackageRevision = Math.floor(new Date().getTime() / 1000);
function getDebPackageArch(arch) {
- return { x64: 'amd64', ia32: 'i386', arm: 'armhf' }[arch];
+ return { x64: 'amd64', ia32: 'i386', arm: 'armhf', arm64: "arm64" }[arch];
}
function prepareDebPackage(arch) {
@@ -75,7 +72,9 @@ function prepareDebPackage(arch) {
const postinst = gulp.src('resources/linux/debian/postinst.template', { base: '.' })
.pipe(replace('@@NAME@@', product.applicationName))
.pipe(replace('@@ARCHITECTURE@@', debArch))
+ // @ts-ignore JSON checking: quality is optional
.pipe(replace('@@QUALITY@@', product.quality || '@@QUALITY@@'))
+ // @ts-ignore JSON checking: updateUrl is optional
.pipe(replace('@@UPDATEURL@@', product.updateUrl || '@@UPDATEURL@@'))
.pipe(rename('DEBIAN/postinst'));
@@ -99,7 +98,7 @@ function getRpmBuildPath(rpmArch) {
}
function getRpmPackageArch(arch) {
- return { x64: 'x86_64', ia32: 'i386', arm: 'armhf' }[arch];
+ return { x64: 'x86_64', ia32: 'i386', arm: 'armhf', arm64: "arm64" }[arch];
}
function prepareRpmPackage(arch) {
@@ -133,7 +132,9 @@ function prepareRpmPackage(arch) {
.pipe(replace('@@RELEASE@@', linuxPackageRevision))
.pipe(replace('@@ARCHITECTURE@@', rpmArch))
.pipe(replace('@@LICENSE@@', product.licenseName))
+ // @ts-ignore JSON checking: quality is optional
.pipe(replace('@@QUALITY@@', product.quality || '@@QUALITY@@'))
+ // @ts-ignore JSON checking: updateUrl is optional
.pipe(replace('@@UPDATEURL@@', product.updateUrl || '@@UPDATEURL@@'))
.pipe(replace('@@DEPENDENCIES@@', rpmDependencies[rpmArch].join(', ')))
.pipe(rename('SPECS/' + product.applicationName + '.spec'));
@@ -207,33 +208,39 @@ function buildSnapPackage(arch) {
gulp.task('clean-vscode-linux-ia32-deb', util.rimraf('.build/linux/deb/i386'));
gulp.task('clean-vscode-linux-x64-deb', util.rimraf('.build/linux/deb/amd64'));
gulp.task('clean-vscode-linux-arm-deb', util.rimraf('.build/linux/deb/armhf'));
+gulp.task('clean-vscode-linux-arm64-deb', util.rimraf('.build/linux/deb/arm64'));
gulp.task('clean-vscode-linux-ia32-rpm', util.rimraf('.build/linux/rpm/i386'));
gulp.task('clean-vscode-linux-x64-rpm', util.rimraf('.build/linux/rpm/x86_64'));
gulp.task('clean-vscode-linux-arm-rpm', util.rimraf('.build/linux/rpm/armhf'));
+gulp.task('clean-vscode-linux-arm64-rpm', util.rimraf('.build/linux/rpm/arm64'));
gulp.task('clean-vscode-linux-ia32-snap', util.rimraf('.build/linux/snap/x64'));
gulp.task('clean-vscode-linux-x64-snap', util.rimraf('.build/linux/snap/x64'));
gulp.task('clean-vscode-linux-arm-snap', util.rimraf('.build/linux/snap/x64'));
-gulp.task('clean-vscode-linux-ia32-flatpak', util.rimraf('.build/linux/flatpak/i386'));
-gulp.task('clean-vscode-linux-x64-flatpak', util.rimraf('.build/linux/flatpak/x86_64'));
-gulp.task('clean-vscode-linux-arm-flatpak', util.rimraf('.build/linux/flatpak/arm'));
+gulp.task('clean-vscode-linux-arm64-snap', util.rimraf('.build/linux/snap/x64'));
gulp.task('vscode-linux-ia32-prepare-deb', ['clean-vscode-linux-ia32-deb'], prepareDebPackage('ia32'));
gulp.task('vscode-linux-x64-prepare-deb', ['clean-vscode-linux-x64-deb'], prepareDebPackage('x64'));
gulp.task('vscode-linux-arm-prepare-deb', ['clean-vscode-linux-arm-deb'], prepareDebPackage('arm'));
+gulp.task('vscode-linux-arm64-prepare-deb', ['clean-vscode-linux-arm64-deb'], prepareDebPackage('arm64'));
gulp.task('vscode-linux-ia32-build-deb', ['vscode-linux-ia32-prepare-deb'], buildDebPackage('ia32'));
gulp.task('vscode-linux-x64-build-deb', ['vscode-linux-x64-prepare-deb'], buildDebPackage('x64'));
gulp.task('vscode-linux-arm-build-deb', ['vscode-linux-arm-prepare-deb'], buildDebPackage('arm'));
+gulp.task('vscode-linux-arm64-build-deb', ['vscode-linux-arm64-prepare-deb'], buildDebPackage('arm64'));
gulp.task('vscode-linux-ia32-prepare-rpm', ['clean-vscode-linux-ia32-rpm'], prepareRpmPackage('ia32'));
gulp.task('vscode-linux-x64-prepare-rpm', ['clean-vscode-linux-x64-rpm'], prepareRpmPackage('x64'));
gulp.task('vscode-linux-arm-prepare-rpm', ['clean-vscode-linux-arm-rpm'], prepareRpmPackage('arm'));
+gulp.task('vscode-linux-arm64-prepare-rpm', ['clean-vscode-linux-arm64-rpm'], prepareRpmPackage('arm64'));
gulp.task('vscode-linux-ia32-build-rpm', ['vscode-linux-ia32-prepare-rpm'], buildRpmPackage('ia32'));
gulp.task('vscode-linux-x64-build-rpm', ['vscode-linux-x64-prepare-rpm'], buildRpmPackage('x64'));
gulp.task('vscode-linux-arm-build-rpm', ['vscode-linux-arm-prepare-rpm'], buildRpmPackage('arm'));
+gulp.task('vscode-linux-arm64-build-rpm', ['vscode-linux-arm64-prepare-rpm'], buildRpmPackage('arm64'));
gulp.task('vscode-linux-ia32-prepare-snap', ['clean-vscode-linux-ia32-snap'], prepareSnapPackage('ia32'));
gulp.task('vscode-linux-x64-prepare-snap', ['clean-vscode-linux-x64-snap'], prepareSnapPackage('x64'));
gulp.task('vscode-linux-arm-prepare-snap', ['clean-vscode-linux-arm-snap'], prepareSnapPackage('arm'));
+gulp.task('vscode-linux-arm64-prepare-snap', ['clean-vscode-linux-arm64-snap'], prepareSnapPackage('arm64'));
gulp.task('vscode-linux-ia32-build-snap', ['vscode-linux-ia32-prepare-snap'], buildSnapPackage('ia32'));
gulp.task('vscode-linux-x64-build-snap', ['vscode-linux-x64-prepare-snap'], buildSnapPackage('x64'));
gulp.task('vscode-linux-arm-build-snap', ['vscode-linux-arm-prepare-snap'], buildSnapPackage('arm'));
+gulp.task('vscode-linux-arm64-build-snap', ['vscode-linux-arm64-prepare-snap'], buildSnapPackage('arm64'));
diff --git a/build/gulpfile.vscode.win32.js b/build/gulpfile.vscode.win32.js
index 636d9e8300b..7d1ea35a6ab 100644
--- a/build/gulpfile.vscode.win32.js
+++ b/build/gulpfile.vscode.win32.js
@@ -7,44 +7,69 @@
const gulp = require('gulp');
const path = require('path');
+const fs = require('fs');
const assert = require('assert');
const cp = require('child_process');
const _7z = require('7zip')['7z'];
const util = require('./lib/util');
-// @ts-ignore Microsoft/TypeScript#21262 complains about a require of a JSON file
const pkg = require('../package.json');
-// @ts-ignore Microsoft/TypeScript#21262 complains about a require of a JSON file
const product = require('../product.json');
const vfs = require('vinyl-fs');
+const mkdirp = require('mkdirp');
const repoPath = path.dirname(__dirname);
const buildPath = arch => path.join(path.dirname(repoPath), `VSCode-win32-${arch}`);
const zipDir = arch => path.join(repoPath, '.build', `win32-${arch}`, 'archive');
const zipPath = arch => path.join(zipDir(arch), `VSCode-win32-${arch}.zip`);
-const setupDir = arch => path.join(repoPath, '.build', `win32-${arch}`, 'setup');
+const setupDir = (arch, target) => path.join(repoPath, '.build', `win32-${arch}`, `${target}-setup`);
const issPath = path.join(__dirname, 'win32', 'code.iss');
const innoSetupPath = path.join(path.dirname(path.dirname(require.resolve('innosetup-compiler'))), 'bin', 'ISCC.exe');
+const signPS1 = path.join(repoPath, 'build', 'tfs', 'win32', 'sign.ps1');
function packageInnoSetup(iss, options, cb) {
options = options || {};
const definitions = options.definitions || {};
+ const debug = process.argv.some(arg => arg === '--debug-inno');
+
+ if (debug) {
+ definitions['Debug'] = 'true';
+ }
+
const keys = Object.keys(definitions);
keys.forEach(key => assert(typeof definitions[key] === 'string', `Missing value for '${key}' in Inno Setup package step`));
const defs = keys.map(key => `/d${key}=${definitions[key]}`);
- const args = [iss].concat(defs);
+ const args = [
+ iss,
+ ...defs,
+ `/sesrp=powershell.exe -ExecutionPolicy bypass ${signPS1} $f`
+ ];
- cp.spawn(innoSetupPath, args, { stdio: 'inherit' })
+ cp.spawn(innoSetupPath, args, { stdio: ['ignore', 'inherit', 'inherit'] })
.on('error', cb)
.on('exit', () => cb(null));
}
-function buildWin32Setup(arch) {
+function buildWin32Setup(arch, target) {
+ if (target !== 'system' && target !== 'user') {
+ throw new Error('Invalid setup target');
+ }
+
return cb => {
- const ia32AppId = product.win32AppId;
- const x64AppId = product.win32x64AppId;
+ const ia32AppId = target === 'system' ? product.win32AppId : product.win32UserAppId;
+ const x64AppId = target === 'system' ? product.win32x64AppId : product.win32x64UserAppId;
+
+ const sourcePath = buildPath(arch);
+ const outputPath = setupDir(arch, target);
+ mkdirp.sync(outputPath);
+
+ const originalProductJsonPath = path.join(sourcePath, 'resources/app/product.json');
+ const productJsonPath = path.join(outputPath, 'product.json');
+ const productJson = JSON.parse(fs.readFileSync(originalProductJsonPath, 'utf8'));
+ productJson['target'] = target;
+ fs.writeFileSync(productJsonPath, JSON.stringify(productJson, undefined, '\t'));
const definitions = {
NameLong: product.nameLong,
@@ -52,35 +77,42 @@ function buildWin32Setup(arch) {
DirName: product.win32DirName,
Version: pkg.version,
RawVersion: pkg.version.replace(/-\w+$/, ''),
- NameVersion: product.win32NameVersion,
+ NameVersion: product.win32NameVersion + (target === 'user' ? ' (User)' : ''),
ExeBasename: product.nameShort,
RegValueName: product.win32RegValueName,
ShellNameShort: product.win32ShellNameShort,
AppMutex: product.win32MutexName,
Arch: arch,
AppId: arch === 'ia32' ? ia32AppId : x64AppId,
- IncompatibleAppId: arch === 'ia32' ? x64AppId : ia32AppId,
+ IncompatibleTargetAppId: arch === 'ia32' ? product.win32AppId : product.win32x64AppId,
+ IncompatibleArchAppId: arch === 'ia32' ? x64AppId : ia32AppId,
AppUserId: product.win32AppUserModelId,
ArchitecturesAllowed: arch === 'ia32' ? '' : 'x64',
ArchitecturesInstallIn64BitMode: arch === 'ia32' ? '' : 'x64',
- SourceDir: buildPath(arch),
+ SourceDir: sourcePath,
RepoDir: repoPath,
- OutputDir: setupDir(arch)
+ OutputDir: outputPath,
+ InstallTarget: target,
+ ProductJsonPath: productJsonPath
};
packageInnoSetup(issPath, { definitions }, cb);
};
}
-gulp.task('clean-vscode-win32-ia32-setup', util.rimraf(setupDir('ia32')));
-gulp.task('vscode-win32-ia32-setup', ['clean-vscode-win32-ia32-setup'], buildWin32Setup('ia32'));
+function defineWin32SetupTasks(arch, target) {
+ gulp.task(`clean-vscode-win32-${arch}-${target}-setup`, util.rimraf(setupDir(arch, target)));
+ gulp.task(`vscode-win32-${arch}-${target}-setup`, [`clean-vscode-win32-${arch}-${target}-setup`], buildWin32Setup(arch, target));
+}
-gulp.task('clean-vscode-win32-x64-setup', util.rimraf(setupDir('x64')));
-gulp.task('vscode-win32-x64-setup', ['clean-vscode-win32-x64-setup'], buildWin32Setup('x64'));
+defineWin32SetupTasks('ia32', 'system');
+defineWin32SetupTasks('x64', 'system');
+defineWin32SetupTasks('ia32', 'user');
+defineWin32SetupTasks('x64', 'user');
function archiveWin32Setup(arch) {
return cb => {
- const args = ['a', '-tzip', zipPath(arch), '.', '-r'];
+ const args = ['a', '-tzip', zipPath(arch), '-x!CodeSignSummary*.md', '.', '-r'];
cp.spawn(_7z, args, { stdio: 'inherit', cwd: buildPath(arch) })
.on('error', cb)
diff --git a/build/lib/builtInExtensions.js b/build/lib/builtInExtensions.js
index c03360cf002..88266f3b901 100644
--- a/build/lib/builtInExtensions.js
+++ b/build/lib/builtInExtensions.js
@@ -17,7 +17,6 @@ const ext = require('./extensions');
const util = require('gulp-util');
const root = path.dirname(path.dirname(__dirname));
-// @ts-ignore Microsoft/TypeScript#21262 complains about a require of a JSON file
const builtInExtensions = require('../builtInExtensions.json');
const controlFilePath = path.join(os.homedir(), '.vscode-oss-dev', 'extensions', 'control.json');
diff --git a/build/lib/bundle.ts b/build/lib/bundle.ts
index da38acec4f4..43855048c1f 100644
--- a/build/lib/bundle.ts
+++ b/build/lib/bundle.ts
@@ -46,7 +46,7 @@ export interface IEntryPoint {
name: string;
include?: string[];
exclude?: string[];
- prepend: string[];
+ prepend?: string[];
append?: string[];
dest?: string;
}
diff --git a/build/lib/compilation.js b/build/lib/compilation.js
index 998ebb4f379..4f2f374bb5b 100644
--- a/build/lib/compilation.js
+++ b/build/lib/compilation.js
@@ -18,21 +18,24 @@ var _ = require("underscore");
var monacodts = require("../monaco/api");
var fs = require("fs");
var reporter = reporter_1.createReporter();
-var rootDir = path.join(__dirname, '../../src');
-var options = require('../../src/tsconfig.json').compilerOptions;
-options.verbose = false;
-options.sourceMap = true;
-if (process.env['VSCODE_NO_SOURCEMAP']) { // To be used by developers in a hurry
- options.sourceMap = false;
+function getTypeScriptCompilerOptions(src) {
+ var rootDir = path.join(__dirname, "../../" + src);
+ var options = require("../../" + src + "/tsconfig.json").compilerOptions;
+ options.verbose = false;
+ options.sourceMap = true;
+ if (process.env['VSCODE_NO_SOURCEMAP']) { // To be used by developers in a hurry
+ options.sourceMap = false;
+ }
+ options.rootDir = rootDir;
+ options.sourceRoot = util.toFileUri(rootDir);
+ options.newLine = /\r\n/.test(fs.readFileSync(__filename, 'utf8')) ? 'CRLF' : 'LF';
+ return options;
}
-options.rootDir = rootDir;
-options.sourceRoot = util.toFileUri(rootDir);
-options.newLine = /\r\n/.test(fs.readFileSync(__filename, 'utf8')) ? 'CRLF' : 'LF';
-function createCompile(build, emitError) {
- var opts = _.clone(options);
+function createCompile(src, build, emitError) {
+ var opts = _.clone(getTypeScriptCompilerOptions(src));
opts.inlineSources = !!build;
opts.noFilesystemLookup = true;
- var ts = tsb.create(opts, null, null, function (err) { return reporter(err.toString()); });
+ var ts = tsb.create(opts, true, null, function (err) { return reporter(err.toString()); });
return function (token) {
var utf8Filter = util.filter(function (data) { return /(\/|\\)test(\/|\\).*utf8/.test(data.path); });
var tsFilter = util.filter(function (data) { return /\.ts$/.test(data.path); });
@@ -51,32 +54,33 @@ function createCompile(build, emitError) {
.pipe(sourcemaps.write('.', {
addComment: false,
includeContent: !!build,
- sourceRoot: options.sourceRoot
+ sourceRoot: opts.sourceRoot
}))
.pipe(tsFilter.restore)
.pipe(reporter.end(emitError));
return es.duplex(input, output);
};
}
-function compileTask(out, build) {
+var libDtsGlob = 'node_modules/typescript/lib/*.d.ts';
+function compileTask(src, out, build) {
return function () {
- var compile = createCompile(build, true);
- var src = es.merge(gulp.src('src/**', { base: 'src' }), gulp.src('node_modules/typescript/lib/lib.d.ts'));
+ var compile = createCompile(src, build, true);
+ var srcPipe = es.merge(gulp.src(src + "/**", { base: "" + src }), gulp.src(libDtsGlob));
// Do not write .d.ts files to disk, as they are not needed there.
var dtsFilter = util.filter(function (data) { return !/\.d\.ts$/.test(data.path); });
- return src
+ return srcPipe
.pipe(compile())
.pipe(dtsFilter)
.pipe(gulp.dest(out))
.pipe(dtsFilter.restore)
- .pipe(monacodtsTask(out, false));
+ .pipe(src !== 'src' ? es.through() : monacodtsTask(out, false));
};
}
exports.compileTask = compileTask;
function watchTask(out, build) {
return function () {
- var compile = createCompile(build);
- var src = es.merge(gulp.src('src/**', { base: 'src' }), gulp.src('node_modules/typescript/lib/lib.d.ts'));
+ var compile = createCompile('src', build);
+ var src = es.merge(gulp.src('src/**', { base: 'src' }), gulp.src(libDtsGlob));
var watchSrc = watch('src/**', { base: 'src' });
// Do not write .d.ts files to disk, as they are not needed there.
var dtsFilter = util.filter(function (data) { return !/\.d\.ts$/.test(data.path); });
@@ -122,6 +126,7 @@ function monacodtsTask(out, isWatch) {
fs.writeFileSync(result.filePath, result.content);
}
else {
+ fs.writeFileSync(result.filePath, result.content);
resultStream.emit('error', 'monaco.d.ts is no longer up to date. Please run gulp watch and commit the new file.');
}
}
diff --git a/build/lib/compilation.ts b/build/lib/compilation.ts
index cedcb4155b6..2f7dbe664bd 100644
--- a/build/lib/compilation.ts
+++ b/build/lib/compilation.ts
@@ -21,23 +21,26 @@ import * as fs from 'fs';
const reporter = createReporter();
-const rootDir = path.join(__dirname, '../../src');
-const options = require('../../src/tsconfig.json').compilerOptions;
-options.verbose = false;
-options.sourceMap = true;
-if (process.env['VSCODE_NO_SOURCEMAP']) { // To be used by developers in a hurry
- options.sourceMap = false;
+function getTypeScriptCompilerOptions(src: string) {
+ const rootDir = path.join(__dirname, `../../${src}`);
+ const options = require(`../../${src}/tsconfig.json`).compilerOptions;
+ options.verbose = false;
+ options.sourceMap = true;
+ if (process.env['VSCODE_NO_SOURCEMAP']) { // To be used by developers in a hurry
+ options.sourceMap = false;
+ }
+ options.rootDir = rootDir;
+ options.sourceRoot = util.toFileUri(rootDir);
+ options.newLine = /\r\n/.test(fs.readFileSync(__filename, 'utf8')) ? 'CRLF' : 'LF';
+ return options;
}
-options.rootDir = rootDir;
-options.sourceRoot = util.toFileUri(rootDir);
-options.newLine = /\r\n/.test(fs.readFileSync(__filename, 'utf8')) ? 'CRLF' : 'LF';
-function createCompile(build: boolean, emitError?: boolean): (token?: util.ICancellationToken) => NodeJS.ReadWriteStream {
- const opts = _.clone(options);
+function createCompile(src: string, build: boolean, emitError?: boolean): (token?: util.ICancellationToken) => NodeJS.ReadWriteStream {
+ const opts = _.clone(getTypeScriptCompilerOptions(src));
opts.inlineSources = !!build;
opts.noFilesystemLookup = true;
- const ts = tsb.create(opts, null, null, err => reporter(err.toString()));
+ const ts = tsb.create(opts, true, null, err => reporter(err.toString()));
return function (token?: util.ICancellationToken) {
@@ -59,7 +62,7 @@ function createCompile(build: boolean, emitError?: boolean): (token?: util.ICanc
.pipe(sourcemaps.write('.', {
addComment: false,
includeContent: !!build,
- sourceRoot: options.sourceRoot
+ sourceRoot: opts.sourceRoot
}))
.pipe(tsFilter.restore)
.pipe(reporter.end(emitError));
@@ -68,36 +71,38 @@ function createCompile(build: boolean, emitError?: boolean): (token?: util.ICanc
};
}
-export function compileTask(out: string, build: boolean): () => NodeJS.ReadWriteStream {
+const libDtsGlob = 'node_modules/typescript/lib/*.d.ts';
+
+export function compileTask(src: string, out: string, build: boolean): () => NodeJS.ReadWriteStream {
return function () {
- const compile = createCompile(build, true);
+ const compile = createCompile(src, build, true);
- const src = es.merge(
- gulp.src('src/**', { base: 'src' }),
- gulp.src('node_modules/typescript/lib/lib.d.ts'),
+ const srcPipe = es.merge(
+ gulp.src(`${src}/**`, { base: `${src}` }),
+ gulp.src(libDtsGlob),
);
// Do not write .d.ts files to disk, as they are not needed there.
const dtsFilter = util.filter(data => !/\.d\.ts$/.test(data.path));
- return src
+ return srcPipe
.pipe(compile())
.pipe(dtsFilter)
.pipe(gulp.dest(out))
.pipe(dtsFilter.restore)
- .pipe(monacodtsTask(out, false));
+ .pipe(src !== 'src' ? es.through() : monacodtsTask(out, false));
};
}
export function watchTask(out: string, build: boolean): () => NodeJS.ReadWriteStream {
return function () {
- const compile = createCompile(build);
+ const compile = createCompile('src', build);
const src = es.merge(
gulp.src('src/**', { base: 'src' }),
- gulp.src('node_modules/typescript/lib/lib.d.ts'),
+ gulp.src(libDtsGlob),
);
const watchSrc = watch('src/**', { base: 'src' });
@@ -150,6 +155,7 @@ function monacodtsTask(out: string, isWatch: boolean): NodeJS.ReadWriteStream {
if (isWatch) {
fs.writeFileSync(result.filePath, result.content);
} else {
+ fs.writeFileSync(result.filePath, result.content);
resultStream.emit('error', 'monaco.d.ts is no longer up to date. Please run gulp watch and commit the new file.');
}
}
diff --git a/build/lib/extensions.js b/build/lib/extensions.js
index ce74ac25ee6..e9ea4c6a8e9 100644
--- a/build/lib/extensions.js
+++ b/build/lib/extensions.js
@@ -3,8 +3,27 @@
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
+var __assign = (this && this.__assign) || function () {
+ __assign = Object.assign || function(t) {
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
+ s = arguments[i];
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+ t[p] = s[p];
+ }
+ return t;
+ };
+ return __assign.apply(this, arguments);
+};
Object.defineProperty(exports, "__esModule", { value: true });
var es = require("event-stream");
+var fs = require("fs");
+var glob = require("glob");
+var gulp = require("gulp");
+var path = require("path");
+var File = require("vinyl");
+var vsce = require("vsce");
+var stats_1 = require("./stats");
+var util2 = require("./util");
var assign = require("object-assign");
var remote = require("gulp-remote-src");
var flatmap = require('gulp-flatmap');
@@ -14,11 +33,106 @@ var rename = require('gulp-rename');
var util = require('gulp-util');
var buffer = require('gulp-buffer');
var json = require('gulp-json-editor');
-var fs = require("fs");
-var path = require("path");
-var vsce = require("vsce");
-var File = require("vinyl");
-function fromLocal(extensionPath) {
+var webpack = require('webpack');
+var webpackGulp = require('webpack-stream');
+var root = path.resolve(path.join(__dirname, '..', '..'));
+function fromLocal(extensionPath, sourceMappingURLBase) {
+ var webpackFilename = path.join(extensionPath, 'extension.webpack.config.js');
+ if (fs.existsSync(webpackFilename)) {
+ return fromLocalWebpack(extensionPath, sourceMappingURLBase);
+ }
+ else {
+ return fromLocalNormal(extensionPath);
+ }
+}
+exports.fromLocal = fromLocal;
+function fromLocalWebpack(extensionPath, sourceMappingURLBase) {
+ var result = es.through();
+ var packagedDependencies = [];
+ var packageJsonConfig = require(path.join(extensionPath, 'package.json'));
+ var webpackRootConfig = require(path.join(extensionPath, 'extension.webpack.config.js'));
+ for (var key in webpackRootConfig.externals) {
+ if (key in packageJsonConfig.dependencies) {
+ packagedDependencies.push(key);
+ }
+ }
+ vsce.listFiles({ cwd: extensionPath, packageManager: vsce.PackageManager.Yarn, packagedDependencies: packagedDependencies }).then(function (fileNames) {
+ var files = fileNames
+ .map(function (fileName) { return path.join(extensionPath, fileName); })
+ .map(function (filePath) { return new File({
+ path: filePath,
+ stat: fs.statSync(filePath),
+ base: extensionPath,
+ contents: fs.createReadStream(filePath)
+ }); });
+ var filesStream = es.readArray(files);
+ // check for a webpack configuration files, then invoke webpack
+ // and merge its output with the files stream. also rewrite the package.json
+ // file to a new entry point
+ var webpackConfigLocations = glob.sync(path.join(extensionPath, '/**/extension.webpack.config.js'), { ignore: ['**/node_modules'] });
+ var packageJsonFilter = filter(function (f) {
+ if (path.basename(f.path) === 'package.json') {
+ // only modify package.json's next to the webpack file.
+ // to be safe, use existsSync instead of path comparison.
+ return fs.existsSync(path.join(path.dirname(f.path), 'extension.webpack.config.js'));
+ }
+ return false;
+ }, { restore: true });
+ var patchFilesStream = filesStream
+ .pipe(packageJsonFilter)
+ .pipe(buffer())
+ .pipe(json(function (data) {
+ // hardcoded entry point directory!
+ data.main = data.main.replace('/out/', /dist/);
+ return data;
+ }))
+ .pipe(packageJsonFilter.restore);
+ var webpackStreams = webpackConfigLocations.map(function (webpackConfigPath) {
+ var webpackDone = function (err, stats) {
+ util.log("Bundled extension: " + util.colors.yellow(path.join(path.basename(extensionPath), path.relative(extensionPath, webpackConfigPath))) + "...");
+ if (err) {
+ result.emit('error', err);
+ }
+ var compilation = stats.compilation;
+ if (compilation.errors.length > 0) {
+ result.emit('error', compilation.errors.join('\n'));
+ }
+ if (compilation.warnings.length > 0) {
+ result.emit('error', compilation.warnings.join('\n'));
+ }
+ };
+ var webpackConfig = __assign({}, require(webpackConfigPath), { mode: 'production' });
+ var relativeOutputPath = path.relative(extensionPath, webpackConfig.output.path);
+ return webpackGulp(webpackConfig, webpack, webpackDone)
+ .pipe(es.through(function (data) {
+ data.stat = data.stat || {};
+ data.base = extensionPath;
+ this.emit('data', data);
+ }))
+ .pipe(es.through(function (data) {
+ // source map handling:
+ // * rewrite sourceMappingURL
+ // * save to disk so that upload-task picks this up
+ if (sourceMappingURLBase) {
+ var contents = data.contents.toString('utf8');
+ data.contents = Buffer.from(contents.replace(/\n\/\/# sourceMappingURL=(.*)$/gm, function (_m, g1) {
+ return "\n//# sourceMappingURL=" + sourceMappingURLBase + "/extensions/" + path.basename(extensionPath) + "/" + relativeOutputPath + "/" + g1;
+ }), 'utf8');
+ if (/\.js\.map$/.test(data.path)) {
+ if (!fs.existsSync(path.dirname(data.path))) {
+ fs.mkdirSync(path.dirname(data.path));
+ }
+ fs.writeFileSync(data.path, data.contents);
+ }
+ }
+ this.emit('data', data);
+ }));
+ });
+ es.merge.apply(es, webpackStreams.concat([patchFilesStream])).pipe(result);
+ }).catch(function (err) { return result.emit('error', err); });
+ return result.pipe(stats_1.createStatsStream(path.basename(extensionPath)));
+}
+function fromLocalNormal(extensionPath) {
var result = es.through();
vsce.listFiles({ cwd: extensionPath, packageManager: vsce.PackageManager.Yarn })
.then(function (fileNames) {
@@ -33,9 +147,8 @@ function fromLocal(extensionPath) {
es.readArray(files).pipe(result);
})
.catch(function (err) { return result.emit('error', err); });
- return result;
+ return result.pipe(stats_1.createStatsStream(path.basename(extensionPath)));
}
-exports.fromLocal = fromLocal;
function error(err) {
var result = es.through();
setTimeout(function () { return result.emit('error', err); });
@@ -117,3 +230,49 @@ function fromMarketplace(extensionName, version) {
}));
}
exports.fromMarketplace = fromMarketplace;
+var excludedExtensions = [
+ 'vscode-api-tests',
+ 'vscode-colorize-tests',
+ 'ms-vscode.node-debug',
+ 'ms-vscode.node-debug2',
+];
+var builtInExtensions = require('../builtInExtensions.json');
+function packageExtensionsStream(opts) {
+ opts = opts || {};
+ var localExtensionDescriptions = glob.sync('extensions/*/package.json')
+ .map(function (manifestPath) {
+ var extensionPath = path.dirname(path.join(root, manifestPath));
+ var extensionName = path.basename(extensionPath);
+ return { name: extensionName, path: extensionPath };
+ })
+ .filter(function (_a) {
+ var name = _a.name;
+ return excludedExtensions.indexOf(name) === -1;
+ })
+ .filter(function (_a) {
+ var name = _a.name;
+ return opts.desiredExtensions ? opts.desiredExtensions.indexOf(name) >= 0 : true;
+ })
+ .filter(function (_a) {
+ var name = _a.name;
+ return builtInExtensions.every(function (b) { return b.name !== name; });
+ });
+ var localExtensions = es.merge.apply(es, localExtensionDescriptions.map(function (extension) {
+ return fromLocal(extension.path, opts.sourceMappingURLBase)
+ .pipe(rename(function (p) { return p.dirname = "extensions/" + extension.name + "/" + p.dirname; }));
+ }));
+ var localExtensionDependencies = gulp.src('extensions/node_modules/**', { base: '.' });
+ var marketplaceExtensions = es.merge.apply(es, builtInExtensions
+ .filter(function (_a) {
+ var name = _a.name;
+ return opts.desiredExtensions ? opts.desiredExtensions.indexOf(name) >= 0 : true;
+ })
+ .map(function (extension) {
+ return fromMarketplace(extension.name, extension.version)
+ .pipe(rename(function (p) { return p.dirname = "extensions/" + extension.name + "/" + p.dirname; }));
+ }));
+ return es.merge(localExtensions, localExtensionDependencies, marketplaceExtensions)
+ .pipe(util2.setExecutableBit(['**/*.sh']))
+ .pipe(filter(['**', '!**/*.js.map']));
+}
+exports.packageExtensionsStream = packageExtensionsStream;
diff --git a/build/lib/extensions.ts b/build/lib/extensions.ts
index 4b05bea1979..731348763c1 100644
--- a/build/lib/extensions.ts
+++ b/build/lib/extensions.ts
@@ -4,7 +4,15 @@
*--------------------------------------------------------------------------------------------*/
import * as es from 'event-stream';
+import * as fs from 'fs';
+import * as glob from 'glob';
+import * as gulp from 'gulp';
+import * as path from 'path';
import { Stream } from 'stream';
+import * as File from 'vinyl';
+import * as vsce from 'vsce';
+import { createStatsStream } from './stats';
+import * as util2 from './util';
import assign = require('object-assign');
import remote = require('gulp-remote-src');
const flatmap = require('gulp-flatmap');
@@ -14,12 +22,135 @@ const rename = require('gulp-rename');
const util = require('gulp-util');
const buffer = require('gulp-buffer');
const json = require('gulp-json-editor');
-import * as fs from 'fs';
-import * as path from 'path';
-import * as vsce from 'vsce';
-import * as File from 'vinyl';
+const webpack = require('webpack');
+const webpackGulp = require('webpack-stream');
-export function fromLocal(extensionPath: string): Stream {
+const root = path.resolve(path.join(__dirname, '..', '..'));
+
+export function fromLocal(extensionPath: string, sourceMappingURLBase?: string): Stream {
+ const webpackFilename = path.join(extensionPath, 'extension.webpack.config.js');
+ if (fs.existsSync(webpackFilename)) {
+ return fromLocalWebpack(extensionPath, sourceMappingURLBase);
+ } else {
+ return fromLocalNormal(extensionPath);
+ }
+}
+
+function fromLocalWebpack(extensionPath: string, sourceMappingURLBase: string): Stream {
+ let result = es.through();
+
+ let packagedDependencies: string[] = [];
+ let packageJsonConfig = require(path.join(extensionPath, 'package.json'));
+ let webpackRootConfig = require(path.join(extensionPath, 'extension.webpack.config.js'));
+ for (const key in webpackRootConfig.externals) {
+ if (key in packageJsonConfig.dependencies) {
+ packagedDependencies.push(key);
+ }
+ }
+
+ vsce.listFiles({ cwd: extensionPath, packageManager: vsce.PackageManager.Yarn, packagedDependencies }).then(fileNames => {
+ const files = fileNames
+ .map(fileName => path.join(extensionPath, fileName))
+ .map(filePath => new File({
+ path: filePath,
+ stat: fs.statSync(filePath),
+ base: extensionPath,
+ contents: fs.createReadStream(filePath) as any
+ }));
+
+ const filesStream = es.readArray(files);
+
+ // check for a webpack configuration files, then invoke webpack
+ // and merge its output with the files stream. also rewrite the package.json
+ // file to a new entry point
+ const webpackConfigLocations = (glob.sync(
+ path.join(extensionPath, '/**/extension.webpack.config.js'),
+ { ignore: ['**/node_modules'] }
+ ));
+
+ const packageJsonFilter = filter(f => {
+ if (path.basename(f.path) === 'package.json') {
+ // only modify package.json's next to the webpack file.
+ // to be safe, use existsSync instead of path comparison.
+ return fs.existsSync(path.join(path.dirname(f.path), 'extension.webpack.config.js'));
+ }
+ return false;
+ }, { restore: true });
+
+ const patchFilesStream = filesStream
+ .pipe(packageJsonFilter)
+ .pipe(buffer())
+ .pipe(json(data => {
+ // hardcoded entry point directory!
+ data.main = data.main.replace('/out/', /dist/);
+ return data;
+ }))
+ .pipe(packageJsonFilter.restore);
+
+
+ const webpackStreams = webpackConfigLocations.map(webpackConfigPath => {
+
+ const webpackDone = (err, stats) => {
+ util.log(`Bundled extension: ${util.colors.yellow(path.join(path.basename(extensionPath), path.relative(extensionPath, webpackConfigPath)))}...`);
+ if (err) {
+ result.emit('error', err);
+ }
+ const { compilation } = stats;
+ if (compilation.errors.length > 0) {
+ result.emit('error', compilation.errors.join('\n'));
+ }
+ if (compilation.warnings.length > 0) {
+ result.emit('error', compilation.warnings.join('\n'));
+ }
+ };
+
+ const webpackConfig = {
+ ...require(webpackConfigPath),
+ ...{ mode: 'production' }
+ };
+ let relativeOutputPath = path.relative(extensionPath, webpackConfig.output.path);
+
+ return webpackGulp(webpackConfig, webpack, webpackDone)
+ .pipe(es.through(function (data) {
+ data.stat = data.stat || {};
+ data.base = extensionPath;
+ this.emit('data', data);
+ }))
+ .pipe(es.through(function (data: File) {
+ // source map handling:
+ // * rewrite sourceMappingURL
+ // * save to disk so that upload-task picks this up
+ if (sourceMappingURLBase) {
+ const contents = (data.contents).toString('utf8');
+ data.contents = Buffer.from(contents.replace(/\n\/\/# sourceMappingURL=(.*)$/gm, function (_m, g1) {
+ return `\n//# sourceMappingURL=${sourceMappingURLBase}/extensions/${path.basename(extensionPath)}/${relativeOutputPath}/${g1}`;
+ }), 'utf8');
+
+ if (/\.js\.map$/.test(data.path)) {
+ if (!fs.existsSync(path.dirname(data.path))) {
+ fs.mkdirSync(path.dirname(data.path));
+ }
+ fs.writeFileSync(data.path, data.contents);
+ }
+ }
+ this.emit('data', data);
+ }));
+ });
+
+ es.merge(...webpackStreams, patchFilesStream)
+ // .pipe(es.through(function (data) {
+ // // debug
+ // console.log('out', data.path, data.contents.length);
+ // this.emit('data', data);
+ // }))
+ .pipe(result);
+
+ }).catch(err => result.emit('error', err));
+
+ return result.pipe(createStatsStream(path.basename(extensionPath)));
+}
+
+function fromLocalNormal(extensionPath: string): Stream {
const result = es.through();
vsce.listFiles({ cwd: extensionPath, packageManager: vsce.PackageManager.Yarn })
@@ -37,7 +168,7 @@ export function fromLocal(extensionPath: string): Stream {
})
.catch(err => result.emit('error', err));
- return result;
+ return result.pipe(createStatsStream(path.basename(extensionPath)));
}
function error(err: any): Stream {
@@ -131,3 +262,54 @@ export function fromMarketplace(extensionName: string, version: string): Stream
}));
}));
}
+
+interface IPackageExtensionsOptions {
+ /**
+ * Set to undefined to package all of them.
+ */
+ desiredExtensions?: string[];
+ sourceMappingURLBase?: string;
+}
+
+const excludedExtensions = [
+ 'vscode-api-tests',
+ 'vscode-colorize-tests',
+ 'ms-vscode.node-debug',
+ 'ms-vscode.node-debug2',
+];
+
+const builtInExtensions: { name: string, version: string, repo: string; }[] = require('../builtInExtensions.json');
+
+export function packageExtensionsStream(opts?: IPackageExtensionsOptions): NodeJS.ReadWriteStream {
+ opts = opts || {};
+
+ const localExtensionDescriptions = (glob.sync('extensions/*/package.json'))
+ .map(manifestPath => {
+ const extensionPath = path.dirname(path.join(root, manifestPath));
+ const extensionName = path.basename(extensionPath);
+ return { name: extensionName, path: extensionPath };
+ })
+ .filter(({ name }) => excludedExtensions.indexOf(name) === -1)
+ .filter(({ name }) => opts.desiredExtensions ? opts.desiredExtensions.indexOf(name) >= 0 : true)
+ .filter(({ name }) => builtInExtensions.every(b => b.name !== name));
+
+ const localExtensions = es.merge(...localExtensionDescriptions.map(extension => {
+ return fromLocal(extension.path, opts.sourceMappingURLBase)
+ .pipe(rename(p => p.dirname = `extensions/${extension.name}/${p.dirname}`));
+ }));
+
+ const localExtensionDependencies = gulp.src('extensions/node_modules/**', { base: '.' });
+
+ const marketplaceExtensions = es.merge(
+ ...builtInExtensions
+ .filter(({ name }) => opts.desiredExtensions ? opts.desiredExtensions.indexOf(name) >= 0 : true)
+ .map(extension => {
+ return fromMarketplace(extension.name, extension.version)
+ .pipe(rename(p => p.dirname = `extensions/${extension.name}/${p.dirname}`));
+ })
+ );
+
+ return es.merge(localExtensions, localExtensionDependencies, marketplaceExtensions)
+ .pipe(util2.setExecutableBit(['**/*.sh']))
+ .pipe(filter(['**', '!**/*.js.map']));
+}
diff --git a/build/lib/i18n.resources.json b/build/lib/i18n.resources.json
index 87da5e9bb0d..81fda4c4e9e 100644
--- a/build/lib/i18n.resources.json
+++ b/build/lib/i18n.resources.json
@@ -78,6 +78,10 @@
"name": "vs/workbench/parts/logs",
"project": "vscode-workbench"
},
+ {
+ "name": "vs/workbench/parts/navigation",
+ "project": "vscode-workbench"
+ },
{
"name": "vs/workbench/parts/output",
"project": "vscode-workbench"
diff --git a/build/lib/optimize.js b/build/lib/optimize.js
index 2693d9f519a..044780ba7fd 100644
--- a/build/lib/optimize.js
+++ b/build/lib/optimize.js
@@ -4,23 +4,24 @@
*--------------------------------------------------------------------------------------------*/
'use strict';
Object.defineProperty(exports, "__esModule", { value: true });
-var path = require("path");
+var es = require("event-stream");
var gulp = require("gulp");
-var sourcemaps = require("gulp-sourcemaps");
-var filter = require("gulp-filter");
+var concat = require("gulp-concat");
var minifyCSS = require("gulp-cssnano");
+var filter = require("gulp-filter");
+var flatmap = require("gulp-flatmap");
+var sourcemaps = require("gulp-sourcemaps");
var uglify = require("gulp-uglify");
var composer = require("gulp-uglify/composer");
+var gulpUtil = require("gulp-util");
+var path = require("path");
+var pump = require("pump");
var uglifyes = require("uglify-es");
-var es = require("event-stream");
-var concat = require("gulp-concat");
var VinylFile = require("vinyl");
var bundle = require("./bundle");
+var i18n_1 = require("./i18n");
+var stats_1 = require("./stats");
var util = require("./util");
-var i18n = require("./i18n");
-var gulpUtil = require("gulp-util");
-var flatmap = require("gulp-flatmap");
-var pump = require("pump");
var REPO_ROOT_PATH = path.join(__dirname, '../..');
function log(prefix, message) {
gulpUtil.log(gulpUtil.colors.cyan('[' + prefix + ']'), message);
@@ -38,19 +39,19 @@ function loaderConfig(emptyPaths) {
}
exports.loaderConfig = loaderConfig;
var IS_OUR_COPYRIGHT_REGEXP = /Copyright \(C\) Microsoft Corporation/i;
-function loader(bundledFileHeader, bundleLoader) {
+function loader(src, bundledFileHeader, bundleLoader) {
var sources = [
- 'out-build/vs/loader.js'
+ src + "/vs/loader.js"
];
if (bundleLoader) {
sources = sources.concat([
- 'out-build/vs/css.js',
- 'out-build/vs/nls.js'
+ src + "/vs/css.js",
+ src + "/vs/nls.js"
]);
}
var isFirst = true;
return (gulp
- .src(sources, { base: 'out-build' })
+ .src(sources, { base: "" + src })
.pipe(es.through(function (data) {
if (isFirst) {
isFirst = false;
@@ -72,7 +73,7 @@ function loader(bundledFileHeader, bundleLoader) {
return f;
})));
}
-function toConcatStream(bundledFileHeader, sources, dest) {
+function toConcatStream(src, bundledFileHeader, sources, dest) {
var useSourcemaps = /\.js$/.test(dest) && !/\.nls\.js$/.test(dest);
// If a bundle ends up including in any of the sources our copyright, then
// insert a fake source at the beginning of each bundle with our copyright
@@ -92,7 +93,7 @@ function toConcatStream(bundledFileHeader, sources, dest) {
}
var treatedSources = sources.map(function (source) {
var root = source.path ? REPO_ROOT_PATH.replace(/\\/g, '/') : '';
- var base = source.path ? root + '/out-build' : '';
+ var base = source.path ? root + ("/" + src) : '';
return new VinylFile({
path: source.path ? root + '/' + source.path.replace(/\\/g, '/') : 'fake',
base: base,
@@ -101,14 +102,16 @@ function toConcatStream(bundledFileHeader, sources, dest) {
});
return es.readArray(treatedSources)
.pipe(useSourcemaps ? util.loadSourcemaps() : es.through())
- .pipe(concat(dest));
+ .pipe(concat(dest))
+ .pipe(stats_1.createStatsStream(dest));
}
-function toBundleStream(bundledFileHeader, bundles) {
+function toBundleStream(src, bundledFileHeader, bundles) {
return es.merge(bundles.map(function (bundle) {
- return toConcatStream(bundledFileHeader, bundle.sources, bundle.dest);
+ return toConcatStream(src, bundledFileHeader, bundle.sources, bundle.dest);
}));
}
function optimizeTask(opts) {
+ var src = opts.src;
var entryPoints = opts.entryPoints;
var otherSources = opts.otherSources;
var resources = opts.resources;
@@ -124,7 +127,7 @@ function optimizeTask(opts) {
if (err) {
return bundlesStream.emit('error', JSON.stringify(err));
}
- toBundleStream(bundledFileHeader, result.files).pipe(bundlesStream);
+ toBundleStream(src, bundledFileHeader, result.files).pipe(bundlesStream);
// Remove css inlined resources
var filteredResources = resources.slice();
result.cssInlinedResources.forEach(function (resource) {
@@ -133,7 +136,7 @@ function optimizeTask(opts) {
}
filteredResources.push('!' + resource);
});
- gulp.src(filteredResources, { base: 'out-build' }).pipe(resourcesStream);
+ gulp.src(filteredResources, { base: "" + src }).pipe(resourcesStream);
var bundleInfoArray = [];
if (opts.bundleInfo) {
bundleInfoArray.push(new VinylFile({
@@ -146,9 +149,9 @@ function optimizeTask(opts) {
});
var otherSourcesStream = es.through();
var otherSourcesStreamArr = [];
- gulp.src(otherSources, { base: 'out-build' })
+ gulp.src(otherSources, { base: "" + src })
.pipe(es.through(function (data) {
- otherSourcesStreamArr.push(toConcatStream(bundledFileHeader, [data], data.relative));
+ otherSourcesStreamArr.push(toConcatStream(src, bundledFileHeader, [data], data.relative));
}, function () {
if (!otherSourcesStreamArr.length) {
setTimeout(function () { otherSourcesStream.emit('end'); }, 0);
@@ -157,17 +160,17 @@ function optimizeTask(opts) {
es.merge(otherSourcesStreamArr).pipe(otherSourcesStream);
}
}));
- var result = es.merge(loader(bundledFileHeader, bundleLoader), bundlesStream, otherSourcesStream, resourcesStream, bundleInfoStream);
+ var result = es.merge(loader(src, bundledFileHeader, bundleLoader), bundlesStream, otherSourcesStream, resourcesStream, bundleInfoStream);
return result
.pipe(sourcemaps.write('./', {
sourceRoot: null,
addComment: true,
includeContent: true
}))
- .pipe(i18n.processNlsFiles({
+ .pipe(opts.languages && opts.languages.length ? i18n_1.processNlsFiles({
fileHeader: bundledFileHeader,
languages: opts.languages
- }))
+ }) : es.through())
.pipe(gulp.dest(out));
};
}
diff --git a/build/lib/optimize.ts b/build/lib/optimize.ts
index b5636ffb8ef..8a35523dbe2 100644
--- a/build/lib/optimize.ts
+++ b/build/lib/optimize.ts
@@ -5,24 +5,25 @@
'use strict';
-import * as path from 'path';
+import * as es from 'event-stream';
import * as gulp from 'gulp';
-import * as sourcemaps from 'gulp-sourcemaps';
-import * as filter from 'gulp-filter';
+import * as concat from 'gulp-concat';
import * as minifyCSS from 'gulp-cssnano';
+import * as filter from 'gulp-filter';
+import * as flatmap from 'gulp-flatmap';
+import * as sourcemaps from 'gulp-sourcemaps';
import * as uglify from 'gulp-uglify';
import * as composer from 'gulp-uglify/composer';
-import * as uglifyes from 'uglify-es';
-import * as es from 'event-stream';
-import * as concat from 'gulp-concat';
-import * as VinylFile from 'vinyl';
-import * as bundle from './bundle';
-import * as util from './util';
-import * as i18n from './i18n';
import * as gulpUtil from 'gulp-util';
-import * as flatmap from 'gulp-flatmap';
+import * as path from 'path';
import * as pump from 'pump';
import * as sm from 'source-map';
+import * as uglifyes from 'uglify-es';
+import * as VinylFile from 'vinyl';
+import * as bundle from './bundle';
+import { Language, processNlsFiles } from './i18n';
+import { createStatsStream } from './stats';
+import * as util from './util';
const REPO_ROOT_PATH = path.join(__dirname, '../..');
@@ -50,21 +51,21 @@ declare class FileSourceMap extends VinylFile {
public sourceMap: sm.RawSourceMap;
}
-function loader(bundledFileHeader: string, bundleLoader: boolean): NodeJS.ReadWriteStream {
+function loader(src: string, bundledFileHeader: string, bundleLoader: boolean): NodeJS.ReadWriteStream {
let sources = [
- 'out-build/vs/loader.js'
+ `${src}/vs/loader.js`
];
if (bundleLoader) {
sources = sources.concat([
- 'out-build/vs/css.js',
- 'out-build/vs/nls.js'
+ `${src}/vs/css.js`,
+ `${src}/vs/nls.js`
]);
}
let isFirst = true;
return (
gulp
- .src(sources, { base: 'out-build' })
+ .src(sources, { base: `${src}` })
.pipe(es.through(function (data) {
if (isFirst) {
isFirst = false;
@@ -87,7 +88,7 @@ function loader(bundledFileHeader: string, bundleLoader: boolean): NodeJS.ReadWr
);
}
-function toConcatStream(bundledFileHeader: string, sources: bundle.IFile[], dest: string): NodeJS.ReadWriteStream {
+function toConcatStream(src: string, bundledFileHeader: string, sources: bundle.IFile[], dest: string): NodeJS.ReadWriteStream {
const useSourcemaps = /\.js$/.test(dest) && !/\.nls\.js$/.test(dest);
// If a bundle ends up including in any of the sources our copyright, then
@@ -110,7 +111,7 @@ function toConcatStream(bundledFileHeader: string, sources: bundle.IFile[], dest
const treatedSources = sources.map(function (source) {
const root = source.path ? REPO_ROOT_PATH.replace(/\\/g, '/') : '';
- const base = source.path ? root + '/out-build' : '';
+ const base = source.path ? root + `/${src}` : '';
return new VinylFile({
path: source.path ? root + '/' + source.path.replace(/\\/g, '/') : 'fake',
@@ -121,16 +122,21 @@ function toConcatStream(bundledFileHeader: string, sources: bundle.IFile[], dest
return es.readArray(treatedSources)
.pipe(useSourcemaps ? util.loadSourcemaps() : es.through())
- .pipe(concat(dest));
+ .pipe(concat(dest))
+ .pipe(createStatsStream(dest));
}
-function toBundleStream(bundledFileHeader: string, bundles: bundle.IConcatFile[]): NodeJS.ReadWriteStream {
+function toBundleStream(src: string, bundledFileHeader: string, bundles: bundle.IConcatFile[]): NodeJS.ReadWriteStream {
return es.merge(bundles.map(function (bundle) {
- return toConcatStream(bundledFileHeader, bundle.sources, bundle.dest);
+ return toConcatStream(src, bundledFileHeader, bundle.sources, bundle.dest);
}));
}
export interface IOptimizeTaskOpts {
+ /**
+ * The folder to read files from.
+ */
+ src: string;
/**
* (for AMD files, will get bundled and get Copyright treatment)
*/
@@ -161,11 +167,13 @@ export interface IOptimizeTaskOpts {
*/
out: string;
/**
- * (languages to process)
+ * (out folder name)
*/
- languages: i18n.Language[];
+ languages?: Language[];
}
+
export function optimizeTask(opts: IOptimizeTaskOpts): () => NodeJS.ReadWriteStream {
+ const src = opts.src;
const entryPoints = opts.entryPoints;
const otherSources = opts.otherSources;
const resources = opts.resources;
@@ -182,7 +190,7 @@ export function optimizeTask(opts: IOptimizeTaskOpts): () => NodeJS.ReadWriteStr
bundle.bundle(entryPoints, loaderConfig, function (err, result) {
if (err) { return bundlesStream.emit('error', JSON.stringify(err)); }
- toBundleStream(bundledFileHeader, result.files).pipe(bundlesStream);
+ toBundleStream(src, bundledFileHeader, result.files).pipe(bundlesStream);
// Remove css inlined resources
const filteredResources = resources.slice();
@@ -192,7 +200,7 @@ export function optimizeTask(opts: IOptimizeTaskOpts): () => NodeJS.ReadWriteStr
}
filteredResources.push('!' + resource);
});
- gulp.src(filteredResources, { base: 'out-build' }).pipe(resourcesStream);
+ gulp.src(filteredResources, { base: `${src}` }).pipe(resourcesStream);
const bundleInfoArray: VinylFile[] = [];
if (opts.bundleInfo) {
@@ -208,9 +216,9 @@ export function optimizeTask(opts: IOptimizeTaskOpts): () => NodeJS.ReadWriteStr
const otherSourcesStream = es.through();
const otherSourcesStreamArr: NodeJS.ReadWriteStream[] = [];
- gulp.src(otherSources, { base: 'out-build' })
+ gulp.src(otherSources, { base: `${src}` })
.pipe(es.through(function (data) {
- otherSourcesStreamArr.push(toConcatStream(bundledFileHeader, [data], data.relative));
+ otherSourcesStreamArr.push(toConcatStream(src, bundledFileHeader, [data], data.relative));
}, function () {
if (!otherSourcesStreamArr.length) {
setTimeout(function () { otherSourcesStream.emit('end'); }, 0);
@@ -220,7 +228,7 @@ export function optimizeTask(opts: IOptimizeTaskOpts): () => NodeJS.ReadWriteStr
}));
const result = es.merge(
- loader(bundledFileHeader, bundleLoader),
+ loader(src, bundledFileHeader, bundleLoader),
bundlesStream,
otherSourcesStream,
resourcesStream,
@@ -233,10 +241,10 @@ export function optimizeTask(opts: IOptimizeTaskOpts): () => NodeJS.ReadWriteStr
addComment: true,
includeContent: true
}))
- .pipe(i18n.processNlsFiles({
+ .pipe(opts.languages && opts.languages.length ? processNlsFiles({
fileHeader: bundledFileHeader,
languages: opts.languages
- }))
+ }) : es.through())
.pipe(gulp.dest(out));
};
}
diff --git a/build/lib/standalone.js b/build/lib/standalone.js
index 12511b01d36..3e2bacc25d5 100644
--- a/build/lib/standalone.js
+++ b/build/lib/standalone.js
@@ -7,171 +7,237 @@ Object.defineProperty(exports, "__esModule", { value: true });
var ts = require("typescript");
var fs = require("fs");
var path = require("path");
+var tss = require("./treeshaking");
var REPO_ROOT = path.join(__dirname, '../../');
var SRC_DIR = path.join(REPO_ROOT, 'src');
-var OUT_EDITOR = path.join(REPO_ROOT, 'out-editor');
-function createESMSourcesAndResources(options) {
+var dirCache = {};
+function writeFile(filePath, contents) {
+ function ensureDirs(dirPath) {
+ if (dirCache[dirPath]) {
+ return;
+ }
+ dirCache[dirPath] = true;
+ ensureDirs(path.dirname(dirPath));
+ if (fs.existsSync(dirPath)) {
+ return;
+ }
+ fs.mkdirSync(dirPath);
+ }
+ ensureDirs(path.dirname(filePath));
+ fs.writeFileSync(filePath, contents);
+}
+function extractEditor(options) {
+ var result = tss.shake(options);
+ for (var fileName in result) {
+ if (result.hasOwnProperty(fileName)) {
+ writeFile(path.join(options.destRoot, fileName), result[fileName]);
+ }
+ }
+ var copied = {};
+ var copyFile = function (fileName) {
+ if (copied[fileName]) {
+ return;
+ }
+ copied[fileName] = true;
+ var srcPath = path.join(options.sourcesRoot, fileName);
+ var dstPath = path.join(options.destRoot, fileName);
+ writeFile(dstPath, fs.readFileSync(srcPath));
+ };
+ var writeOutputFile = function (fileName, contents) {
+ writeFile(path.join(options.destRoot, fileName), contents);
+ };
+ for (var fileName in result) {
+ if (result.hasOwnProperty(fileName)) {
+ var fileContents = result[fileName];
+ var info = ts.preProcessFile(fileContents);
+ for (var i = info.importedFiles.length - 1; i >= 0; i--) {
+ var importedFileName = info.importedFiles[i].fileName;
+ var importedFilePath = void 0;
+ if (/^vs\/css!/.test(importedFileName)) {
+ importedFilePath = importedFileName.substr('vs/css!'.length) + '.css';
+ }
+ else {
+ importedFilePath = importedFileName;
+ }
+ if (/(^\.\/)|(^\.\.\/)/.test(importedFilePath)) {
+ importedFilePath = path.join(path.dirname(fileName), importedFilePath);
+ }
+ if (/\.css$/.test(importedFilePath)) {
+ transportCSS(importedFilePath, copyFile, writeOutputFile);
+ }
+ else {
+ if (fs.existsSync(path.join(options.sourcesRoot, importedFilePath + '.js'))) {
+ copyFile(importedFilePath + '.js');
+ }
+ }
+ }
+ }
+ }
+ var tsConfig = JSON.parse(fs.readFileSync(path.join(options.sourcesRoot, 'tsconfig.json')).toString());
+ tsConfig.compilerOptions.noUnusedLocals = false;
+ tsConfig.compilerOptions.preserveConstEnums = false;
+ tsConfig.compilerOptions.declaration = false;
+ writeOutputFile('tsconfig.json', JSON.stringify(tsConfig, null, '\t'));
+ [
+ 'vs/css.build.js',
+ 'vs/css.d.ts',
+ 'vs/css.js',
+ 'vs/loader.js',
+ 'vs/monaco.d.ts',
+ 'vs/nls.build.js',
+ 'vs/nls.d.ts',
+ 'vs/nls.js',
+ 'vs/nls.mock.ts',
+ 'typings/lib.ie11_safe_es6.d.ts',
+ 'typings/thenable.d.ts',
+ 'typings/es6-promise.d.ts',
+ 'typings/require.d.ts',
+ ].forEach(copyFile);
+}
+exports.extractEditor = extractEditor;
+function createESMSourcesAndResources2(options) {
+ var SRC_FOLDER = path.join(REPO_ROOT, options.srcFolder);
var OUT_FOLDER = path.join(REPO_ROOT, options.outFolder);
var OUT_RESOURCES_FOLDER = path.join(REPO_ROOT, options.outResourcesFolder);
- var in_queue = Object.create(null);
- var queue = [];
- var enqueue = function (module) {
- if (in_queue[module]) {
- return;
+ var getDestAbsoluteFilePath = function (file) {
+ var dest = options.renames[file.replace(/\\/g, '/')] || file;
+ if (dest === 'tsconfig.json') {
+ return path.join(OUT_FOLDER, "../tsconfig.json");
}
- in_queue[module] = true;
- queue.push(module);
+ if (/\.ts$/.test(dest)) {
+ return path.join(OUT_FOLDER, dest);
+ }
+ return path.join(OUT_RESOURCES_FOLDER, dest);
};
- var seenDir = {};
- var createDirectoryRecursive = function (dir) {
- if (seenDir[dir]) {
- return;
+ var allFiles = walkDirRecursive(SRC_FOLDER);
+ for (var i = 0; i < allFiles.length; i++) {
+ var file = allFiles[i];
+ if (options.ignores.indexOf(file.replace(/\\/g, '/')) >= 0) {
+ continue;
}
- var lastSlash = dir.lastIndexOf('/');
- if (lastSlash === -1) {
- lastSlash = dir.lastIndexOf('\\');
+ if (file === 'tsconfig.json') {
+ var tsConfig = JSON.parse(fs.readFileSync(path.join(SRC_FOLDER, file)).toString());
+ tsConfig.compilerOptions.moduleResolution = undefined;
+ tsConfig.compilerOptions.baseUrl = undefined;
+ tsConfig.compilerOptions.module = 'es6';
+ tsConfig.compilerOptions.rootDir = 'src';
+ tsConfig.compilerOptions.outDir = path.relative(path.dirname(OUT_FOLDER), OUT_RESOURCES_FOLDER);
+ write(getDestAbsoluteFilePath(file), JSON.stringify(tsConfig, null, '\t'));
+ continue;
}
- if (lastSlash !== -1) {
- createDirectoryRecursive(dir.substring(0, lastSlash));
+ if (/\.d\.ts$/.test(file) || /\.css$/.test(file) || /\.js$/.test(file)) {
+ // Transport the files directly
+ write(getDestAbsoluteFilePath(file), fs.readFileSync(path.join(SRC_FOLDER, file)));
+ continue;
}
- seenDir[dir] = true;
- try {
- fs.mkdirSync(dir);
- }
- catch (err) { }
- };
- seenDir[REPO_ROOT] = true;
- var toggleComments = function (fileContents) {
- var lines = fileContents.split(/\r\n|\r|\n/);
- var mode = 0;
- for (var i = 0; i < lines.length; i++) {
- var line = lines[i];
- if (mode === 0) {
- if (/\/\/ ESM-comment-begin/.test(line)) {
- mode = 1;
- continue;
+ if (/\.ts$/.test(file)) {
+ // Transform the .ts file
+ var fileContents = fs.readFileSync(path.join(SRC_FOLDER, file)).toString();
+ var info = ts.preProcessFile(fileContents);
+ for (var i_1 = info.importedFiles.length - 1; i_1 >= 0; i_1--) {
+ var importedFilename = info.importedFiles[i_1].fileName;
+ var pos = info.importedFiles[i_1].pos;
+ var end = info.importedFiles[i_1].end;
+ var importedFilepath = void 0;
+ if (/^vs\/css!/.test(importedFilename)) {
+ importedFilepath = importedFilename.substr('vs/css!'.length) + '.css';
}
- if (/\/\/ ESM-uncomment-begin/.test(line)) {
- mode = 2;
- continue;
+ else {
+ importedFilepath = importedFilename;
}
- continue;
+ if (/(^\.\/)|(^\.\.\/)/.test(importedFilepath)) {
+ importedFilepath = path.join(path.dirname(file), importedFilepath);
+ }
+ var relativePath = void 0;
+ if (importedFilepath === path.dirname(file)) {
+ relativePath = '../' + path.basename(path.dirname(file));
+ }
+ else if (importedFilepath === path.dirname(path.dirname(file))) {
+ relativePath = '../../' + path.basename(path.dirname(path.dirname(file)));
+ }
+ else {
+ relativePath = path.relative(path.dirname(file), importedFilepath);
+ }
+ if (!/(^\.\/)|(^\.\.\/)/.test(relativePath)) {
+ relativePath = './' + relativePath;
+ }
+ fileContents = (fileContents.substring(0, pos + 1)
+ + relativePath
+ + fileContents.substring(end + 1));
}
- if (mode === 1) {
- if (/\/\/ ESM-comment-end/.test(line)) {
- mode = 0;
- continue;
- }
- lines[i] = '// ' + line;
- continue;
+ fileContents = fileContents.replace(/import ([a-zA-z0-9]+) = require\(('[^']+')\);/g, function (_, m1, m2) {
+ return "import * as " + m1 + " from " + m2 + ";";
+ });
+ write(getDestAbsoluteFilePath(file), fileContents);
+ continue;
+ }
+ console.log("UNKNOWN FILE: " + file);
+ }
+ function walkDirRecursive(dir) {
+ if (dir.charAt(dir.length - 1) !== '/' || dir.charAt(dir.length - 1) !== '\\') {
+ dir += '/';
+ }
+ var result = [];
+ _walkDirRecursive(dir, result, dir.length);
+ return result;
+ }
+ function _walkDirRecursive(dir, result, trimPos) {
+ var files = fs.readdirSync(dir);
+ for (var i = 0; i < files.length; i++) {
+ var file = path.join(dir, files[i]);
+ if (fs.statSync(file).isDirectory()) {
+ _walkDirRecursive(file, result, trimPos);
}
- if (mode === 2) {
- if (/\/\/ ESM-uncomment-end/.test(line)) {
- mode = 0;
- continue;
- }
- lines[i] = line.replace(/^(\s*)\/\/ ?/, function (_, indent) {
- return indent;
- });
+ else {
+ result.push(file.substr(trimPos));
}
}
- return lines.join('\n');
- };
- var write = function (filePath, contents) {
- var absoluteFilePath;
- if (/\.ts$/.test(filePath)) {
- absoluteFilePath = path.join(OUT_FOLDER, filePath);
- }
- else {
- absoluteFilePath = path.join(OUT_RESOURCES_FOLDER, filePath);
- }
- createDirectoryRecursive(path.dirname(absoluteFilePath));
- if (/(\.ts$)|(\.js$)/.test(filePath)) {
+ }
+ function write(absoluteFilePath, contents) {
+ if (/(\.ts$)|(\.js$)/.test(absoluteFilePath)) {
contents = toggleComments(contents.toString());
}
- fs.writeFileSync(absoluteFilePath, contents);
- };
- options.entryPoints.forEach(function (entryPoint) { return enqueue(entryPoint); });
- while (queue.length > 0) {
- var module_1 = queue.shift();
- if (transportCSS(options, module_1, enqueue, write)) {
- continue;
+ writeFile(absoluteFilePath, contents);
+ function toggleComments(fileContents) {
+ var lines = fileContents.split(/\r\n|\r|\n/);
+ var mode = 0;
+ for (var i = 0; i < lines.length; i++) {
+ var line = lines[i];
+ if (mode === 0) {
+ if (/\/\/ ESM-comment-begin/.test(line)) {
+ mode = 1;
+ continue;
+ }
+ if (/\/\/ ESM-uncomment-begin/.test(line)) {
+ mode = 2;
+ continue;
+ }
+ continue;
+ }
+ if (mode === 1) {
+ if (/\/\/ ESM-comment-end/.test(line)) {
+ mode = 0;
+ continue;
+ }
+ lines[i] = '// ' + line;
+ continue;
+ }
+ if (mode === 2) {
+ if (/\/\/ ESM-uncomment-end/.test(line)) {
+ mode = 0;
+ continue;
+ }
+ lines[i] = line.replace(/^(\s*)\/\/ ?/, function (_, indent) {
+ return indent;
+ });
+ }
+ }
+ return lines.join('\n');
}
- if (transportResource(options, module_1, enqueue, write)) {
- continue;
- }
- if (transportDTS(options, module_1, enqueue, write)) {
- continue;
- }
- var filename = void 0;
- if (options.redirects[module_1]) {
- filename = path.join(SRC_DIR, options.redirects[module_1] + '.ts');
- }
- else {
- filename = path.join(SRC_DIR, module_1 + '.ts');
- }
- var fileContents = fs.readFileSync(filename).toString();
- var info = ts.preProcessFile(fileContents);
- for (var i = info.importedFiles.length - 1; i >= 0; i--) {
- var importedFilename = info.importedFiles[i].fileName;
- var pos = info.importedFiles[i].pos;
- var end = info.importedFiles[i].end;
- var importedFilepath = void 0;
- if (/^vs\/css!/.test(importedFilename)) {
- importedFilepath = importedFilename.substr('vs/css!'.length) + '.css';
- }
- else {
- importedFilepath = importedFilename;
- }
- if (/(^\.\/)|(^\.\.\/)/.test(importedFilepath)) {
- importedFilepath = path.join(path.dirname(module_1), importedFilepath);
- }
- enqueue(importedFilepath);
- var relativePath = void 0;
- if (importedFilepath === path.dirname(module_1)) {
- relativePath = '../' + path.basename(path.dirname(module_1));
- }
- else if (importedFilepath === path.dirname(path.dirname(module_1))) {
- relativePath = '../../' + path.basename(path.dirname(path.dirname(module_1)));
- }
- else {
- relativePath = path.relative(path.dirname(module_1), importedFilepath);
- }
- if (!/(^\.\/)|(^\.\.\/)/.test(relativePath)) {
- relativePath = './' + relativePath;
- }
- fileContents = (fileContents.substring(0, pos + 1)
- + relativePath
- + fileContents.substring(end + 1));
- }
- fileContents = fileContents.replace(/import ([a-zA-z0-9]+) = require\(('[^']+')\);/g, function (_, m1, m2) {
- return "import * as " + m1 + " from " + m2 + ";";
- });
- fileContents = fileContents.replace(/Thenable/g, 'PromiseLike');
- write(module_1 + '.ts', fileContents);
}
- var esm_opts = {
- "compilerOptions": {
- "outDir": path.relative(path.dirname(OUT_FOLDER), OUT_RESOURCES_FOLDER),
- "rootDir": "src",
- "module": "es6",
- "target": "es5",
- "experimentalDecorators": true,
- "lib": [
- "dom",
- "es5",
- "es2015.collection",
- "es2015.promise"
- ],
- "types": []
- }
- };
- fs.writeFileSync(path.join(path.dirname(OUT_FOLDER), 'tsconfig.json'), JSON.stringify(esm_opts, null, '\t'));
- var monacodts = fs.readFileSync(path.join(SRC_DIR, 'vs/monaco.d.ts')).toString();
- fs.writeFileSync(path.join(OUT_FOLDER, 'vs/monaco.d.ts'), monacodts);
}
-exports.createESMSourcesAndResources = createESMSourcesAndResources;
-function transportCSS(options, module, enqueue, write) {
+exports.createESMSourcesAndResources2 = createESMSourcesAndResources2;
+function transportCSS(module, enqueue, write) {
if (!/\.css/.test(module)) {
return false;
}
@@ -179,10 +245,10 @@ function transportCSS(options, module, enqueue, write) {
var fileContents = fs.readFileSync(filename).toString();
var inlineResources = 'base64'; // see https://github.com/Microsoft/monaco-editor/issues/148
var inlineResourcesLimit = 300000; //3000; // see https://github.com/Microsoft/monaco-editor/issues/336
- var newContents = _rewriteOrInlineUrls(filename, fileContents, inlineResources === 'base64', inlineResourcesLimit);
+ var newContents = _rewriteOrInlineUrls(fileContents, inlineResources === 'base64', inlineResourcesLimit);
write(module, newContents);
return true;
- function _rewriteOrInlineUrls(originalFileFSPath, contents, forceBase64, inlineByteLimit) {
+ function _rewriteOrInlineUrls(contents, forceBase64, inlineByteLimit) {
return _replaceURL(contents, function (url) {
var imagePath = path.join(path.dirname(module), url);
var fileContents = fs.readFileSync(path.join(SRC_DIR, imagePath));
@@ -239,27 +305,3 @@ function transportCSS(options, module, enqueue, write) {
return haystack.length >= needle.length && haystack.substr(0, needle.length) === needle;
}
}
-function transportResource(options, module, enqueue, write) {
- if (!/\.svg/.test(module)) {
- return false;
- }
- write(module, fs.readFileSync(path.join(SRC_DIR, module)));
- return true;
-}
-function transportDTS(options, module, enqueue, write) {
- if (options.redirects[module] && fs.existsSync(path.join(SRC_DIR, options.redirects[module] + '.ts'))) {
- return false;
- }
- if (!fs.existsSync(path.join(SRC_DIR, module + '.d.ts'))) {
- return false;
- }
- write(module + '.d.ts', fs.readFileSync(path.join(SRC_DIR, module + '.d.ts')));
- var filename;
- if (options.redirects[module]) {
- write(module + '.js', fs.readFileSync(path.join(SRC_DIR, options.redirects[module] + '.js')));
- }
- else {
- write(module + '.js', fs.readFileSync(path.join(SRC_DIR, module + '.js')));
- }
- return true;
-}
diff --git a/build/lib/standalone.ts b/build/lib/standalone.ts
index a402cf68405..621b4aea6d4 100644
--- a/build/lib/standalone.ts
+++ b/build/lib/standalone.ts
@@ -6,199 +6,273 @@
import * as ts from 'typescript';
import * as fs from 'fs';
import * as path from 'path';
+import * as tss from './treeshaking';
const REPO_ROOT = path.join(__dirname, '../../');
const SRC_DIR = path.join(REPO_ROOT, 'src');
-const OUT_EDITOR = path.join(REPO_ROOT, 'out-editor');
-export interface IOptions {
- entryPoints: string[];
- outFolder: string;
- outResourcesFolder: string;
- redirects: { [module: string]: string; };
+let dirCache: { [dir: string]: boolean; } = {};
+
+function writeFile(filePath: string, contents: Buffer | string): void {
+ function ensureDirs(dirPath: string): void {
+ if (dirCache[dirPath]) {
+ return;
+ }
+ dirCache[dirPath] = true;
+
+ ensureDirs(path.dirname(dirPath));
+ if (fs.existsSync(dirPath)) {
+ return;
+ }
+ fs.mkdirSync(dirPath);
+ }
+ ensureDirs(path.dirname(filePath));
+ fs.writeFileSync(filePath, contents);
}
-export function createESMSourcesAndResources(options: IOptions): void {
+export function extractEditor(options: tss.ITreeShakingOptions & { destRoot: string }): void {
+ let result = tss.shake(options);
+ for (let fileName in result) {
+ if (result.hasOwnProperty(fileName)) {
+ writeFile(path.join(options.destRoot, fileName), result[fileName]);
+ }
+ }
+ let copied: { [fileName: string]: boolean; } = {};
+ const copyFile = (fileName: string) => {
+ if (copied[fileName]) {
+ return;
+ }
+ copied[fileName] = true;
+ const srcPath = path.join(options.sourcesRoot, fileName);
+ const dstPath = path.join(options.destRoot, fileName);
+ writeFile(dstPath, fs.readFileSync(srcPath));
+ };
+ const writeOutputFile = (fileName: string, contents: string) => {
+ writeFile(path.join(options.destRoot, fileName), contents);
+ };
+ for (let fileName in result) {
+ if (result.hasOwnProperty(fileName)) {
+ const fileContents = result[fileName];
+ const info = ts.preProcessFile(fileContents);
+
+ for (let i = info.importedFiles.length - 1; i >= 0; i--) {
+ const importedFileName = info.importedFiles[i].fileName;
+
+ let importedFilePath: string;
+ if (/^vs\/css!/.test(importedFileName)) {
+ importedFilePath = importedFileName.substr('vs/css!'.length) + '.css';
+ } else {
+ importedFilePath = importedFileName;
+ }
+ if (/(^\.\/)|(^\.\.\/)/.test(importedFilePath)) {
+ importedFilePath = path.join(path.dirname(fileName), importedFilePath);
+ }
+
+ if (/\.css$/.test(importedFilePath)) {
+ transportCSS(importedFilePath, copyFile, writeOutputFile);
+ } else {
+ if (fs.existsSync(path.join(options.sourcesRoot, importedFilePath + '.js'))) {
+ copyFile(importedFilePath + '.js');
+ }
+ }
+ }
+ }
+ }
+
+ const tsConfig = JSON.parse(fs.readFileSync(path.join(options.sourcesRoot, 'tsconfig.json')).toString());
+ tsConfig.compilerOptions.noUnusedLocals = false;
+ tsConfig.compilerOptions.preserveConstEnums = false;
+ tsConfig.compilerOptions.declaration = false;
+ writeOutputFile('tsconfig.json', JSON.stringify(tsConfig, null, '\t'));
+
+ [
+ 'vs/css.build.js',
+ 'vs/css.d.ts',
+ 'vs/css.js',
+ 'vs/loader.js',
+ 'vs/monaco.d.ts',
+ 'vs/nls.build.js',
+ 'vs/nls.d.ts',
+ 'vs/nls.js',
+ 'vs/nls.mock.ts',
+ 'typings/lib.ie11_safe_es6.d.ts',
+ 'typings/thenable.d.ts',
+ 'typings/es6-promise.d.ts',
+ 'typings/require.d.ts',
+ ].forEach(copyFile);
+}
+
+export interface IOptions2 {
+ srcFolder: string;
+ outFolder: string;
+ outResourcesFolder: string;
+ ignores: string[];
+ renames: { [filename: string]: string; };
+}
+
+export function createESMSourcesAndResources2(options: IOptions2): void {
+ const SRC_FOLDER = path.join(REPO_ROOT, options.srcFolder);
const OUT_FOLDER = path.join(REPO_ROOT, options.outFolder);
const OUT_RESOURCES_FOLDER = path.join(REPO_ROOT, options.outResourcesFolder);
- let in_queue: { [module: string]: boolean; } = Object.create(null);
- let queue: string[] = [];
-
- const enqueue = (module: string) => {
- if (in_queue[module]) {
- return;
+ const getDestAbsoluteFilePath = (file: string): string => {
+ let dest = options.renames[file.replace(/\\/g, '/')] || file;
+ if (dest === 'tsconfig.json') {
+ return path.join(OUT_FOLDER, `../tsconfig.json`);
}
- in_queue[module] = true;
- queue.push(module);
+ if (/\.ts$/.test(dest)) {
+ return path.join(OUT_FOLDER, dest);
+ }
+ return path.join(OUT_RESOURCES_FOLDER, dest);
};
- const seenDir: { [key: string]: boolean; } = {};
- const createDirectoryRecursive = (dir: string) => {
- if (seenDir[dir]) {
- return;
- }
+ const allFiles = walkDirRecursive(SRC_FOLDER);
+ for (let i = 0; i < allFiles.length; i++) {
+ const file = allFiles[i];
- let lastSlash = dir.lastIndexOf('/');
- if (lastSlash === -1) {
- lastSlash = dir.lastIndexOf('\\');
- }
- if (lastSlash !== -1) {
- createDirectoryRecursive(dir.substring(0, lastSlash));
- }
- seenDir[dir] = true;
- try { fs.mkdirSync(dir); } catch (err) { }
- };
-
- seenDir[REPO_ROOT] = true;
-
- const toggleComments = (fileContents: string) => {
- let lines = fileContents.split(/\r\n|\r|\n/);
- let mode = 0;
- for (let i = 0; i < lines.length; i++) {
- const line = lines[i];
-
- if (mode === 0) {
- if (/\/\/ ESM-comment-begin/.test(line)) {
- mode = 1;
- continue;
- }
- if (/\/\/ ESM-uncomment-begin/.test(line)) {
- mode = 2;
- continue;
- }
- continue;
- }
-
- if (mode === 1) {
- if (/\/\/ ESM-comment-end/.test(line)) {
- mode = 0;
- continue;
- }
- lines[i] = '// ' + line;
- continue;
- }
-
- if (mode === 2) {
- if (/\/\/ ESM-uncomment-end/.test(line)) {
- mode = 0;
- continue;
- }
- lines[i] = line.replace(/^(\s*)\/\/ ?/, function (_, indent) {
- return indent;
- });
- }
- }
-
- return lines.join('\n');
- };
-
- const write = (filePath: string, contents: string | Buffer) => {
- let absoluteFilePath: string;
- if (/\.ts$/.test(filePath)) {
- absoluteFilePath = path.join(OUT_FOLDER, filePath);
- } else {
- absoluteFilePath = path.join(OUT_RESOURCES_FOLDER, filePath);
- }
- createDirectoryRecursive(path.dirname(absoluteFilePath));
- if (/(\.ts$)|(\.js$)/.test(filePath)) {
- contents = toggleComments(contents.toString());
- }
- fs.writeFileSync(absoluteFilePath, contents);
- };
-
- options.entryPoints.forEach((entryPoint) => enqueue(entryPoint));
-
- while (queue.length > 0) {
- const module = queue.shift();
- if (transportCSS(options, module, enqueue, write)) {
- continue;
- }
- if (transportResource(options, module, enqueue, write)) {
- continue;
- }
- if (transportDTS(options, module, enqueue, write)) {
+ if (options.ignores.indexOf(file.replace(/\\/g, '/')) >= 0) {
continue;
}
- let filename: string;
- if (options.redirects[module]) {
- filename = path.join(SRC_DIR, options.redirects[module] + '.ts');
- } else {
- filename = path.join(SRC_DIR, module + '.ts');
- }
- let fileContents = fs.readFileSync(filename).toString();
-
- const info = ts.preProcessFile(fileContents);
-
- for (let i = info.importedFiles.length - 1; i >= 0; i--) {
- const importedFilename = info.importedFiles[i].fileName;
- const pos = info.importedFiles[i].pos;
- const end = info.importedFiles[i].end;
-
- let importedFilepath: string;
- if (/^vs\/css!/.test(importedFilename)) {
- importedFilepath = importedFilename.substr('vs/css!'.length) + '.css';
- } else {
- importedFilepath = importedFilename;
- }
- if (/(^\.\/)|(^\.\.\/)/.test(importedFilepath)) {
- importedFilepath = path.join(path.dirname(module), importedFilepath);
- }
-
- enqueue(importedFilepath);
-
- let relativePath: string;
- if (importedFilepath === path.dirname(module)) {
- relativePath = '../' + path.basename(path.dirname(module));
- } else if (importedFilepath === path.dirname(path.dirname(module))) {
- relativePath = '../../' + path.basename(path.dirname(path.dirname(module)));
- } else {
- relativePath = path.relative(path.dirname(module), importedFilepath);
- }
- if (!/(^\.\/)|(^\.\.\/)/.test(relativePath)) {
- relativePath = './' + relativePath;
- }
- fileContents = (
- fileContents.substring(0, pos + 1)
- + relativePath
- + fileContents.substring(end + 1)
- );
+ if (file === 'tsconfig.json') {
+ const tsConfig = JSON.parse(fs.readFileSync(path.join(SRC_FOLDER, file)).toString());
+ tsConfig.compilerOptions.moduleResolution = undefined;
+ tsConfig.compilerOptions.baseUrl = undefined;
+ tsConfig.compilerOptions.module = 'es6';
+ tsConfig.compilerOptions.rootDir = 'src';
+ tsConfig.compilerOptions.outDir = path.relative(path.dirname(OUT_FOLDER), OUT_RESOURCES_FOLDER);
+ write(getDestAbsoluteFilePath(file), JSON.stringify(tsConfig, null, '\t'));
+ continue;
}
- fileContents = fileContents.replace(/import ([a-zA-z0-9]+) = require\(('[^']+')\);/g, function (_, m1, m2) {
- return `import * as ${m1} from ${m2};`;
- });
- fileContents = fileContents.replace(/Thenable/g, 'PromiseLike');
+ if (/\.d\.ts$/.test(file) || /\.css$/.test(file) || /\.js$/.test(file)) {
+ // Transport the files directly
+ write(getDestAbsoluteFilePath(file), fs.readFileSync(path.join(SRC_FOLDER, file)));
+ continue;
+ }
- write(module + '.ts', fileContents);
+ if (/\.ts$/.test(file)) {
+ // Transform the .ts file
+ let fileContents = fs.readFileSync(path.join(SRC_FOLDER, file)).toString();
+
+ const info = ts.preProcessFile(fileContents);
+
+ for (let i = info.importedFiles.length - 1; i >= 0; i--) {
+ const importedFilename = info.importedFiles[i].fileName;
+ const pos = info.importedFiles[i].pos;
+ const end = info.importedFiles[i].end;
+
+ let importedFilepath: string;
+ if (/^vs\/css!/.test(importedFilename)) {
+ importedFilepath = importedFilename.substr('vs/css!'.length) + '.css';
+ } else {
+ importedFilepath = importedFilename;
+ }
+ if (/(^\.\/)|(^\.\.\/)/.test(importedFilepath)) {
+ importedFilepath = path.join(path.dirname(file), importedFilepath);
+ }
+
+ let relativePath: string;
+ if (importedFilepath === path.dirname(file)) {
+ relativePath = '../' + path.basename(path.dirname(file));
+ } else if (importedFilepath === path.dirname(path.dirname(file))) {
+ relativePath = '../../' + path.basename(path.dirname(path.dirname(file)));
+ } else {
+ relativePath = path.relative(path.dirname(file), importedFilepath);
+ }
+ if (!/(^\.\/)|(^\.\.\/)/.test(relativePath)) {
+ relativePath = './' + relativePath;
+ }
+ fileContents = (
+ fileContents.substring(0, pos + 1)
+ + relativePath
+ + fileContents.substring(end + 1)
+ );
+ }
+
+ fileContents = fileContents.replace(/import ([a-zA-z0-9]+) = require\(('[^']+')\);/g, function (_, m1, m2) {
+ return `import * as ${m1} from ${m2};`;
+ });
+
+ write(getDestAbsoluteFilePath(file), fileContents);
+ continue;
+ }
+
+ console.log(`UNKNOWN FILE: ${file}`);
}
- const esm_opts = {
- "compilerOptions": {
- "outDir": path.relative(path.dirname(OUT_FOLDER), OUT_RESOURCES_FOLDER),
- "rootDir": "src",
- "module": "es6",
- "target": "es5",
- "experimentalDecorators": true,
- "lib": [
- "dom",
- "es5",
- "es2015.collection",
- "es2015.promise"
- ],
- "types": [
- ]
+
+ function walkDirRecursive(dir: string): string[] {
+ if (dir.charAt(dir.length - 1) !== '/' || dir.charAt(dir.length - 1) !== '\\') {
+ dir += '/';
}
- };
- fs.writeFileSync(path.join(path.dirname(OUT_FOLDER), 'tsconfig.json'), JSON.stringify(esm_opts, null, '\t'));
+ let result: string[] = [];
+ _walkDirRecursive(dir, result, dir.length);
+ return result;
+ }
- const monacodts = fs.readFileSync(path.join(SRC_DIR, 'vs/monaco.d.ts')).toString();
- fs.writeFileSync(path.join(OUT_FOLDER, 'vs/monaco.d.ts'), monacodts);
+ function _walkDirRecursive(dir: string, result: string[], trimPos: number): void {
+ const files = fs.readdirSync(dir);
+ for (let i = 0; i < files.length; i++) {
+ const file = path.join(dir, files[i]);
+ if (fs.statSync(file).isDirectory()) {
+ _walkDirRecursive(file, result, trimPos);
+ } else {
+ result.push(file.substr(trimPos));
+ }
+ }
+ }
+ function write(absoluteFilePath: string, contents: string | Buffer): void {
+ if (/(\.ts$)|(\.js$)/.test(absoluteFilePath)) {
+ contents = toggleComments(contents.toString());
+ }
+ writeFile(absoluteFilePath, contents);
+
+ function toggleComments(fileContents: string): string {
+ let lines = fileContents.split(/\r\n|\r|\n/);
+ let mode = 0;
+ for (let i = 0; i < lines.length; i++) {
+ const line = lines[i];
+
+ if (mode === 0) {
+ if (/\/\/ ESM-comment-begin/.test(line)) {
+ mode = 1;
+ continue;
+ }
+ if (/\/\/ ESM-uncomment-begin/.test(line)) {
+ mode = 2;
+ continue;
+ }
+ continue;
+ }
+
+ if (mode === 1) {
+ if (/\/\/ ESM-comment-end/.test(line)) {
+ mode = 0;
+ continue;
+ }
+ lines[i] = '// ' + line;
+ continue;
+ }
+
+ if (mode === 2) {
+ if (/\/\/ ESM-uncomment-end/.test(line)) {
+ mode = 0;
+ continue;
+ }
+ lines[i] = line.replace(/^(\s*)\/\/ ?/, function (_, indent) {
+ return indent;
+ });
+ }
+ }
+
+ return lines.join('\n');
+ }
+ }
}
-function transportCSS(options: IOptions, module: string, enqueue: (module: string) => void, write: (path: string, contents: string | Buffer) => void): boolean {
+function transportCSS(module: string, enqueue: (module: string) => void, write: (path: string, contents: string | Buffer) => void): boolean {
if (!/\.css/.test(module)) {
return false;
@@ -209,11 +283,11 @@ function transportCSS(options: IOptions, module: string, enqueue: (module: strin
const inlineResources = 'base64'; // see https://github.com/Microsoft/monaco-editor/issues/148
const inlineResourcesLimit = 300000;//3000; // see https://github.com/Microsoft/monaco-editor/issues/336
- const newContents = _rewriteOrInlineUrls(filename, fileContents, inlineResources === 'base64', inlineResourcesLimit);
+ const newContents = _rewriteOrInlineUrls(fileContents, inlineResources === 'base64', inlineResourcesLimit);
write(module, newContents);
return true;
- function _rewriteOrInlineUrls(originalFileFSPath: string, contents: string, forceBase64: boolean, inlineByteLimit: number): string {
+ function _rewriteOrInlineUrls(contents: string, forceBase64: boolean, inlineByteLimit: number): string {
return _replaceURL(contents, (url) => {
let imagePath = path.join(path.dirname(module), url);
let fileContents = fs.readFileSync(path.join(SRC_DIR, imagePath));
@@ -273,33 +347,3 @@ function transportCSS(options: IOptions, module: string, enqueue: (module: strin
return haystack.length >= needle.length && haystack.substr(0, needle.length) === needle;
}
}
-
-function transportResource(options: IOptions, module: string, enqueue: (module: string) => void, write: (path: string, contents: string | Buffer) => void): boolean {
-
- if (!/\.svg/.test(module)) {
- return false;
- }
-
- write(module, fs.readFileSync(path.join(SRC_DIR, module)));
- return true;
-}
-
-function transportDTS(options: IOptions, module: string, enqueue: (module: string) => void, write: (path: string, contents: string | Buffer) => void): boolean {
-
- if (options.redirects[module] && fs.existsSync(path.join(SRC_DIR, options.redirects[module] + '.ts'))) {
- return false;
- }
-
- if (!fs.existsSync(path.join(SRC_DIR, module + '.d.ts'))) {
- return false;
- }
-
- write(module + '.d.ts', fs.readFileSync(path.join(SRC_DIR, module + '.d.ts')));
- let filename: string;
- if (options.redirects[module]) {
- write(module + '.js', fs.readFileSync(path.join(SRC_DIR, options.redirects[module] + '.js')));
- } else {
- write(module + '.js', fs.readFileSync(path.join(SRC_DIR, module + '.js')));
- }
- return true;
-}
diff --git a/build/lib/stats.js b/build/lib/stats.js
new file mode 100644
index 00000000000..8659dc67b09
--- /dev/null
+++ b/build/lib/stats.js
@@ -0,0 +1,122 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+'use strict';
+Object.defineProperty(exports, "__esModule", { value: true });
+var es = require("event-stream");
+var util = require("gulp-util");
+var appInsights = require("applicationinsights");
+var Entry = /** @class */ (function () {
+ function Entry(name, totalCount, totalSize) {
+ this.name = name;
+ this.totalCount = totalCount;
+ this.totalSize = totalSize;
+ }
+ Entry.prototype.toString = function (pretty) {
+ if (!pretty) {
+ if (this.totalCount === 1) {
+ return this.name + ": " + this.totalSize + " bytes";
+ }
+ else {
+ return this.name + ": " + this.totalCount + " files with " + this.totalSize + " bytes";
+ }
+ }
+ else {
+ if (this.totalCount === 1) {
+ return "Stats for '" + util.colors.grey(this.name) + "': " + Math.round(this.totalSize / 1204) + "KB";
+ }
+ else {
+ var count = this.totalCount < 100
+ ? util.colors.green(this.totalCount.toString())
+ : util.colors.red(this.totalCount.toString());
+ return "Stats for '" + util.colors.grey(this.name) + "': " + count + " files, " + Math.round(this.totalSize / 1204) + "KB";
+ }
+ }
+ };
+ return Entry;
+}());
+var _entries = new Map();
+function createStatsStream(group, log) {
+ var entry = new Entry(group, 0, 0);
+ _entries.set(entry.name, entry);
+ return es.through(function (data) {
+ var file = data;
+ if (typeof file.path === 'string') {
+ entry.totalCount += 1;
+ if (Buffer.isBuffer(file.contents)) {
+ entry.totalSize += file.contents.length;
+ }
+ else if (file.stat && typeof file.stat.size === 'number') {
+ entry.totalSize += file.stat.size;
+ }
+ else {
+ // funky file...
+ }
+ }
+ this.emit('data', data);
+ }, function () {
+ if (log) {
+ if (entry.totalCount === 1) {
+ util.log("Stats for '" + util.colors.grey(entry.name) + "': " + Math.round(entry.totalSize / 1204) + "KB");
+ }
+ else {
+ var count = entry.totalCount < 100
+ ? util.colors.green(entry.totalCount.toString())
+ : util.colors.red(entry.totalCount.toString());
+ util.log("Stats for '" + util.colors.grey(entry.name) + "': " + count + " files, " + Math.round(entry.totalSize / 1204) + "KB");
+ }
+ }
+ this.emit('end');
+ });
+}
+exports.createStatsStream = createStatsStream;
+function submitAllStats(productJson, commit) {
+ var sorted = [];
+ // move entries for single files to the front
+ _entries.forEach(function (value) {
+ if (value.totalCount === 1) {
+ sorted.unshift(value);
+ }
+ else {
+ sorted.push(value);
+ }
+ });
+ // print to console
+ for (var _i = 0, sorted_1 = sorted; _i < sorted_1.length; _i++) {
+ var entry = sorted_1[_i];
+ console.log(entry.toString(true));
+ }
+ // send data as telementry event when the
+ // product is configured to send telemetry
+ if (!productJson || !productJson.aiConfig || typeof productJson.aiConfig.asimovKey !== 'string') {
+ return Promise.resolve();
+ }
+ return new Promise(function (resolve) {
+ var sizes = {};
+ var counts = {};
+ for (var _i = 0, sorted_2 = sorted; _i < sorted_2.length; _i++) {
+ var entry = sorted_2[_i];
+ sizes[entry.name] = entry.totalSize;
+ counts[entry.name] = entry.totalCount;
+ }
+ appInsights.setup(productJson.aiConfig.asimovKey)
+ .setAutoCollectConsole(false)
+ .setAutoCollectExceptions(false)
+ .setAutoCollectPerformance(false)
+ .setAutoCollectRequests(false)
+ .start();
+ var client = appInsights.getClient(productJson.aiConfig.asimovKey);
+ client.config.endpointUrl = 'https://vortex.data.microsoft.com/collect/v1';
+ /* __GDPR__
+ "monacoworkbench/packagemetrics" : {
+ "commit" : {"classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }
+ "size" : {"classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }
+ "count" : {"classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }
+ }
+ */
+ client.trackEvent("monacoworkbench/packagemetrics", { commit: commit, size: JSON.stringify(sizes), count: JSON.stringify(counts) });
+ client.sendPendingData(function () { return resolve(); });
+ });
+}
+exports.submitAllStats = submitAllStats;
diff --git a/build/lib/stats.ts b/build/lib/stats.ts
new file mode 100644
index 00000000000..0d94fc31a0c
--- /dev/null
+++ b/build/lib/stats.ts
@@ -0,0 +1,129 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+'use strict';
+
+import * as es from 'event-stream';
+import * as util from 'gulp-util';
+import * as File from 'vinyl';
+import * as appInsights from 'applicationinsights';
+
+class Entry {
+ constructor(readonly name: string, public totalCount: number, public totalSize: number) { }
+
+ toString(pretty?: boolean): string {
+ if (!pretty) {
+ if (this.totalCount === 1) {
+ return `${this.name}: ${this.totalSize} bytes`;
+ } else {
+ return `${this.name}: ${this.totalCount} files with ${this.totalSize} bytes`;
+ }
+ } else {
+ if (this.totalCount === 1) {
+ return `Stats for '${util.colors.grey(this.name)}': ${Math.round(this.totalSize / 1204)}KB`;
+
+ } else {
+ let count = this.totalCount < 100
+ ? util.colors.green(this.totalCount.toString())
+ : util.colors.red(this.totalCount.toString());
+
+ return `Stats for '${util.colors.grey(this.name)}': ${count} files, ${Math.round(this.totalSize / 1204)}KB`;
+ }
+ }
+ }
+}
+
+const _entries = new Map();
+
+export function createStatsStream(group: string, log?: boolean): es.ThroughStream {
+
+ const entry = new Entry(group, 0, 0);
+ _entries.set(entry.name, entry);
+
+ return es.through(function (data) {
+ let file = data as File;
+ if (typeof file.path === 'string') {
+ entry.totalCount += 1;
+ if (Buffer.isBuffer(file.contents)) {
+ entry.totalSize += file.contents.length;
+ } else if (file.stat && typeof file.stat.size === 'number') {
+ entry.totalSize += file.stat.size;
+ } else {
+ // funky file...
+ }
+ }
+ this.emit('data', data);
+ }, function () {
+ if (log) {
+ if (entry.totalCount === 1) {
+ util.log(`Stats for '${util.colors.grey(entry.name)}': ${Math.round(entry.totalSize / 1204)}KB`);
+
+ } else {
+ let count = entry.totalCount < 100
+ ? util.colors.green(entry.totalCount.toString())
+ : util.colors.red(entry.totalCount.toString());
+
+ util.log(`Stats for '${util.colors.grey(entry.name)}': ${count} files, ${Math.round(entry.totalSize / 1204)}KB`);
+ }
+ }
+
+ this.emit('end');
+ });
+}
+
+export function submitAllStats(productJson: any, commit: string): Promise {
+
+ let sorted: Entry[] = [];
+ // move entries for single files to the front
+ _entries.forEach(value => {
+ if (value.totalCount === 1) {
+ sorted.unshift(value);
+ } else {
+ sorted.push(value);
+ }
+ });
+
+ // print to console
+ for (const entry of sorted) {
+ console.log(entry.toString(true));
+ }
+
+ // send data as telementry event when the
+ // product is configured to send telemetry
+ if (!productJson || !productJson.aiConfig || typeof productJson.aiConfig.asimovKey !== 'string') {
+ return Promise.resolve();
+ }
+
+ return new Promise(resolve => {
+
+ const sizes = {};
+ const counts = {};
+ for (const entry of sorted) {
+ sizes[entry.name] = entry.totalSize;
+ counts[entry.name] = entry.totalCount;
+ }
+
+ appInsights.setup(productJson.aiConfig.asimovKey)
+ .setAutoCollectConsole(false)
+ .setAutoCollectExceptions(false)
+ .setAutoCollectPerformance(false)
+ .setAutoCollectRequests(false)
+ .start();
+
+ const client = appInsights.getClient(productJson.aiConfig.asimovKey);
+ client.config.endpointUrl = 'https://vortex.data.microsoft.com/collect/v1';
+
+ /* __GDPR__
+ "monacoworkbench/packagemetrics" : {
+ "commit" : {"classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }
+ "size" : {"classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }
+ "count" : {"classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }
+ }
+ */
+ client.trackEvent(`monacoworkbench/packagemetrics`, { commit, size: JSON.stringify(sizes), count: JSON.stringify(counts) });
+ client.sendPendingData(() => resolve());
+ });
+
+}
diff --git a/build/lib/test/util.test.js b/build/lib/test/util.test.js
deleted file mode 100644
index ef0616173b6..00000000000
--- a/build/lib/test/util.test.js
+++ /dev/null
@@ -1,56 +0,0 @@
-"use strict";
-/*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-Object.defineProperty(exports, "__esModule", { value: true });
-var assert = require("assert");
-var util = require("../util");
-function getMockTagExists(tags) {
- return function (tag) { return tags.indexOf(tag) >= 0; };
-}
-suite('util tests', function () {
- test('getPreviousVersion - patch', function () {
- assert.equal(util.getPreviousVersion('1.2.3', getMockTagExists(['1.2.2', '1.2.1', '1.2.0', '1.1.0'])), '1.2.2');
- });
- test('getPreviousVersion - patch invalid', function () {
- try {
- util.getPreviousVersion('1.2.2', getMockTagExists(['1.2.0', '1.1.0']));
- }
- catch (e) {
- // expected
- return;
- }
- throw new Error('Expected an exception');
- });
- test('getPreviousVersion - minor', function () {
- assert.equal(util.getPreviousVersion('1.2.0', getMockTagExists(['1.1.0', '1.1.1', '1.1.2', '1.1.3'])), '1.1.3');
- assert.equal(util.getPreviousVersion('1.2.0', getMockTagExists(['1.1.0', '1.0.0'])), '1.1.0');
- });
- test('getPreviousVersion - minor gap', function () {
- assert.equal(util.getPreviousVersion('1.2.0', getMockTagExists(['1.1.0', '1.1.1', '1.1.3'])), '1.1.1');
- });
- test('getPreviousVersion - minor invalid', function () {
- try {
- util.getPreviousVersion('1.2.0', getMockTagExists(['1.0.0']));
- }
- catch (e) {
- // expected
- return;
- }
- throw new Error('Expected an exception');
- });
- test('getPreviousVersion - major', function () {
- assert.equal(util.getPreviousVersion('2.0.0', getMockTagExists(['1.0.0', '1.1.0', '1.2.0', '1.2.1', '1.2.2'])), '1.2.2');
- });
- test('getPreviousVersion - major invalid', function () {
- try {
- util.getPreviousVersion('3.0.0', getMockTagExists(['1.0.0']));
- }
- catch (e) {
- // expected
- return;
- }
- throw new Error('Expected an exception');
- });
-});
diff --git a/build/lib/test/util.test.ts b/build/lib/test/util.test.ts
deleted file mode 100644
index 928e730f06c..00000000000
--- a/build/lib/test/util.test.ts
+++ /dev/null
@@ -1,79 +0,0 @@
-/*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-
-import assert = require('assert');
-import util = require('../util');
-
-function getMockTagExists(tags: string[]) {
- return (tag: string) => tags.indexOf(tag) >= 0;
-}
-
-suite('util tests', () => {
- test('getPreviousVersion - patch', () => {
- assert.equal(
- util.getPreviousVersion('1.2.3', getMockTagExists(['1.2.2', '1.2.1', '1.2.0', '1.1.0'])),
- '1.2.2'
- );
- });
-
- test('getPreviousVersion - patch invalid', () => {
- try {
- util.getPreviousVersion('1.2.2', getMockTagExists(['1.2.0', '1.1.0']));
- } catch (e) {
- // expected
- return;
- }
-
- throw new Error('Expected an exception');
- });
-
- test('getPreviousVersion - minor', () => {
- assert.equal(
- util.getPreviousVersion('1.2.0', getMockTagExists(['1.1.0', '1.1.1', '1.1.2', '1.1.3'])),
- '1.1.3'
- );
-
- assert.equal(
- util.getPreviousVersion('1.2.0', getMockTagExists(['1.1.0', '1.0.0'])),
- '1.1.0'
- );
- });
-
- test('getPreviousVersion - minor gap', () => {
- assert.equal(
- util.getPreviousVersion('1.2.0', getMockTagExists(['1.1.0', '1.1.1', '1.1.3'])),
- '1.1.1'
- );
- });
-
- test('getPreviousVersion - minor invalid', () => {
- try {
- util.getPreviousVersion('1.2.0', getMockTagExists(['1.0.0']));
- } catch (e) {
- // expected
- return;
- }
-
- throw new Error('Expected an exception');
- });
-
- test('getPreviousVersion - major', () => {
- assert.equal(
- util.getPreviousVersion('2.0.0', getMockTagExists(['1.0.0', '1.1.0', '1.2.0', '1.2.1', '1.2.2'])),
- '1.2.2'
- );
- });
-
- test('getPreviousVersion - major invalid', () => {
- try {
- util.getPreviousVersion('3.0.0', getMockTagExists(['1.0.0']));
- } catch (e) {
- // expected
- return;
- }
-
- throw new Error('Expected an exception');
- });
-});
diff --git a/build/lib/treeshaking.js b/build/lib/treeshaking.js
new file mode 100644
index 00000000000..c77fa128912
--- /dev/null
+++ b/build/lib/treeshaking.js
@@ -0,0 +1,682 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+'use strict';
+Object.defineProperty(exports, "__esModule", { value: true });
+var fs = require("fs");
+var path = require("path");
+var ts = require("typescript");
+var TYPESCRIPT_LIB_FOLDER = path.dirname(require.resolve('typescript/lib/lib.d.ts'));
+var ShakeLevel;
+(function (ShakeLevel) {
+ ShakeLevel[ShakeLevel["Files"] = 0] = "Files";
+ ShakeLevel[ShakeLevel["InnerFile"] = 1] = "InnerFile";
+ ShakeLevel[ShakeLevel["ClassMembers"] = 2] = "ClassMembers";
+})(ShakeLevel = exports.ShakeLevel || (exports.ShakeLevel = {}));
+function shake(options) {
+ var languageService = createTypeScriptLanguageService(options);
+ markNodes(languageService, options);
+ return generateResult(languageService, options.shakeLevel);
+}
+exports.shake = shake;
+//#region Discovery, LanguageService & Setup
+function createTypeScriptLanguageService(options) {
+ // Discover referenced files
+ var FILES = discoverAndReadFiles(options);
+ // Add fake usage files
+ options.inlineEntryPoints.forEach(function (inlineEntryPoint, index) {
+ FILES["inlineEntryPoint:" + index + ".ts"] = inlineEntryPoint;
+ });
+ // Resolve libs
+ var RESOLVED_LIBS = {};
+ options.libs.forEach(function (filename) {
+ var filepath = path.join(TYPESCRIPT_LIB_FOLDER, filename);
+ RESOLVED_LIBS["defaultLib:" + filename] = fs.readFileSync(filepath).toString();
+ });
+ var host = new TypeScriptLanguageServiceHost(RESOLVED_LIBS, FILES, options.compilerOptions);
+ return ts.createLanguageService(host);
+}
+/**
+ * Read imports and follow them until all files have been handled
+ */
+function discoverAndReadFiles(options) {
+ var FILES = {};
+ var in_queue = Object.create(null);
+ var queue = [];
+ var enqueue = function (moduleId) {
+ if (in_queue[moduleId]) {
+ return;
+ }
+ in_queue[moduleId] = true;
+ queue.push(moduleId);
+ };
+ options.entryPoints.forEach(function (entryPoint) { return enqueue(entryPoint); });
+ while (queue.length > 0) {
+ var moduleId = queue.shift();
+ var dts_filename = path.join(options.sourcesRoot, moduleId + '.d.ts');
+ if (fs.existsSync(dts_filename)) {
+ var dts_filecontents = fs.readFileSync(dts_filename).toString();
+ FILES[moduleId + '.d.ts'] = dts_filecontents;
+ continue;
+ }
+ var ts_filename = void 0;
+ if (options.redirects[moduleId]) {
+ ts_filename = path.join(options.sourcesRoot, options.redirects[moduleId] + '.ts');
+ }
+ else {
+ ts_filename = path.join(options.sourcesRoot, moduleId + '.ts');
+ }
+ var ts_filecontents = fs.readFileSync(ts_filename).toString();
+ var info = ts.preProcessFile(ts_filecontents);
+ for (var i = info.importedFiles.length - 1; i >= 0; i--) {
+ var importedFileName = info.importedFiles[i].fileName;
+ if (options.importIgnorePattern.test(importedFileName)) {
+ // Ignore vs/css! imports
+ continue;
+ }
+ var importedModuleId = importedFileName;
+ if (/(^\.\/)|(^\.\.\/)/.test(importedModuleId)) {
+ importedModuleId = path.join(path.dirname(moduleId), importedModuleId);
+ }
+ enqueue(importedModuleId);
+ }
+ FILES[moduleId + '.ts'] = ts_filecontents;
+ }
+ return FILES;
+}
+/**
+ * A TypeScript language service host
+ */
+var TypeScriptLanguageServiceHost = /** @class */ (function () {
+ function TypeScriptLanguageServiceHost(libs, files, compilerOptions) {
+ this._libs = libs;
+ this._files = files;
+ this._compilerOptions = compilerOptions;
+ }
+ // --- language service host ---------------
+ TypeScriptLanguageServiceHost.prototype.getCompilationSettings = function () {
+ return this._compilerOptions;
+ };
+ TypeScriptLanguageServiceHost.prototype.getScriptFileNames = function () {
+ return ([]
+ .concat(Object.keys(this._libs))
+ .concat(Object.keys(this._files)));
+ };
+ TypeScriptLanguageServiceHost.prototype.getScriptVersion = function (fileName) {
+ return '1';
+ };
+ TypeScriptLanguageServiceHost.prototype.getProjectVersion = function () {
+ return '1';
+ };
+ TypeScriptLanguageServiceHost.prototype.getScriptSnapshot = function (fileName) {
+ if (this._files.hasOwnProperty(fileName)) {
+ return ts.ScriptSnapshot.fromString(this._files[fileName]);
+ }
+ else if (this._libs.hasOwnProperty(fileName)) {
+ return ts.ScriptSnapshot.fromString(this._libs[fileName]);
+ }
+ else {
+ return ts.ScriptSnapshot.fromString('');
+ }
+ };
+ TypeScriptLanguageServiceHost.prototype.getScriptKind = function (fileName) {
+ return ts.ScriptKind.TS;
+ };
+ TypeScriptLanguageServiceHost.prototype.getCurrentDirectory = function () {
+ return '';
+ };
+ TypeScriptLanguageServiceHost.prototype.getDefaultLibFileName = function (options) {
+ return 'defaultLib:lib.d.ts';
+ };
+ TypeScriptLanguageServiceHost.prototype.isDefaultLibFileName = function (fileName) {
+ return fileName === this.getDefaultLibFileName(this._compilerOptions);
+ };
+ return TypeScriptLanguageServiceHost;
+}());
+//#endregion
+//#region Tree Shaking
+var NodeColor;
+(function (NodeColor) {
+ NodeColor[NodeColor["White"] = 0] = "White";
+ NodeColor[NodeColor["Gray"] = 1] = "Gray";
+ NodeColor[NodeColor["Black"] = 2] = "Black";
+})(NodeColor || (NodeColor = {}));
+function getColor(node) {
+ return node.$$$color || 0 /* White */;
+}
+function setColor(node, color) {
+ node.$$$color = color;
+}
+function nodeOrParentIsBlack(node) {
+ while (node) {
+ var color = getColor(node);
+ if (color === 2 /* Black */) {
+ return true;
+ }
+ node = node.parent;
+ }
+ return false;
+}
+function nodeOrChildIsBlack(node) {
+ if (getColor(node) === 2 /* Black */) {
+ return true;
+ }
+ for (var _i = 0, _a = node.getChildren(); _i < _a.length; _i++) {
+ var child = _a[_i];
+ if (nodeOrChildIsBlack(child)) {
+ return true;
+ }
+ }
+ return false;
+}
+function markNodes(languageService, options) {
+ var program = languageService.getProgram();
+ if (options.shakeLevel === 0 /* Files */) {
+ // Mark all source files Black
+ program.getSourceFiles().forEach(function (sourceFile) {
+ setColor(sourceFile, 2 /* Black */);
+ });
+ return;
+ }
+ var black_queue = [];
+ var gray_queue = [];
+ var sourceFilesLoaded = {};
+ function enqueueTopLevelModuleStatements(sourceFile) {
+ sourceFile.forEachChild(function (node) {
+ if (ts.isImportDeclaration(node)) {
+ if (!node.importClause && ts.isStringLiteral(node.moduleSpecifier)) {
+ setColor(node, 2 /* Black */);
+ enqueueImport(node, node.moduleSpecifier.text);
+ }
+ return;
+ }
+ if (ts.isExportDeclaration(node)) {
+ if (ts.isStringLiteral(node.moduleSpecifier)) {
+ setColor(node, 2 /* Black */);
+ enqueueImport(node, node.moduleSpecifier.text);
+ }
+ return;
+ }
+ if (ts.isExpressionStatement(node)
+ || ts.isIfStatement(node)
+ || ts.isIterationStatement(node, true)
+ || ts.isExportAssignment(node)) {
+ enqueue_black(node);
+ }
+ if (ts.isImportEqualsDeclaration(node)) {
+ if (/export/.test(node.getFullText(sourceFile))) {
+ // e.g. "export import Severity = BaseSeverity;"
+ enqueue_black(node);
+ }
+ }
+ });
+ }
+ function enqueue_gray(node) {
+ if (nodeOrParentIsBlack(node) || getColor(node) === 1 /* Gray */) {
+ return;
+ }
+ setColor(node, 1 /* Gray */);
+ gray_queue.push(node);
+ }
+ function enqueue_black(node) {
+ var previousColor = getColor(node);
+ if (previousColor === 2 /* Black */) {
+ return;
+ }
+ if (previousColor === 1 /* Gray */) {
+ // remove from gray queue
+ gray_queue.splice(gray_queue.indexOf(node), 1);
+ setColor(node, 0 /* White */);
+ // add to black queue
+ enqueue_black(node);
+ // // move from one queue to the other
+ // black_queue.push(node);
+ // setColor(node, NodeColor.Black);
+ return;
+ }
+ if (nodeOrParentIsBlack(node)) {
+ return;
+ }
+ var fileName = node.getSourceFile().fileName;
+ if (/^defaultLib:/.test(fileName) || /\.d\.ts$/.test(fileName)) {
+ setColor(node, 2 /* Black */);
+ return;
+ }
+ var sourceFile = node.getSourceFile();
+ if (!sourceFilesLoaded[sourceFile.fileName]) {
+ sourceFilesLoaded[sourceFile.fileName] = true;
+ enqueueTopLevelModuleStatements(sourceFile);
+ }
+ if (ts.isSourceFile(node)) {
+ return;
+ }
+ setColor(node, 2 /* Black */);
+ black_queue.push(node);
+ if (options.shakeLevel === 2 /* ClassMembers */ && (ts.isMethodDeclaration(node) || ts.isMethodSignature(node) || ts.isPropertySignature(node) || ts.isGetAccessor(node) || ts.isSetAccessor(node))) {
+ var references = languageService.getReferencesAtPosition(node.getSourceFile().fileName, node.name.pos + node.name.getLeadingTriviaWidth());
+ if (references) {
+ for (var i = 0, len = references.length; i < len; i++) {
+ var reference = references[i];
+ var referenceSourceFile = program.getSourceFile(reference.fileName);
+ var referenceNode = getTokenAtPosition(referenceSourceFile, reference.textSpan.start, false, false);
+ if (ts.isMethodDeclaration(referenceNode.parent)
+ || ts.isPropertyDeclaration(referenceNode.parent)
+ || ts.isGetAccessor(referenceNode.parent)
+ || ts.isSetAccessor(referenceNode.parent)) {
+ enqueue_gray(referenceNode.parent);
+ }
+ }
+ }
+ }
+ }
+ function enqueueFile(filename) {
+ var sourceFile = program.getSourceFile(filename);
+ if (!sourceFile) {
+ console.warn("Cannot find source file " + filename);
+ return;
+ }
+ enqueue_black(sourceFile);
+ }
+ function enqueueImport(node, importText) {
+ if (options.importIgnorePattern.test(importText)) {
+ // this import should be ignored
+ return;
+ }
+ var nodeSourceFile = node.getSourceFile();
+ var fullPath;
+ if (/(^\.\/)|(^\.\.\/)/.test(importText)) {
+ fullPath = path.join(path.dirname(nodeSourceFile.fileName), importText) + '.ts';
+ }
+ else {
+ fullPath = importText + '.ts';
+ }
+ enqueueFile(fullPath);
+ }
+ options.entryPoints.forEach(function (moduleId) { return enqueueFile(moduleId + '.ts'); });
+ // Add fake usage files
+ options.inlineEntryPoints.forEach(function (_, index) { return enqueueFile("inlineEntryPoint:" + index + ".ts"); });
+ var step = 0;
+ var checker = program.getTypeChecker();
+ var _loop_1 = function () {
+ ++step;
+ var node = void 0;
+ if (step % 100 === 0) {
+ console.log(step + "/" + (step + black_queue.length + gray_queue.length) + " (" + black_queue.length + ", " + gray_queue.length + ")");
+ }
+ if (black_queue.length === 0) {
+ for (var i = 0; i < gray_queue.length; i++) {
+ var node_1 = gray_queue[i];
+ var nodeParent = node_1.parent;
+ if ((ts.isClassDeclaration(nodeParent) || ts.isInterfaceDeclaration(nodeParent)) && nodeOrChildIsBlack(nodeParent)) {
+ gray_queue.splice(i, 1);
+ black_queue.push(node_1);
+ setColor(node_1, 2 /* Black */);
+ i--;
+ }
+ }
+ }
+ if (black_queue.length > 0) {
+ node = black_queue.shift();
+ }
+ else {
+ return "break";
+ }
+ var nodeSourceFile = node.getSourceFile();
+ var loop = function (node) {
+ var _a = getRealNodeSymbol(checker, node), symbol = _a[0], symbolImportNode = _a[1];
+ if (symbolImportNode) {
+ setColor(symbolImportNode, 2 /* Black */);
+ }
+ if (symbol && !nodeIsInItsOwnDeclaration(nodeSourceFile, node, symbol)) {
+ for (var i = 0, len = symbol.declarations.length; i < len; i++) {
+ var declaration = symbol.declarations[i];
+ if (ts.isSourceFile(declaration)) {
+ // Do not enqueue full source files
+ // (they can be the declaration of a module import)
+ continue;
+ }
+ if (options.shakeLevel === 2 /* ClassMembers */ && (ts.isClassDeclaration(declaration) || ts.isInterfaceDeclaration(declaration))) {
+ enqueue_black(declaration.name);
+ for (var j = 0; j < declaration.members.length; j++) {
+ var member = declaration.members[j];
+ var memberName = member.name ? member.name.getText() : null;
+ if (ts.isConstructorDeclaration(member)
+ || ts.isConstructSignatureDeclaration(member)
+ || ts.isIndexSignatureDeclaration(member)
+ || ts.isCallSignatureDeclaration(member)
+ || memberName === 'toJSON'
+ || memberName === 'toString'
+ || memberName === 'dispose' // TODO: keeping all `dispose` methods
+ ) {
+ enqueue_black(member);
+ }
+ }
+ // queue the heritage clauses
+ if (declaration.heritageClauses) {
+ for (var _i = 0, _b = declaration.heritageClauses; _i < _b.length; _i++) {
+ var heritageClause = _b[_i];
+ enqueue_black(heritageClause);
+ }
+ }
+ }
+ else {
+ enqueue_black(declaration);
+ }
+ }
+ }
+ node.forEachChild(loop);
+ };
+ node.forEachChild(loop);
+ };
+ while (black_queue.length > 0 || gray_queue.length > 0) {
+ var state_1 = _loop_1();
+ if (state_1 === "break")
+ break;
+ }
+}
+function nodeIsInItsOwnDeclaration(nodeSourceFile, node, symbol) {
+ for (var i = 0, len = symbol.declarations.length; i < len; i++) {
+ var declaration = symbol.declarations[i];
+ var declarationSourceFile = declaration.getSourceFile();
+ if (nodeSourceFile === declarationSourceFile) {
+ if (declaration.pos <= node.pos && node.end <= declaration.end) {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+function generateResult(languageService, shakeLevel) {
+ var program = languageService.getProgram();
+ var result = {};
+ var writeFile = function (filePath, contents) {
+ result[filePath] = contents;
+ };
+ program.getSourceFiles().forEach(function (sourceFile) {
+ var fileName = sourceFile.fileName;
+ if (/^defaultLib:/.test(fileName)) {
+ return;
+ }
+ var destination = fileName;
+ if (/\.d\.ts$/.test(fileName)) {
+ if (nodeOrChildIsBlack(sourceFile)) {
+ writeFile(destination, sourceFile.text);
+ }
+ return;
+ }
+ var text = sourceFile.text;
+ var result = '';
+ function keep(node) {
+ result += text.substring(node.pos, node.end);
+ }
+ function write(data) {
+ result += data;
+ }
+ function writeMarkedNodes(node) {
+ if (getColor(node) === 2 /* Black */) {
+ return keep(node);
+ }
+ // Always keep certain top-level statements
+ if (ts.isSourceFile(node.parent)) {
+ if (ts.isExpressionStatement(node) && ts.isStringLiteral(node.expression) && node.expression.text === 'use strict') {
+ return keep(node);
+ }
+ if (ts.isVariableStatement(node) && nodeOrChildIsBlack(node)) {
+ return keep(node);
+ }
+ }
+ // Keep the entire import in import * as X cases
+ if (ts.isImportDeclaration(node)) {
+ if (node.importClause && node.importClause.namedBindings) {
+ if (ts.isNamespaceImport(node.importClause.namedBindings)) {
+ if (getColor(node.importClause.namedBindings) === 2 /* Black */) {
+ return keep(node);
+ }
+ }
+ else {
+ var survivingImports = [];
+ for (var i = 0; i < node.importClause.namedBindings.elements.length; i++) {
+ var importNode = node.importClause.namedBindings.elements[i];
+ if (getColor(importNode) === 2 /* Black */) {
+ survivingImports.push(importNode.getFullText(sourceFile));
+ }
+ }
+ var leadingTriviaWidth = node.getLeadingTriviaWidth();
+ var leadingTrivia = sourceFile.text.substr(node.pos, leadingTriviaWidth);
+ if (survivingImports.length > 0) {
+ if (node.importClause && getColor(node.importClause) === 2 /* Black */) {
+ return write(leadingTrivia + "import " + node.importClause.name.text + ", {" + survivingImports.join(',') + " } from" + node.moduleSpecifier.getFullText(sourceFile) + ";");
+ }
+ return write(leadingTrivia + "import {" + survivingImports.join(',') + " } from" + node.moduleSpecifier.getFullText(sourceFile) + ";");
+ }
+ else {
+ if (node.importClause && getColor(node.importClause) === 2 /* Black */) {
+ return write(leadingTrivia + "import " + node.importClause.name.text + " from" + node.moduleSpecifier.getFullText(sourceFile) + ";");
+ }
+ }
+ }
+ }
+ else {
+ if (node.importClause && getColor(node.importClause) === 2 /* Black */) {
+ return keep(node);
+ }
+ }
+ }
+ if (shakeLevel === 2 /* ClassMembers */ && (ts.isClassDeclaration(node) || ts.isInterfaceDeclaration(node)) && nodeOrChildIsBlack(node)) {
+ var toWrite = node.getFullText();
+ for (var i = node.members.length - 1; i >= 0; i--) {
+ var member = node.members[i];
+ if (getColor(member) === 2 /* Black */) {
+ // keep method
+ continue;
+ }
+ if (/^_(.*)Brand$/.test(member.name.getText())) {
+ // TODO: keep all members ending with `Brand`...
+ continue;
+ }
+ var pos = member.pos - node.pos;
+ var end = member.end - node.pos;
+ toWrite = toWrite.substring(0, pos) + toWrite.substring(end);
+ }
+ return write(toWrite);
+ }
+ if (ts.isFunctionDeclaration(node)) {
+ // Do not go inside functions if they haven't been marked
+ return;
+ }
+ node.forEachChild(writeMarkedNodes);
+ }
+ if (getColor(sourceFile) !== 2 /* Black */) {
+ if (!nodeOrChildIsBlack(sourceFile)) {
+ // none of the elements are reachable => don't write this file at all!
+ return;
+ }
+ sourceFile.forEachChild(writeMarkedNodes);
+ result += sourceFile.endOfFileToken.getFullText(sourceFile);
+ }
+ else {
+ result = text;
+ }
+ writeFile(destination, result);
+ });
+ return result;
+}
+//#endregion
+//#region Utils
+/**
+ * Returns the node's symbol and the `import` node (if the symbol resolved from a different module)
+ */
+function getRealNodeSymbol(checker, node) {
+ /**
+ * Returns the containing object literal property declaration given a possible name node, e.g. "a" in x = { "a": 1 }
+ */
+ /* @internal */
+ function getContainingObjectLiteralElement(node) {
+ switch (node.kind) {
+ case ts.SyntaxKind.StringLiteral:
+ case ts.SyntaxKind.NumericLiteral:
+ if (node.parent.kind === ts.SyntaxKind.ComputedPropertyName) {
+ return ts.isObjectLiteralElement(node.parent.parent) ? node.parent.parent : undefined;
+ }
+ // falls through
+ case ts.SyntaxKind.Identifier:
+ return ts.isObjectLiteralElement(node.parent) &&
+ (node.parent.parent.kind === ts.SyntaxKind.ObjectLiteralExpression || node.parent.parent.kind === ts.SyntaxKind.JsxAttributes) &&
+ node.parent.name === node ? node.parent : undefined;
+ }
+ return undefined;
+ }
+ function getPropertySymbolsFromType(type, propName) {
+ function getTextOfPropertyName(name) {
+ function isStringOrNumericLiteral(node) {
+ var kind = node.kind;
+ return kind === ts.SyntaxKind.StringLiteral
+ || kind === ts.SyntaxKind.NumericLiteral;
+ }
+ switch (name.kind) {
+ case ts.SyntaxKind.Identifier:
+ return name.text;
+ case ts.SyntaxKind.StringLiteral:
+ case ts.SyntaxKind.NumericLiteral:
+ return name.text;
+ case ts.SyntaxKind.ComputedPropertyName:
+ return isStringOrNumericLiteral(name.expression) ? name.expression.text : undefined;
+ }
+ }
+ var name = getTextOfPropertyName(propName);
+ if (name && type) {
+ var result = [];
+ var symbol_1 = type.getProperty(name);
+ if (type.flags & ts.TypeFlags.Union) {
+ for (var _i = 0, _a = type.types; _i < _a.length; _i++) {
+ var t = _a[_i];
+ var symbol_2 = t.getProperty(name);
+ if (symbol_2) {
+ result.push(symbol_2);
+ }
+ }
+ return result;
+ }
+ if (symbol_1) {
+ result.push(symbol_1);
+ return result;
+ }
+ }
+ return undefined;
+ }
+ function getPropertySymbolsFromContextualType(typeChecker, node) {
+ var objectLiteral = node.parent;
+ var contextualType = typeChecker.getContextualType(objectLiteral);
+ return getPropertySymbolsFromType(contextualType, node.name);
+ }
+ // Go to the original declaration for cases:
+ //
+ // (1) when the aliased symbol was declared in the location(parent).
+ // (2) when the aliased symbol is originating from an import.
+ //
+ function shouldSkipAlias(node, declaration) {
+ if (node.kind !== ts.SyntaxKind.Identifier) {
+ return false;
+ }
+ if (node.parent === declaration) {
+ return true;
+ }
+ switch (declaration.kind) {
+ case ts.SyntaxKind.ImportClause:
+ case ts.SyntaxKind.ImportEqualsDeclaration:
+ return true;
+ case ts.SyntaxKind.ImportSpecifier:
+ return declaration.parent.kind === ts.SyntaxKind.NamedImports;
+ default:
+ return false;
+ }
+ }
+ if (!ts.isShorthandPropertyAssignment(node)) {
+ if (node.getChildCount() !== 0) {
+ return [null, null];
+ }
+ }
+ var symbol = checker.getSymbolAtLocation(node);
+ var importNode = null;
+ if (symbol && symbol.flags & ts.SymbolFlags.Alias && shouldSkipAlias(node, symbol.declarations[0])) {
+ var aliased = checker.getAliasedSymbol(symbol);
+ if (aliased.declarations) {
+ // We should mark the import as visited
+ importNode = symbol.declarations[0];
+ symbol = aliased;
+ }
+ }
+ if (symbol) {
+ // Because name in short-hand property assignment has two different meanings: property name and property value,
+ // using go-to-definition at such position should go to the variable declaration of the property value rather than
+ // go to the declaration of the property name (in this case stay at the same position). However, if go-to-definition
+ // is performed at the location of property access, we would like to go to definition of the property in the short-hand
+ // assignment. This case and others are handled by the following code.
+ if (node.parent.kind === ts.SyntaxKind.ShorthandPropertyAssignment) {
+ symbol = checker.getShorthandAssignmentValueSymbol(symbol.valueDeclaration);
+ }
+ // If the node is the name of a BindingElement within an ObjectBindingPattern instead of just returning the
+ // declaration the symbol (which is itself), we should try to get to the original type of the ObjectBindingPattern
+ // and return the property declaration for the referenced property.
+ // For example:
+ // import('./foo').then(({ b/*goto*/ar }) => undefined); => should get use to the declaration in file "./foo"
+ //
+ // function bar(onfulfilled: (value: T) => void) { //....}
+ // interface Test {
+ // pr/*destination*/op1: number
+ // }
+ // bar(({pr/*goto*/op1})=>{});
+ if (ts.isPropertyName(node) && ts.isBindingElement(node.parent) && ts.isObjectBindingPattern(node.parent.parent) &&
+ (node === (node.parent.propertyName || node.parent.name))) {
+ var type = checker.getTypeAtLocation(node.parent.parent);
+ if (type) {
+ var propSymbols = getPropertySymbolsFromType(type, node);
+ if (propSymbols) {
+ symbol = propSymbols[0];
+ }
+ }
+ }
+ // If the current location we want to find its definition is in an object literal, try to get the contextual type for the
+ // object literal, lookup the property symbol in the contextual type, and use this for goto-definition.
+ // For example
+ // interface Props{
+ // /*first*/prop1: number
+ // prop2: boolean
+ // }
+ // function Foo(arg: Props) {}
+ // Foo( { pr/*1*/op1: 10, prop2: false })
+ var element = getContainingObjectLiteralElement(node);
+ if (element && checker.getContextualType(element.parent)) {
+ var propertySymbols = getPropertySymbolsFromContextualType(checker, element);
+ if (propertySymbols) {
+ symbol = propertySymbols[0];
+ }
+ }
+ }
+ if (symbol && symbol.declarations) {
+ return [symbol, importNode];
+ }
+ return [null, null];
+}
+/** Get the token whose text contains the position */
+function getTokenAtPosition(sourceFile, position, allowPositionInLeadingTrivia, includeEndPosition) {
+ var current = sourceFile;
+ outer: while (true) {
+ // find the child that contains 'position'
+ for (var _i = 0, _a = current.getChildren(); _i < _a.length; _i++) {
+ var child = _a[_i];
+ var start = allowPositionInLeadingTrivia ? child.getFullStart() : child.getStart(sourceFile, /*includeJsDoc*/ true);
+ if (start > position) {
+ // If this child begins after position, then all subsequent children will as well.
+ break;
+ }
+ var end = child.getEnd();
+ if (position < end || (position === end && (child.kind === ts.SyntaxKind.EndOfFileToken || includeEndPosition))) {
+ current = child;
+ continue outer;
+ }
+ }
+ return current;
+ }
+}
diff --git a/build/lib/treeshaking.ts b/build/lib/treeshaking.ts
new file mode 100644
index 00000000000..0527fe3ebce
--- /dev/null
+++ b/build/lib/treeshaking.ts
@@ -0,0 +1,817 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+'use strict';
+
+import * as fs from 'fs';
+import * as path from 'path';
+import * as ts from 'typescript';
+
+const TYPESCRIPT_LIB_FOLDER = path.dirname(require.resolve('typescript/lib/lib.d.ts'));
+
+export const enum ShakeLevel {
+ Files = 0,
+ InnerFile = 1,
+ ClassMembers = 2
+}
+
+export interface ITreeShakingOptions {
+ /**
+ * The full path to the root where sources are.
+ */
+ sourcesRoot: string;
+ /**
+ * Module ids.
+ * e.g. `vs/editor/editor.main` or `index`
+ */
+ entryPoints: string[];
+ /**
+ * Inline usages.
+ */
+ inlineEntryPoints: string[];
+ /**
+ * TypeScript libs.
+ * e.g. `lib.d.ts`, `lib.es2015.collection.d.ts`
+ */
+ libs: string[];
+ /**
+ * TypeScript compiler options.
+ */
+ compilerOptions: ts.CompilerOptions;
+ /**
+ * The shake level to perform.
+ */
+ shakeLevel: ShakeLevel;
+ /**
+ * regex pattern to ignore certain imports e.g. `vs/css!` imports
+ */
+ importIgnorePattern: RegExp;
+
+ redirects: { [module: string]: string; };
+}
+
+export interface ITreeShakingResult {
+ [file: string]: string;
+}
+
+export function shake(options: ITreeShakingOptions): ITreeShakingResult {
+ const languageService = createTypeScriptLanguageService(options);
+
+ markNodes(languageService, options);
+
+ return generateResult(languageService, options.shakeLevel);
+}
+
+//#region Discovery, LanguageService & Setup
+function createTypeScriptLanguageService(options: ITreeShakingOptions): ts.LanguageService {
+ // Discover referenced files
+ const FILES = discoverAndReadFiles(options);
+
+ // Add fake usage files
+ options.inlineEntryPoints.forEach((inlineEntryPoint, index) => {
+ FILES[`inlineEntryPoint:${index}.ts`] = inlineEntryPoint;
+ });
+
+ // Resolve libs
+ const RESOLVED_LIBS: ILibMap = {};
+ options.libs.forEach((filename) => {
+ const filepath = path.join(TYPESCRIPT_LIB_FOLDER, filename);
+ RESOLVED_LIBS[`defaultLib:${filename}`] = fs.readFileSync(filepath).toString();
+ });
+
+ const host = new TypeScriptLanguageServiceHost(RESOLVED_LIBS, FILES, options.compilerOptions);
+ return ts.createLanguageService(host);
+}
+
+/**
+ * Read imports and follow them until all files have been handled
+ */
+function discoverAndReadFiles(options: ITreeShakingOptions): IFileMap {
+ const FILES: IFileMap = {};
+
+ const in_queue: { [module: string]: boolean; } = Object.create(null);
+ const queue: string[] = [];
+
+ const enqueue = (moduleId: string) => {
+ if (in_queue[moduleId]) {
+ return;
+ }
+ in_queue[moduleId] = true;
+ queue.push(moduleId);
+ };
+
+ options.entryPoints.forEach((entryPoint) => enqueue(entryPoint));
+
+ while (queue.length > 0) {
+ const moduleId = queue.shift();
+ const dts_filename = path.join(options.sourcesRoot, moduleId + '.d.ts');
+ if (fs.existsSync(dts_filename)) {
+ const dts_filecontents = fs.readFileSync(dts_filename).toString();
+ FILES[moduleId + '.d.ts'] = dts_filecontents;
+ continue;
+ }
+
+ let ts_filename: string;
+ if (options.redirects[moduleId]) {
+ ts_filename = path.join(options.sourcesRoot, options.redirects[moduleId] + '.ts');
+ } else {
+ ts_filename = path.join(options.sourcesRoot, moduleId + '.ts');
+ }
+ const ts_filecontents = fs.readFileSync(ts_filename).toString();
+ const info = ts.preProcessFile(ts_filecontents);
+ for (let i = info.importedFiles.length - 1; i >= 0; i--) {
+ const importedFileName = info.importedFiles[i].fileName;
+
+ if (options.importIgnorePattern.test(importedFileName)) {
+ // Ignore vs/css! imports
+ continue;
+ }
+
+ let importedModuleId = importedFileName;
+ if (/(^\.\/)|(^\.\.\/)/.test(importedModuleId)) {
+ importedModuleId = path.join(path.dirname(moduleId), importedModuleId);
+ }
+ enqueue(importedModuleId);
+ }
+
+ FILES[moduleId + '.ts'] = ts_filecontents;
+ }
+
+ return FILES;
+}
+
+interface ILibMap { [libName: string]: string; }
+interface IFileMap { [fileName: string]: string; }
+
+/**
+ * A TypeScript language service host
+ */
+class TypeScriptLanguageServiceHost implements ts.LanguageServiceHost {
+
+ private readonly _libs: ILibMap;
+ private readonly _files: IFileMap;
+ private readonly _compilerOptions: ts.CompilerOptions;
+
+ constructor(libs: ILibMap, files: IFileMap, compilerOptions: ts.CompilerOptions) {
+ this._libs = libs;
+ this._files = files;
+ this._compilerOptions = compilerOptions;
+ }
+
+ // --- language service host ---------------
+
+ getCompilationSettings(): ts.CompilerOptions {
+ return this._compilerOptions;
+ }
+ getScriptFileNames(): string[] {
+ return (
+ []
+ .concat(Object.keys(this._libs))
+ .concat(Object.keys(this._files))
+ );
+ }
+ getScriptVersion(fileName: string): string {
+ return '1';
+ }
+ getProjectVersion(): string {
+ return '1';
+ }
+ getScriptSnapshot(fileName: string): ts.IScriptSnapshot {
+ if (this._files.hasOwnProperty(fileName)) {
+ return ts.ScriptSnapshot.fromString(this._files[fileName]);
+ } else if (this._libs.hasOwnProperty(fileName)) {
+ return ts.ScriptSnapshot.fromString(this._libs[fileName]);
+ } else {
+ return ts.ScriptSnapshot.fromString('');
+ }
+ }
+ getScriptKind(fileName: string): ts.ScriptKind {
+ return ts.ScriptKind.TS;
+ }
+ getCurrentDirectory(): string {
+ return '';
+ }
+ getDefaultLibFileName(options: ts.CompilerOptions): string {
+ return 'defaultLib:lib.d.ts';
+ }
+ isDefaultLibFileName(fileName: string): boolean {
+ return fileName === this.getDefaultLibFileName(this._compilerOptions);
+ }
+}
+//#endregion
+
+//#region Tree Shaking
+
+const enum NodeColor {
+ White = 0,
+ Gray = 1,
+ Black = 2
+}
+
+function getColor(node: ts.Node): NodeColor {
+ return (node).$$$color || NodeColor.White;
+}
+function setColor(node: ts.Node, color: NodeColor): void {
+ (node).$$$color = color;
+}
+function nodeOrParentIsBlack(node: ts.Node): boolean {
+ while (node) {
+ const color = getColor(node);
+ if (color === NodeColor.Black) {
+ return true;
+ }
+ node = node.parent;
+ }
+ return false;
+}
+function nodeOrChildIsBlack(node: ts.Node): boolean {
+ if (getColor(node) === NodeColor.Black) {
+ return true;
+ }
+ for (const child of node.getChildren()) {
+ if (nodeOrChildIsBlack(child)) {
+ return true;
+ }
+ }
+ return false;
+}
+
+function markNodes(languageService: ts.LanguageService, options: ITreeShakingOptions) {
+ const program = languageService.getProgram();
+
+ if (options.shakeLevel === ShakeLevel.Files) {
+ // Mark all source files Black
+ program.getSourceFiles().forEach((sourceFile) => {
+ setColor(sourceFile, NodeColor.Black);
+ });
+ return;
+ }
+
+ const black_queue: ts.Node[] = [];
+ const gray_queue: ts.Node[] = [];
+ const sourceFilesLoaded: { [fileName: string]: boolean } = {};
+
+ function enqueueTopLevelModuleStatements(sourceFile: ts.SourceFile): void {
+
+ sourceFile.forEachChild((node: ts.Node) => {
+
+ if (ts.isImportDeclaration(node)) {
+ if (!node.importClause && ts.isStringLiteral(node.moduleSpecifier)) {
+ setColor(node, NodeColor.Black);
+ enqueueImport(node, node.moduleSpecifier.text);
+ }
+ return;
+ }
+
+ if (ts.isExportDeclaration(node)) {
+ if (ts.isStringLiteral(node.moduleSpecifier)) {
+ setColor(node, NodeColor.Black);
+ enqueueImport(node, node.moduleSpecifier.text);
+ }
+ return;
+ }
+
+ if (
+ ts.isExpressionStatement(node)
+ || ts.isIfStatement(node)
+ || ts.isIterationStatement(node, true)
+ || ts.isExportAssignment(node)
+ ) {
+ enqueue_black(node);
+ }
+
+ if (ts.isImportEqualsDeclaration(node)) {
+ if (/export/.test(node.getFullText(sourceFile))) {
+ // e.g. "export import Severity = BaseSeverity;"
+ enqueue_black(node);
+ }
+ }
+
+ });
+ }
+
+ function enqueue_gray(node: ts.Node): void {
+ if (nodeOrParentIsBlack(node) || getColor(node) === NodeColor.Gray) {
+ return;
+ }
+ setColor(node, NodeColor.Gray);
+ gray_queue.push(node);
+ }
+
+ function enqueue_black(node: ts.Node): void {
+ const previousColor = getColor(node);
+
+ if (previousColor === NodeColor.Black) {
+ return;
+ }
+
+ if (previousColor === NodeColor.Gray) {
+ // remove from gray queue
+ gray_queue.splice(gray_queue.indexOf(node), 1);
+ setColor(node, NodeColor.White);
+
+ // add to black queue
+ enqueue_black(node);
+
+ // // move from one queue to the other
+ // black_queue.push(node);
+ // setColor(node, NodeColor.Black);
+ return;
+ }
+
+ if (nodeOrParentIsBlack(node)) {
+ return;
+ }
+
+ const fileName = node.getSourceFile().fileName;
+ if (/^defaultLib:/.test(fileName) || /\.d\.ts$/.test(fileName)) {
+ setColor(node, NodeColor.Black);
+ return;
+ }
+
+ const sourceFile = node.getSourceFile();
+ if (!sourceFilesLoaded[sourceFile.fileName]) {
+ sourceFilesLoaded[sourceFile.fileName] = true;
+ enqueueTopLevelModuleStatements(sourceFile);
+ }
+
+ if (ts.isSourceFile(node)) {
+ return;
+ }
+
+ setColor(node, NodeColor.Black);
+ black_queue.push(node);
+
+ if (options.shakeLevel === ShakeLevel.ClassMembers && (ts.isMethodDeclaration(node) || ts.isMethodSignature(node) || ts.isPropertySignature(node) || ts.isGetAccessor(node) || ts.isSetAccessor(node))) {
+ const references = languageService.getReferencesAtPosition(node.getSourceFile().fileName, node.name.pos + node.name.getLeadingTriviaWidth());
+ if (references) {
+ for (let i = 0, len = references.length; i < len; i++) {
+ const reference = references[i];
+ const referenceSourceFile = program.getSourceFile(reference.fileName);
+ const referenceNode = getTokenAtPosition(referenceSourceFile, reference.textSpan.start, false, false);
+ if (
+ ts.isMethodDeclaration(referenceNode.parent)
+ || ts.isPropertyDeclaration(referenceNode.parent)
+ || ts.isGetAccessor(referenceNode.parent)
+ || ts.isSetAccessor(referenceNode.parent)
+ ) {
+ enqueue_gray(referenceNode.parent);
+ }
+ }
+ }
+ }
+ }
+
+ function enqueueFile(filename: string): void {
+ const sourceFile = program.getSourceFile(filename);
+ if (!sourceFile) {
+ console.warn(`Cannot find source file ${filename}`);
+ return;
+ }
+ enqueue_black(sourceFile);
+ }
+
+ function enqueueImport(node: ts.Node, importText: string): void {
+ if (options.importIgnorePattern.test(importText)) {
+ // this import should be ignored
+ return;
+ }
+
+ const nodeSourceFile = node.getSourceFile();
+ let fullPath: string;
+ if (/(^\.\/)|(^\.\.\/)/.test(importText)) {
+ fullPath = path.join(path.dirname(nodeSourceFile.fileName), importText) + '.ts';
+ } else {
+ fullPath = importText + '.ts';
+ }
+ enqueueFile(fullPath);
+ }
+
+ options.entryPoints.forEach(moduleId => enqueueFile(moduleId + '.ts'));
+ // Add fake usage files
+ options.inlineEntryPoints.forEach((_, index) => enqueueFile(`inlineEntryPoint:${index}.ts`));
+
+ let step = 0;
+
+ const checker = program.getTypeChecker();
+ while (black_queue.length > 0 || gray_queue.length > 0) {
+ ++step;
+ let node: ts.Node;
+
+ if (step % 100 === 0) {
+ console.log(`${step}/${step+black_queue.length+gray_queue.length} (${black_queue.length}, ${gray_queue.length})`);
+ }
+
+ if (black_queue.length === 0) {
+ for (let i = 0; i < gray_queue.length; i++) {
+ const node = gray_queue[i];
+ const nodeParent = node.parent;
+ if ((ts.isClassDeclaration(nodeParent) || ts.isInterfaceDeclaration(nodeParent)) && nodeOrChildIsBlack(nodeParent)) {
+ gray_queue.splice(i, 1);
+ black_queue.push(node);
+ setColor(node, NodeColor.Black);
+ i--;
+ }
+ }
+ }
+
+ if (black_queue.length > 0) {
+ node = black_queue.shift();
+ } else {
+ // only gray nodes remaining...
+ break;
+ }
+ const nodeSourceFile = node.getSourceFile();
+
+ const loop = (node: ts.Node) => {
+ const [symbol, symbolImportNode] = getRealNodeSymbol(checker, node);
+ if (symbolImportNode) {
+ setColor(symbolImportNode, NodeColor.Black);
+ }
+
+ if (symbol && !nodeIsInItsOwnDeclaration(nodeSourceFile, node, symbol)) {
+ for (let i = 0, len = symbol.declarations.length; i < len; i++) {
+ const declaration = symbol.declarations[i];
+ if (ts.isSourceFile(declaration)) {
+ // Do not enqueue full source files
+ // (they can be the declaration of a module import)
+ continue;
+ }
+
+ if (options.shakeLevel === ShakeLevel.ClassMembers && (ts.isClassDeclaration(declaration) || ts.isInterfaceDeclaration(declaration))) {
+ enqueue_black(declaration.name);
+
+ for (let j = 0; j < declaration.members.length; j++) {
+ const member = declaration.members[j];
+ const memberName = member.name ? member.name.getText() : null;
+ if (
+ ts.isConstructorDeclaration(member)
+ || ts.isConstructSignatureDeclaration(member)
+ || ts.isIndexSignatureDeclaration(member)
+ || ts.isCallSignatureDeclaration(member)
+ || memberName === 'toJSON'
+ || memberName === 'toString'
+ || memberName === 'dispose'// TODO: keeping all `dispose` methods
+ ) {
+ enqueue_black(member);
+ }
+ }
+
+ // queue the heritage clauses
+ if (declaration.heritageClauses) {
+ for (let heritageClause of declaration.heritageClauses) {
+ enqueue_black(heritageClause);
+ }
+ }
+ } else {
+ enqueue_black(declaration);
+ }
+ }
+ }
+ node.forEachChild(loop);
+ };
+ node.forEachChild(loop);
+ }
+}
+
+function nodeIsInItsOwnDeclaration(nodeSourceFile: ts.SourceFile, node: ts.Node, symbol: ts.Symbol): boolean {
+ for (let i = 0, len = symbol.declarations.length; i < len; i++) {
+ const declaration = symbol.declarations[i];
+ const declarationSourceFile = declaration.getSourceFile();
+
+ if (nodeSourceFile === declarationSourceFile) {
+ if (declaration.pos <= node.pos && node.end <= declaration.end) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+function generateResult(languageService: ts.LanguageService, shakeLevel: ShakeLevel): ITreeShakingResult {
+ const program = languageService.getProgram();
+
+ let result: ITreeShakingResult = {};
+ const writeFile = (filePath: string, contents: string): void => {
+ result[filePath] = contents;
+ };
+
+ program.getSourceFiles().forEach((sourceFile) => {
+ const fileName = sourceFile.fileName;
+ if (/^defaultLib:/.test(fileName)) {
+ return;
+ }
+ const destination = fileName;
+ if (/\.d\.ts$/.test(fileName)) {
+ if (nodeOrChildIsBlack(sourceFile)) {
+ writeFile(destination, sourceFile.text);
+ }
+ return;
+ }
+
+ let text = sourceFile.text;
+ let result = '';
+
+ function keep(node: ts.Node): void {
+ result += text.substring(node.pos, node.end);
+ }
+ function write(data: string): void {
+ result += data;
+ }
+
+ function writeMarkedNodes(node: ts.Node): void {
+ if (getColor(node) === NodeColor.Black) {
+ return keep(node);
+ }
+
+ // Always keep certain top-level statements
+ if (ts.isSourceFile(node.parent)) {
+ if (ts.isExpressionStatement(node) && ts.isStringLiteral(node.expression) && node.expression.text === 'use strict') {
+ return keep(node);
+ }
+
+ if (ts.isVariableStatement(node) && nodeOrChildIsBlack(node)) {
+ return keep(node);
+ }
+ }
+
+ // Keep the entire import in import * as X cases
+ if (ts.isImportDeclaration(node)) {
+ if (node.importClause && node.importClause.namedBindings) {
+ if (ts.isNamespaceImport(node.importClause.namedBindings)) {
+ if (getColor(node.importClause.namedBindings) === NodeColor.Black) {
+ return keep(node);
+ }
+ } else {
+ let survivingImports: string[] = [];
+ for (let i = 0; i < node.importClause.namedBindings.elements.length; i++) {
+ const importNode = node.importClause.namedBindings.elements[i];
+ if (getColor(importNode) === NodeColor.Black) {
+ survivingImports.push(importNode.getFullText(sourceFile));
+ }
+ }
+ const leadingTriviaWidth = node.getLeadingTriviaWidth();
+ const leadingTrivia = sourceFile.text.substr(node.pos, leadingTriviaWidth);
+ if (survivingImports.length > 0) {
+ if (node.importClause && getColor(node.importClause) === NodeColor.Black) {
+ return write(`${leadingTrivia}import ${node.importClause.name.text}, {${survivingImports.join(',')} } from${node.moduleSpecifier.getFullText(sourceFile)};`);
+ }
+ return write(`${leadingTrivia}import {${survivingImports.join(',')} } from${node.moduleSpecifier.getFullText(sourceFile)};`);
+ } else {
+ if (node.importClause && getColor(node.importClause) === NodeColor.Black) {
+ return write(`${leadingTrivia}import ${node.importClause.name.text} from${node.moduleSpecifier.getFullText(sourceFile)};`);
+ }
+ }
+ }
+ } else {
+ if (node.importClause && getColor(node.importClause) === NodeColor.Black) {
+ return keep(node);
+ }
+ }
+ }
+
+ if (shakeLevel === ShakeLevel.ClassMembers && (ts.isClassDeclaration(node) || ts.isInterfaceDeclaration(node)) && nodeOrChildIsBlack(node)) {
+ let toWrite = node.getFullText();
+ for (let i = node.members.length - 1; i >= 0; i--) {
+ const member = node.members[i];
+ if (getColor(member) === NodeColor.Black) {
+ // keep method
+ continue;
+ }
+ if (/^_(.*)Brand$/.test(member.name.getText())) {
+ // TODO: keep all members ending with `Brand`...
+ continue;
+ }
+
+ let pos = member.pos - node.pos;
+ let end = member.end - node.pos;
+ toWrite = toWrite.substring(0, pos) + toWrite.substring(end);
+ }
+ return write(toWrite);
+ }
+
+ if (ts.isFunctionDeclaration(node)) {
+ // Do not go inside functions if they haven't been marked
+ return;
+ }
+
+ node.forEachChild(writeMarkedNodes);
+ }
+
+ if (getColor(sourceFile) !== NodeColor.Black) {
+ if (!nodeOrChildIsBlack(sourceFile)) {
+ // none of the elements are reachable => don't write this file at all!
+ return;
+ }
+ sourceFile.forEachChild(writeMarkedNodes);
+ result += sourceFile.endOfFileToken.getFullText(sourceFile);
+ } else {
+ result = text;
+ }
+
+ writeFile(destination, result);
+ });
+
+ return result;
+}
+
+//#endregion
+
+//#region Utils
+
+/**
+ * Returns the node's symbol and the `import` node (if the symbol resolved from a different module)
+ */
+function getRealNodeSymbol(checker: ts.TypeChecker, node: ts.Node): [ts.Symbol, ts.Declaration] {
+ /**
+ * Returns the containing object literal property declaration given a possible name node, e.g. "a" in x = { "a": 1 }
+ */
+ /* @internal */
+ function getContainingObjectLiteralElement(node: ts.Node): ts.ObjectLiteralElement | undefined {
+ switch (node.kind) {
+ case ts.SyntaxKind.StringLiteral:
+ case ts.SyntaxKind.NumericLiteral:
+ if (node.parent.kind === ts.SyntaxKind.ComputedPropertyName) {
+ return ts.isObjectLiteralElement(node.parent.parent) ? node.parent.parent : undefined;
+ }
+ // falls through
+ case ts.SyntaxKind.Identifier:
+ return ts.isObjectLiteralElement(node.parent) &&
+ (node.parent.parent.kind === ts.SyntaxKind.ObjectLiteralExpression || node.parent.parent.kind === ts.SyntaxKind.JsxAttributes) &&
+ node.parent.name === node ? node.parent : undefined;
+ }
+ return undefined;
+ }
+
+ function getPropertySymbolsFromType(type: ts.Type, propName: ts.PropertyName) {
+ function getTextOfPropertyName(name: ts.PropertyName): string {
+
+ function isStringOrNumericLiteral(node: ts.Node): node is ts.StringLiteral | ts.NumericLiteral {
+ const kind = node.kind;
+ return kind === ts.SyntaxKind.StringLiteral
+ || kind === ts.SyntaxKind.NumericLiteral;
+ }
+
+ switch (name.kind) {
+ case ts.SyntaxKind.Identifier:
+ return name.text;
+ case ts.SyntaxKind.StringLiteral:
+ case ts.SyntaxKind.NumericLiteral:
+ return name.text;
+ case ts.SyntaxKind.ComputedPropertyName:
+ return isStringOrNumericLiteral(name.expression) ? name.expression.text : undefined!;
+ }
+ }
+
+ const name = getTextOfPropertyName(propName);
+ if (name && type) {
+ const result: ts.Symbol[] = [];
+ const symbol = type.getProperty(name);
+ if (type.flags & ts.TypeFlags.Union) {
+ for (const t of (type).types) {
+ const symbol = t.getProperty(name);
+ if (symbol) {
+ result.push(symbol);
+ }
+ }
+ return result;
+ }
+
+ if (symbol) {
+ result.push(symbol);
+ return result;
+ }
+ }
+ return undefined;
+ }
+
+ function getPropertySymbolsFromContextualType(typeChecker: ts.TypeChecker, node: ts.ObjectLiteralElement): ts.Symbol[] {
+ const objectLiteral = node.parent;
+ const contextualType = typeChecker.getContextualType(objectLiteral)!;
+ return getPropertySymbolsFromType(contextualType, node.name!)!;
+ }
+
+ // Go to the original declaration for cases:
+ //
+ // (1) when the aliased symbol was declared in the location(parent).
+ // (2) when the aliased symbol is originating from an import.
+ //
+ function shouldSkipAlias(node: ts.Node, declaration: ts.Node): boolean {
+ if (node.kind !== ts.SyntaxKind.Identifier) {
+ return false;
+ }
+ if (node.parent === declaration) {
+ return true;
+ }
+ switch (declaration.kind) {
+ case ts.SyntaxKind.ImportClause:
+ case ts.SyntaxKind.ImportEqualsDeclaration:
+ return true;
+ case ts.SyntaxKind.ImportSpecifier:
+ return declaration.parent.kind === ts.SyntaxKind.NamedImports;
+ default:
+ return false;
+ }
+ }
+
+ if (!ts.isShorthandPropertyAssignment(node)) {
+ if (node.getChildCount() !== 0) {
+ return [null, null];
+ }
+ }
+
+ let symbol = checker.getSymbolAtLocation(node);
+ let importNode: ts.Declaration = null;
+ if (symbol && symbol.flags & ts.SymbolFlags.Alias && shouldSkipAlias(node, symbol.declarations[0])) {
+ const aliased = checker.getAliasedSymbol(symbol);
+ if (aliased.declarations) {
+ // We should mark the import as visited
+ importNode = symbol.declarations[0];
+ symbol = aliased;
+ }
+ }
+
+ if (symbol) {
+ // Because name in short-hand property assignment has two different meanings: property name and property value,
+ // using go-to-definition at such position should go to the variable declaration of the property value rather than
+ // go to the declaration of the property name (in this case stay at the same position). However, if go-to-definition
+ // is performed at the location of property access, we would like to go to definition of the property in the short-hand
+ // assignment. This case and others are handled by the following code.
+ if (node.parent.kind === ts.SyntaxKind.ShorthandPropertyAssignment) {
+ symbol = checker.getShorthandAssignmentValueSymbol(symbol.valueDeclaration);
+ }
+
+ // If the node is the name of a BindingElement within an ObjectBindingPattern instead of just returning the
+ // declaration the symbol (which is itself), we should try to get to the original type of the ObjectBindingPattern
+ // and return the property declaration for the referenced property.
+ // For example:
+ // import('./foo').then(({ b/*goto*/ar }) => undefined); => should get use to the declaration in file "./foo"
+ //
+ // function bar(onfulfilled: (value: T) => void) { //....}
+ // interface Test {
+ // pr/*destination*/op1: number
+ // }
+ // bar(({pr/*goto*/op1})=>{});
+ if (ts.isPropertyName(node) && ts.isBindingElement(node.parent) && ts.isObjectBindingPattern(node.parent.parent) &&
+ (node === (node.parent.propertyName || node.parent.name))) {
+ const type = checker.getTypeAtLocation(node.parent.parent);
+ if (type) {
+ const propSymbols = getPropertySymbolsFromType(type, node);
+ if (propSymbols) {
+ symbol = propSymbols[0];
+ }
+ }
+ }
+
+ // If the current location we want to find its definition is in an object literal, try to get the contextual type for the
+ // object literal, lookup the property symbol in the contextual type, and use this for goto-definition.
+ // For example
+ // interface Props{
+ // /*first*/prop1: number
+ // prop2: boolean
+ // }
+ // function Foo(arg: Props) {}
+ // Foo( { pr/*1*/op1: 10, prop2: false })
+ const element = getContainingObjectLiteralElement(node);
+ if (element && checker.getContextualType(element.parent as ts.Expression)) {
+ const propertySymbols = getPropertySymbolsFromContextualType(checker, element);
+ if (propertySymbols) {
+ symbol = propertySymbols[0];
+ }
+ }
+ }
+
+ if (symbol && symbol.declarations) {
+ return [symbol, importNode];
+ }
+
+ return [null, null];
+}
+
+/** Get the token whose text contains the position */
+function getTokenAtPosition(sourceFile: ts.SourceFile, position: number, allowPositionInLeadingTrivia: boolean, includeEndPosition: boolean): ts.Node {
+ let current: ts.Node = sourceFile;
+ outer: while (true) {
+ // find the child that contains 'position'
+ for (const child of current.getChildren()) {
+ const start = allowPositionInLeadingTrivia ? child.getFullStart() : child.getStart(sourceFile, /*includeJsDoc*/ true);
+ if (start > position) {
+ // If this child begins after position, then all subsequent children will as well.
+ break;
+ }
+
+ const end = child.getEnd();
+ if (position < end || (position === end && (child.kind === ts.SyntaxKind.EndOfFileToken || includeEndPosition))) {
+ current = child;
+ continue outer;
+ }
+ }
+
+ return current;
+ }
+}
+
+//#endregion
diff --git a/build/lib/tslint/duplicateImportsRule.js b/build/lib/tslint/duplicateImportsRule.js
index 6acc9d728a6..1e06c4ab575 100644
--- a/build/lib/tslint/duplicateImportsRule.js
+++ b/build/lib/tslint/duplicateImportsRule.js
@@ -4,9 +4,12 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
var __extends = (this && this.__extends) || (function () {
- var extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ }
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
diff --git a/build/lib/tslint/importPatternsRule.js b/build/lib/tslint/importPatternsRule.js
index 2b1c5cf4b9c..1f03b696996 100644
--- a/build/lib/tslint/importPatternsRule.js
+++ b/build/lib/tslint/importPatternsRule.js
@@ -4,9 +4,12 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
var __extends = (this && this.__extends) || (function () {
- var extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ }
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
diff --git a/build/lib/tslint/layeringRule.js b/build/lib/tslint/layeringRule.js
index 2afb86e4238..7f35f6b5f5b 100644
--- a/build/lib/tslint/layeringRule.js
+++ b/build/lib/tslint/layeringRule.js
@@ -4,9 +4,12 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
var __extends = (this && this.__extends) || (function () {
- var extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ }
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
diff --git a/build/lib/tslint/noStandaloneEditorRule.js b/build/lib/tslint/noStandaloneEditorRule.js
index 4bb57bbc322..29ed841de12 100644
--- a/build/lib/tslint/noStandaloneEditorRule.js
+++ b/build/lib/tslint/noStandaloneEditorRule.js
@@ -4,9 +4,12 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
var __extends = (this && this.__extends) || (function () {
- var extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ }
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
diff --git a/build/lib/tslint/noUnexternalizedStringsRule.js b/build/lib/tslint/noUnexternalizedStringsRule.js
index d5ad583f442..f4ca615803a 100644
--- a/build/lib/tslint/noUnexternalizedStringsRule.js
+++ b/build/lib/tslint/noUnexternalizedStringsRule.js
@@ -4,9 +4,12 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
var __extends = (this && this.__extends) || (function () {
- var extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ }
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
diff --git a/build/lib/tslint/translationRemindRule.js b/build/lib/tslint/translationRemindRule.js
index ec56aff1535..fe716a38ebe 100644
--- a/build/lib/tslint/translationRemindRule.js
+++ b/build/lib/tslint/translationRemindRule.js
@@ -4,9 +4,12 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
var __extends = (this && this.__extends) || (function () {
- var extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ }
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
diff --git a/build/lib/util.js b/build/lib/util.js
index 1a2d40327cd..dd6f0b56992 100644
--- a/build/lib/util.js
+++ b/build/lib/util.js
@@ -14,7 +14,6 @@ var fs = require("fs");
var _rimraf = require("rimraf");
var git = require("./git");
var VinylFile = require("vinyl");
-var cp = require("child_process");
var NoCancellationToken = { isCancellationRequested: function () { return false; } };
function incremental(streamProvider, initial, supportsCancellation) {
var input = es.through();
@@ -211,62 +210,6 @@ function filter(fn) {
return result;
}
exports.filter = filter;
-function tagExists(tagName) {
- try {
- cp.execSync("git rev-parse " + tagName, { stdio: 'ignore' });
- return true;
- }
- catch (e) {
- return false;
- }
-}
-/**
- * Returns the version previous to the given version. Throws if a git tag for that version doesn't exist.
- * Given 1.17.2, return 1.17.1
- * 1.18.0 => 1.17.2. (or the highest 1.17.x)
- * 2.0.0 => 1.18.0 (or the highest 1.x)
- */
-function getPreviousVersion(versionStr, _tagExists) {
- if (_tagExists === void 0) { _tagExists = tagExists; }
- function getLatestTagFromBase(semverArr, componentToTest) {
- var baseVersion = semverArr.join('.');
- if (!_tagExists(baseVersion)) {
- throw new Error('Failed to find git tag for base version, ' + baseVersion);
- }
- var goodTag;
- do {
- goodTag = semverArr.join('.');
- semverArr[componentToTest]++;
- } while (_tagExists(semverArr.join('.')));
- return goodTag;
- }
- var semverArr = versionStringToNumberArray(versionStr);
- if (semverArr[2] > 0) {
- semverArr[2]--;
- var previous = semverArr.join('.');
- if (!_tagExists(previous)) {
- throw new Error('Failed to find git tag for previous version, ' + previous);
- }
- return previous;
- }
- else if (semverArr[1] > 0) {
- semverArr[1]--;
- return getLatestTagFromBase(semverArr, 2);
- }
- else {
- semverArr[0]--;
- // Find 1.x.0 for latest x
- var latestMinorVersion = getLatestTagFromBase(semverArr, 1);
- // Find 1.x.y for latest y
- return getLatestTagFromBase(versionStringToNumberArray(latestMinorVersion), 2);
- }
-}
-exports.getPreviousVersion = getPreviousVersion;
-function versionStringToNumberArray(versionStr) {
- return versionStr
- .split('.')
- .map(function (s) { return parseInt(s); });
-}
function versionStringToNumber(versionStr) {
var semverRegex = /(\d+)\.(\d+)\.(\d+)/;
var match = versionStr.match(semverRegex);
diff --git a/build/lib/util.ts b/build/lib/util.ts
index 9dcbbe72484..e1393b86c5b 100644
--- a/build/lib/util.ts
+++ b/build/lib/util.ts
@@ -17,7 +17,6 @@ import * as git from './git';
import * as VinylFile from 'vinyl';
import { ThroughStream } from 'through';
import * as sm from 'source-map';
-import * as cp from 'child_process';
export interface ICancellationToken {
isCancellationRequested(): boolean;
@@ -271,66 +270,6 @@ export function filter(fn: (data: any) => boolean): FilterStream {
return result;
}
-function tagExists(tagName: string): boolean {
- try {
- cp.execSync(`git rev-parse ${tagName}`, { stdio: 'ignore' });
- return true;
- } catch (e) {
- return false;
- }
-}
-
-/**
- * Returns the version previous to the given version. Throws if a git tag for that version doesn't exist.
- * Given 1.17.2, return 1.17.1
- * 1.18.0 => 1.17.2. (or the highest 1.17.x)
- * 2.0.0 => 1.18.0 (or the highest 1.x)
- */
-export function getPreviousVersion(versionStr: string, _tagExists = tagExists) {
- function getLatestTagFromBase(semverArr: number[], componentToTest: number): string {
- const baseVersion = semverArr.join('.');
- if (!_tagExists(baseVersion)) {
- throw new Error('Failed to find git tag for base version, ' + baseVersion);
- }
-
- let goodTag;
- do {
- goodTag = semverArr.join('.');
- semverArr[componentToTest]++;
- } while (_tagExists(semverArr.join('.')));
-
- return goodTag;
- }
-
- const semverArr = versionStringToNumberArray(versionStr);
- if (semverArr[2] > 0) {
- semverArr[2]--;
- const previous = semverArr.join('.');
- if (!_tagExists(previous)) {
- throw new Error('Failed to find git tag for previous version, ' + previous);
- }
-
- return previous;
- } else if (semverArr[1] > 0) {
- semverArr[1]--;
- return getLatestTagFromBase(semverArr, 2);
- } else {
- semverArr[0]--;
-
- // Find 1.x.0 for latest x
- const latestMinorVersion = getLatestTagFromBase(semverArr, 1);
-
- // Find 1.x.y for latest y
- return getLatestTagFromBase(versionStringToNumberArray(latestMinorVersion), 2);
- }
-}
-
-function versionStringToNumberArray(versionStr: string): number[] {
- return versionStr
- .split('.')
- .map(s => parseInt(s));
-}
-
export function versionStringToNumber(versionStr: string) {
const semverRegex = /(\d+)\.(\d+)\.(\d+)/;
const match = versionStr.match(semverRegex);
diff --git a/build/lib/watch/index.js b/build/lib/watch/index.js
index e1138b07f90..94f73cdd4a0 100644
--- a/build/lib/watch/index.js
+++ b/build/lib/watch/index.js
@@ -19,16 +19,6 @@ function handleDeletions() {
let watch = void 0;
-// Disabled due to https://github.com/Microsoft/vscode/issues/36214
-// if (!process.env['VSCODE_USE_LEGACY_WATCH']) {
-// try {
-// watch = require('./watch-nsfw');
-// } catch (err) {
-// console.warn('Could not load our cross platform file watcher: ' + err.toString());
-// console.warn('Falling back to our platform specific watcher...');
-// }
-// }
-
if (!watch) {
watch = process.platform === 'win32' ? require('./watch-win32') : require('gulp-watch');
}
diff --git a/build/lib/watch/package.json b/build/lib/watch/package.json
index b10e8ed2727..0d031340153 100644
--- a/build/lib/watch/package.json
+++ b/build/lib/watch/package.json
@@ -5,7 +5,6 @@
"author": "Microsoft ",
"private": true,
"devDependencies": {
- "gulp-watch": "^4.3.9",
- "nsfw": "^1.0.15"
+ "gulp-watch": "^4.3.9"
}
}
diff --git a/build/lib/watch/watch-nsfw.js b/build/lib/watch/watch-nsfw.js
deleted file mode 100644
index fb2b2758d02..00000000000
--- a/build/lib/watch/watch-nsfw.js
+++ /dev/null
@@ -1,94 +0,0 @@
-/*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-
-var nsfw = require('nsfw');
-var path = require('path');
-var fs = require('fs');
-var File = require('vinyl');
-var es = require('event-stream');
-var filter = require('gulp-filter');
-
-function toChangeType(type) {
- switch (type) {
- case 0: return 'add';
- case 1: return 'unlink';
- case 2: return 'change';
- }
-}
-
-function watch(root) {
- var result = es.through();
-
- function handleEvent(path, type) {
- if (/[/\\].git[/\\]/.test(path) || /[/\\]out[/\\]/.test(path)) {
- return; // filter as early as possible
- }
-
- var file = new File({
- path: path,
- base: root
- });
- //@ts-ignore
- file.event = type;
- result.emit('data', file);
- }
-
- nsfw(root, function (events) {
- for (var i = 0; i < events.length; i++) {
- var e = events[i];
- var changeType = e.action;
-
- if (changeType === 3 /* RENAMED */) {
- handleEvent(path.join(e.directory, e.oldFile), 'unlink');
- handleEvent(path.join(e.directory, e.newFile), 'add');
- } else {
- handleEvent(path.join(e.directory, e.file), toChangeType(changeType));
- }
- }
- }).then(function (watcher) {
- watcher.start();
- });
-
- return result;
-}
-
-var cache = Object.create(null);
-
-module.exports = function (pattern, options) {
- options = options || {};
-
- var cwd = path.normalize(options.cwd || process.cwd());
- var watcher = cache[cwd];
-
- if (!watcher) {
- watcher = cache[cwd] = watch(cwd);
- }
-
- var rebase = !options.base ? es.through() : es.mapSync(function (f) {
- f.base = options.base;
- return f;
- });
-
- return watcher
- .pipe(filter(['**', '!.git{,/**}'])) // ignore all things git
- .pipe(filter(pattern))
- .pipe(es.map(function (file, cb) {
- fs.stat(file.path, function (err, stat) {
- if (err && err.code === 'ENOENT') { return cb(null, file); }
- if (err) { return cb(); }
- if (!stat.isFile()) { return cb(); }
-
- fs.readFile(file.path, function (err, contents) {
- if (err && err.code === 'ENOENT') { return cb(null, file); }
- if (err) { return cb(); }
-
- file.contents = contents;
- file.stat = stat;
- cb(null, file);
- });
- });
- }))
- .pipe(rebase);
-};
\ No newline at end of file
diff --git a/build/lib/watch/yarn.lock b/build/lib/watch/yarn.lock
index 0b4d3f70bb7..4fb4b56c0f6 100644
--- a/build/lib/watch/yarn.lock
+++ b/build/lib/watch/yarn.lock
@@ -61,10 +61,6 @@ array-unique@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
-asap@~2.0.3:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
-
asn1@~0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
@@ -330,16 +326,6 @@ form-data@~2.1.1:
combined-stream "^1.0.5"
mime-types "^2.1.12"
-fs-extra@^0.26.5:
- version "0.26.7"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.26.7.tgz#9ae1fdd94897798edab76d0918cf42d0c3184fa9"
- dependencies:
- graceful-fs "^4.1.2"
- jsonfile "^2.1.0"
- klaw "^1.0.0"
- path-is-absolute "^1.0.0"
- rimraf "^2.2.8"
-
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
@@ -424,7 +410,7 @@ glogg@^1.0.0:
dependencies:
sparkles "^1.0.0"
-graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
+graceful-fs@^4.1.2:
version "4.1.11"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
@@ -649,12 +635,6 @@ json-stringify-safe@~5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
-jsonfile@^2.1.0:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
- optionalDependencies:
- graceful-fs "^4.1.6"
-
jsonify@~0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
@@ -680,12 +660,6 @@ kind-of@^4.0.0:
dependencies:
is-buffer "^1.1.5"
-klaw@^1.0.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
- optionalDependencies:
- graceful-fs "^4.1.9"
-
lodash._basecopy@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
@@ -736,14 +710,6 @@ lodash.isarray@^3.0.0:
version "3.0.4"
resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
-lodash.isinteger@^4.0.4:
- version "4.0.4"
- resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343"
-
-lodash.isundefined@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz#23ef3d9535565203a66cefd5b830f848911afb48"
-
lodash.keys@^3.0.0:
version "3.1.2"
resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
@@ -835,7 +801,7 @@ multipipe@^0.1.2:
dependencies:
duplexer2 "0.0.2"
-nan@^2.0.0, nan@^2.3.0:
+nan@^2.3.0:
version "2.7.0"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46"
@@ -855,12 +821,6 @@ node-pre-gyp@^0.6.39:
tar "^2.2.1"
tar-pack "^3.4.0"
-nodegit-promise@~4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/nodegit-promise/-/nodegit-promise-4.0.0.tgz#5722b184f2df7327161064a791d2e842c9167b34"
- dependencies:
- asap "~2.0.3"
-
nopt@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
@@ -883,16 +843,6 @@ npmlog@^4.0.2:
gauge "~2.7.3"
set-blocking "~2.0.0"
-nsfw@^1.0.15:
- version "1.0.16"
- resolved "https://registry.yarnpkg.com/nsfw/-/nsfw-1.0.16.tgz#78ba3e7f513b53d160c221b9018e0baf108614cc"
- dependencies:
- fs-extra "^0.26.5"
- lodash.isinteger "^4.0.4"
- lodash.isundefined "^3.0.1"
- nan "^2.0.0"
- promisify-node "^0.3.0"
-
number-is-nan@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
@@ -980,12 +930,6 @@ process-nextick-args@~1.0.6:
version "1.0.7"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
-promisify-node@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/promisify-node/-/promisify-node-0.3.0.tgz#b4b55acf90faa7d2b8b90ca396899086c03060cf"
- dependencies:
- nodegit-promise "~4.0.0"
-
punycode@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
@@ -1089,7 +1033,7 @@ request@2.81.0:
tunnel-agent "^0.6.0"
uuid "^3.0.0"
-rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1:
+rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1:
version "2.6.2"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
dependencies:
diff --git a/build/monaco/api.js b/build/monaco/api.js
index 74e9273f35e..ae4a0d26616 100644
--- a/build/monaco/api.js
+++ b/build/monaco/api.js
@@ -134,7 +134,25 @@ function getTopLevelDeclaration(sourceFile, typeName) {
function getNodeText(sourceFile, node) {
return sourceFile.getFullText().substring(node.pos, node.end);
}
-function getMassagedTopLevelDeclarationText(sourceFile, declaration) {
+function hasModifier(modifiers, kind) {
+ if (modifiers) {
+ for (var i = 0; i < modifiers.length; i++) {
+ var mod = modifiers[i];
+ if (mod.kind === kind) {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+function isStatic(member) {
+ return hasModifier(member.modifiers, ts.SyntaxKind.StaticKeyword);
+}
+function isDefaultExport(declaration) {
+ return (hasModifier(declaration.modifiers, ts.SyntaxKind.DefaultKeyword)
+ && hasModifier(declaration.modifiers, ts.SyntaxKind.ExportKeyword));
+}
+function getMassagedTopLevelDeclarationText(sourceFile, declaration, importName, usage) {
var result = getNodeText(sourceFile, declaration);
// if (result.indexOf('MonacoWorker') >= 0) {
// console.log('here!');
@@ -142,6 +160,18 @@ function getMassagedTopLevelDeclarationText(sourceFile, declaration) {
// }
if (declaration.kind === ts.SyntaxKind.InterfaceDeclaration || declaration.kind === ts.SyntaxKind.ClassDeclaration) {
var interfaceDeclaration = declaration;
+ var staticTypeName_1 = (isDefaultExport(interfaceDeclaration)
+ ? importName + ".default"
+ : importName + "." + declaration.name.text);
+ var instanceTypeName_1 = staticTypeName_1;
+ var typeParametersCnt = (interfaceDeclaration.typeParameters ? interfaceDeclaration.typeParameters.length : 0);
+ if (typeParametersCnt > 0) {
+ var arr = [];
+ for (var i = 0; i < typeParametersCnt; i++) {
+ arr.push('any');
+ }
+ instanceTypeName_1 = instanceTypeName_1 + "<" + arr.join(',') + ">";
+ }
var members = interfaceDeclaration.members;
members.forEach(function (member) {
try {
@@ -151,6 +181,15 @@ function getMassagedTopLevelDeclarationText(sourceFile, declaration) {
result = result.replace(memberText, '');
// console.log('AFTER: ', result);
}
+ else {
+ var memberName = member.name.text;
+ if (isStatic(member)) {
+ usage.push("a = " + staticTypeName_1 + "." + memberName + ";");
+ }
+ else {
+ usage.push("a = (<" + instanceTypeName_1 + ">b)." + memberName + ";");
+ }
+ }
}
catch (err) {
// life..
@@ -211,6 +250,16 @@ function generateDeclarationFile(out, inputFiles, recipe) {
var endl = /\r\n/.test(recipe) ? '\r\n' : '\n';
var lines = recipe.split(endl);
var result = [];
+ var usageCounter = 0;
+ var usageImports = [];
+ var usage = [];
+ usage.push("var a;");
+ usage.push("var b;");
+ var generateUsageImport = function (moduleId) {
+ var importName = 'm' + (++usageCounter);
+ usageImports.push("import * as " + importName + " from '" + moduleId.replace(/\.d\.ts$/, '') + "';");
+ return importName;
+ };
lines.forEach(function (line) {
var m1 = line.match(/^\s*#include\(([^;)]*)(;[^)]*)?\)\:(.*)$/);
if (m1) {
@@ -220,6 +269,7 @@ function generateDeclarationFile(out, inputFiles, recipe) {
if (!sourceFile_1) {
return;
}
+ var importName_1 = generateUsageImport(moduleId);
var replacer_1 = createReplacer(m1[2]);
var typeNames = m1[3].split(/,/);
typeNames.forEach(function (typeName) {
@@ -232,7 +282,7 @@ function generateDeclarationFile(out, inputFiles, recipe) {
logErr('Cannot find type ' + typeName);
return;
}
- result.push(replacer_1(getMassagedTopLevelDeclarationText(sourceFile_1, declaration)));
+ result.push(replacer_1(getMassagedTopLevelDeclarationText(sourceFile_1, declaration, importName_1, usage)));
});
return;
}
@@ -244,6 +294,7 @@ function generateDeclarationFile(out, inputFiles, recipe) {
if (!sourceFile_2) {
return;
}
+ var importName_2 = generateUsageImport(moduleId);
var replacer_2 = createReplacer(m2[2]);
var typeNames = m2[3].split(/,/);
var typesToExcludeMap_1 = {};
@@ -271,7 +322,7 @@ function generateDeclarationFile(out, inputFiles, recipe) {
}
}
}
- result.push(replacer_2(getMassagedTopLevelDeclarationText(sourceFile_2, declaration)));
+ result.push(replacer_2(getMassagedTopLevelDeclarationText(sourceFile_2, declaration, importName_2, usage)));
});
return;
}
@@ -282,9 +333,12 @@ function generateDeclarationFile(out, inputFiles, recipe) {
resultTxt = resultTxt.replace(/\bEvent, kind: ts.SyntaxKind): boolean {
+ if (modifiers) {
+ for (let i = 0; i < modifiers.length; i++) {
+ let mod = modifiers[i];
+ if (mod.kind === kind) {
+ return true;
+ }
+ }
+ }
+ return false;
+}
-function getMassagedTopLevelDeclarationText(sourceFile: ts.SourceFile, declaration: TSTopLevelDeclare): string {
+function isStatic(member: ts.ClassElement | ts.TypeElement): boolean {
+ return hasModifier(member.modifiers, ts.SyntaxKind.StaticKeyword);
+}
+
+function isDefaultExport(declaration: ts.InterfaceDeclaration | ts.ClassDeclaration): boolean {
+ return (
+ hasModifier(declaration.modifiers, ts.SyntaxKind.DefaultKeyword)
+ && hasModifier(declaration.modifiers, ts.SyntaxKind.ExportKeyword)
+ );
+}
+
+function getMassagedTopLevelDeclarationText(sourceFile: ts.SourceFile, declaration: TSTopLevelDeclare, importName: string, usage: string[]): string {
let result = getNodeText(sourceFile, declaration);
// if (result.indexOf('MonacoWorker') >= 0) {
// console.log('here!');
@@ -163,7 +185,23 @@ function getMassagedTopLevelDeclarationText(sourceFile: ts.SourceFile, declarati
if (declaration.kind === ts.SyntaxKind.InterfaceDeclaration || declaration.kind === ts.SyntaxKind.ClassDeclaration) {
let interfaceDeclaration = declaration;
- let members: ts.NodeArray = interfaceDeclaration.members;
+ const staticTypeName = (
+ isDefaultExport(interfaceDeclaration)
+ ? `${importName}.default`
+ : `${importName}.${declaration.name.text}`
+ );
+
+ let instanceTypeName = staticTypeName;
+ const typeParametersCnt = (interfaceDeclaration.typeParameters ? interfaceDeclaration.typeParameters.length : 0);
+ if (typeParametersCnt > 0) {
+ let arr: string[] = [];
+ for (let i = 0; i < typeParametersCnt; i++) {
+ arr.push('any');
+ }
+ instanceTypeName = `${instanceTypeName}<${arr.join(',')}>`;
+ }
+
+ const members: ts.NodeArray = interfaceDeclaration.members;
members.forEach((member) => {
try {
let memberText = getNodeText(sourceFile, member);
@@ -171,6 +209,13 @@ function getMassagedTopLevelDeclarationText(sourceFile: ts.SourceFile, declarati
// console.log('BEFORE: ', result);
result = result.replace(memberText, '');
// console.log('AFTER: ', result);
+ } else {
+ const memberName = (member.name).text;
+ if (isStatic(member)) {
+ usage.push(`a = ${staticTypeName}.${memberName};`);
+ } else {
+ usage.push(`a = (<${instanceTypeName}>b).${memberName};`);
+ }
}
} catch (err) {
// life..
@@ -237,11 +282,24 @@ function createReplacer(data: string): (str: string) => string {
};
}
-function generateDeclarationFile(out: string, inputFiles: { [file: string]: string; }, recipe: string): string {
+function generateDeclarationFile(out: string, inputFiles: { [file: string]: string; }, recipe: string): [string, string] {
const endl = /\r\n/.test(recipe) ? '\r\n' : '\n';
let lines = recipe.split(endl);
- let result = [];
+ let result: string[] = [];
+
+ let usageCounter = 0;
+ let usageImports: string[] = [];
+ let usage: string[] = [];
+
+ usage.push(`var a;`);
+ usage.push(`var b;`);
+
+ const generateUsageImport = (moduleId: string) => {
+ let importName = 'm' + (++usageCounter);
+ usageImports.push(`import * as ${importName} from '${moduleId.replace(/\.d\.ts$/, '')}';`);
+ return importName;
+ };
lines.forEach(line => {
@@ -254,6 +312,8 @@ function generateDeclarationFile(out: string, inputFiles: { [file: string]: stri
return;
}
+ const importName = generateUsageImport(moduleId);
+
let replacer = createReplacer(m1[2]);
let typeNames = m1[3].split(/,/);
@@ -267,7 +327,7 @@ function generateDeclarationFile(out: string, inputFiles: { [file: string]: stri
logErr('Cannot find type ' + typeName);
return;
}
- result.push(replacer(getMassagedTopLevelDeclarationText(sourceFile, declaration)));
+ result.push(replacer(getMassagedTopLevelDeclarationText(sourceFile, declaration, importName, usage)));
});
return;
}
@@ -281,6 +341,8 @@ function generateDeclarationFile(out: string, inputFiles: { [file: string]: stri
return;
}
+ const importName = generateUsageImport(moduleId);
+
let replacer = createReplacer(m2[2]);
let typeNames = m2[3].split(/,/);
@@ -309,7 +371,7 @@ function generateDeclarationFile(out: string, inputFiles: { [file: string]: stri
}
}
}
- result.push(replacer(getMassagedTopLevelDeclarationText(sourceFile, declaration)));
+ result.push(replacer(getMassagedTopLevelDeclarationText(sourceFile, declaration, importName, usage)));
});
return;
}
@@ -324,10 +386,13 @@ function generateDeclarationFile(out: string, inputFiles: { [file: string]: stri
resultTxt = format(resultTxt);
- return resultTxt;
+ return [
+ resultTxt,
+ `${usageImports.join('\n')}\n\n${usage.join('\n')}`
+ ];
}
-export function getFilesToWatch(out: string): string[] {
+function getIncludesInRecipe(): string[] {
let recipe = fs.readFileSync(RECIPE_PATH).toString();
let lines = recipe.split(/\r\n|\n|\r/);
let result = [];
@@ -337,14 +402,14 @@ export function getFilesToWatch(out: string): string[] {
let m1 = line.match(/^\s*#include\(([^;)]*)(;[^)]*)?\)\:(.*)$/);
if (m1) {
let moduleId = m1[1];
- result.push(moduleIdToPath(out, moduleId));
+ result.push(moduleId);
return;
}
let m2 = line.match(/^\s*#includeAll\(([^;)]*)(;[^)]*)?\)\:(.*)$/);
if (m2) {
let moduleId = m2[1];
- result.push(moduleIdToPath(out, moduleId));
+ result.push(moduleId);
return;
}
});
@@ -352,8 +417,13 @@ export function getFilesToWatch(out: string): string[] {
return result;
}
+export function getFilesToWatch(out: string): string[] {
+ return getIncludesInRecipe().map((moduleId) => moduleIdToPath(out, moduleId));
+}
+
export interface IMonacoDeclarationResult {
content: string;
+ usageContent: string;
filePath: string;
isTheSame: boolean;
}
@@ -363,7 +433,7 @@ export function run(out: string, inputFiles: { [file: string]: string; }): IMona
SOURCE_FILE_MAP = {};
let recipe = fs.readFileSync(RECIPE_PATH).toString();
- let result = generateDeclarationFile(out, inputFiles, recipe);
+ let [result, usageContent] = generateDeclarationFile(out, inputFiles, recipe);
let currentContent = fs.readFileSync(DECLARATION_PATH).toString();
log('Finished monaco.d.ts generation');
@@ -374,6 +444,7 @@ export function run(out: string, inputFiles: { [file: string]: string; }): IMona
return {
content: result,
+ usageContent: usageContent,
filePath: DECLARATION_PATH,
isTheSame
};
@@ -382,3 +453,96 @@ export function run(out: string, inputFiles: { [file: string]: string; }): IMona
export function complainErrors() {
logErr('Not running monaco.d.ts generation due to compile errors');
}
+
+
+
+interface ILibMap { [libName: string]: string; }
+interface IFileMap { [fileName: string]: string; }
+
+class TypeScriptLanguageServiceHost implements ts.LanguageServiceHost {
+
+ private readonly _libs: ILibMap;
+ private readonly _files: IFileMap;
+ private readonly _compilerOptions: ts.CompilerOptions;
+
+ constructor(libs: ILibMap, files: IFileMap, compilerOptions: ts.CompilerOptions) {
+ this._libs = libs;
+ this._files = files;
+ this._compilerOptions = compilerOptions;
+ }
+
+ // --- language service host ---------------
+
+ getCompilationSettings(): ts.CompilerOptions {
+ return this._compilerOptions;
+ }
+ getScriptFileNames(): string[] {
+ return (
+ []
+ .concat(Object.keys(this._libs))
+ .concat(Object.keys(this._files))
+ );
+ }
+ getScriptVersion(fileName: string): string {
+ return '1';
+ }
+ getProjectVersion(): string {
+ return '1';
+ }
+ getScriptSnapshot(fileName: string): ts.IScriptSnapshot {
+ if (this._files.hasOwnProperty(fileName)) {
+ return ts.ScriptSnapshot.fromString(this._files[fileName]);
+ } else if (this._libs.hasOwnProperty(fileName)) {
+ return ts.ScriptSnapshot.fromString(this._libs[fileName]);
+ } else {
+ return ts.ScriptSnapshot.fromString('');
+ }
+ }
+ getScriptKind(fileName: string): ts.ScriptKind {
+ return ts.ScriptKind.TS;
+ }
+ getCurrentDirectory(): string {
+ return '';
+ }
+ getDefaultLibFileName(options: ts.CompilerOptions): string {
+ return 'defaultLib:es5';
+ }
+ isDefaultLibFileName(fileName: string): boolean {
+ return fileName === this.getDefaultLibFileName(this._compilerOptions);
+ }
+}
+
+export function execute(): IMonacoDeclarationResult {
+
+ const OUTPUT_FILES: { [file: string]: string; } = {};
+ const SRC_FILES: IFileMap = {};
+ const SRC_FILE_TO_EXPECTED_NAME: { [filename: string]: string; } = {};
+ getIncludesInRecipe().forEach((moduleId) => {
+ if (/\.d\.ts$/.test(moduleId)) {
+ let fileName = path.join(SRC, moduleId);
+ OUTPUT_FILES[moduleIdToPath('src', moduleId)] = fs.readFileSync(fileName).toString();
+ return;
+ }
+
+ let fileName = path.join(SRC, moduleId) + '.ts';
+ SRC_FILES[fileName] = fs.readFileSync(fileName).toString();
+ SRC_FILE_TO_EXPECTED_NAME[fileName] = moduleIdToPath('src', moduleId);
+ });
+
+ const languageService = ts.createLanguageService(new TypeScriptLanguageServiceHost({}, SRC_FILES, {}));
+
+ var t1 = Date.now();
+ Object.keys(SRC_FILES).forEach((fileName) => {
+ var t = Date.now();
+ const emitOutput = languageService.getEmitOutput(fileName, true);
+ OUTPUT_FILES[SRC_FILE_TO_EXPECTED_NAME[fileName]] = emitOutput.outputFiles[0].text;
+ // console.log(`Generating .d.ts for ${fileName} took ${Date.now() - t} ms`);
+ });
+ console.log(`Generating .d.ts took ${Date.now() - t1} ms`);
+
+ // console.log(result.filePath);
+ // fs.writeFileSync(result.filePath, result.content.replace(/\r\n/gm, '\n'));
+ // fs.writeFileSync(path.join(SRC, 'user.ts'), result.usageContent.replace(/\r\n/gm, '\n'));
+
+ return run('src', OUTPUT_FILES);
+}
diff --git a/build/monaco/monaco.d.ts.recipe b/build/monaco/monaco.d.ts.recipe
index 218d4cdf8f5..d1b4e5d873a 100644
--- a/build/monaco/monaco.d.ts.recipe
+++ b/build/monaco/monaco.d.ts.recipe
@@ -25,13 +25,6 @@ declare namespace monaco {
dispose(): void;
}
- export enum Severity {
- Ignore = 0,
- Info = 1,
- Warning = 2,
- Error = 3,
- }
-
export enum MarkerTag {
Unnecessary = 1,
}
@@ -43,8 +36,7 @@ declare namespace monaco {
Error = 8,
}
-
-#include(vs/base/common/winjs.base.d.ts): TValueCallback, ProgressCallback, Promise
+#include(vs/base/common/winjs.base.d.ts): Promise
#include(vs/base/common/cancellation): CancellationTokenSource, CancellationToken
#include(vs/base/common/uri): URI, UriComponents
#include(vs/editor/common/standalone/standaloneBase): KeyCode, KeyMod
diff --git a/build/monaco/monaco.usage.recipe b/build/monaco/monaco.usage.recipe
new file mode 100644
index 00000000000..beaad500aad
--- /dev/null
+++ b/build/monaco/monaco.usage.recipe
@@ -0,0 +1,81 @@
+
+// This file is adding references to various symbols which should not be removed via tree shaking
+
+import { ServiceIdentifier } from 'vs/platform/instantiation/common/instantiation';
+import { IContextViewService } from 'vs/platform/contextview/browser/contextView';
+import { IHighlight } from 'vs/base/parts/quickopen/browser/quickOpenModel';
+import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace';
+import { IEnvironmentService } from 'vs/platform/environment/common/environment';
+import { CountBadge } from 'vs/base/browser/ui/countBadge/countBadge';
+import { SimpleWorkerClient, create as create1 } from 'vs/base/common/worker/simpleWorker';
+import { create as create2 } from 'vs/editor/common/services/editorSimpleWorker';
+import { QuickOpenWidget } from 'vs/base/parts/quickopen/browser/quickOpenWidget';
+import { SyncDescriptor0, SyncDescriptor1, SyncDescriptor2, SyncDescriptor3, SyncDescriptor4, SyncDescriptor5, SyncDescriptor6, SyncDescriptor7, SyncDescriptor8 } from 'vs/platform/instantiation/common/descriptors';
+import { PolyfillPromise } from 'vs/base/common/winjs.polyfill.promise';
+import { DiffNavigator } from 'vs/editor/browser/widget/diffNavigator';
+import * as editorAPI from 'vs/editor/editor.api';
+
+(function () {
+ var a: any;
+ var b: any;
+ a = (b).layout; // IContextViewProvider
+ a = (b).getWorkspaceFolder; // IWorkspaceFolderProvider
+ a = (b).getWorkspace; // IWorkspaceFolderProvider
+ a = (b).style; // IThemable
+ a = (b).style; // IThemable
+ a = (b).userHome; // IUserHomeProvider
+ a = (b).previous; // IDiffNavigator
+ a = (>b).type;
+ a = (b).start;
+ a = (b).end;
+ a = (>b).getProxyObject; // IWorkerClient
+ a = create1;
+ a = create2;
+
+ // promise polyfill
+ a = PolyfillPromise.all;
+ a = PolyfillPromise.race;
+ a = PolyfillPromise.resolve;
+ a = PolyfillPromise.reject;
+ a = (b).then;
+ a = (b).catch;
+
+ // injection madness
+ a = (>b).ctor;
+ a = (>b).bind;
+ a = (>b).ctor;
+ a = (>b).bind;
+ a = (>b).ctor;
+ a = (>b).bind;
+ a = (>b).ctor;
+ a = (>b).bind;
+ a = (>b).ctor;
+ a = (>b).bind;
+ a = (>b).ctor;
+ a = (>b).bind;
+ a = (>b).ctor;
+ a = (>b).bind;
+ a = (>b).ctor;
+ a = (>b).bind;
+ a = (>b).ctor;
+ a = (>b).bind;
+ a = (>b).ctor;
+ a = (>b).bind;
+
+ // exported API
+ a = editorAPI.CancellationTokenSource;
+ a = editorAPI.Emitter;
+ a = editorAPI.KeyCode;
+ a = editorAPI.KeyMod;
+ a = editorAPI.Position;
+ a = editorAPI.Range;
+ a = editorAPI.Selection;
+ a = editorAPI.SelectionDirection;
+ a = editorAPI.MarkerSeverity;
+ a = editorAPI.MarkerTag;
+ a = editorAPI.Promise;
+ a = editorAPI.Uri;
+ a = editorAPI.Token;
+ a = editorAPI.editor;
+ a = editorAPI.languages;
+})();
diff --git a/build/monaco/package.json b/build/monaco/package.json
index 256ca1ff534..efd919085b2 100644
--- a/build/monaco/package.json
+++ b/build/monaco/package.json
@@ -1,7 +1,7 @@
{
"name": "monaco-editor-core",
"private": true,
- "version": "0.12.0",
+ "version": "0.14.3",
"description": "A browser based code editor",
"author": "Microsoft Corporation",
"license": "MIT",
diff --git a/build/npm/update-localization-extension.js b/build/npm/update-localization-extension.js
index 985fbd28cb7..eebf63ed330 100644
--- a/build/npm/update-localization-extension.js
+++ b/build/npm/update-localization-extension.js
@@ -43,7 +43,12 @@ function update(idOrPath) {
let apiToken = process.env.TRANSIFEX_API_TOKEN;
let languageId = localization.transifexId || localization.languageId;
let translationDataFolder = path.join(locExtFolder, 'translations');
-
+ if (languageId === "zh-cn") {
+ languageId = "zh-hans";
+ }
+ if (languageId === "zh-tw") {
+ languageId = "zh-hant";
+ }
if (fs.existsSync(translationDataFolder) && fs.existsSync(path.join(translationDataFolder, 'main.i18n.json'))) {
console.log('Clearing \'' + translationDataFolder + '\'...');
rimraf.sync(translationDataFolder);
diff --git a/build/package.json b/build/package.json
index 8f89abbc23d..9dd100c7361 100644
--- a/build/package.json
+++ b/build/package.json
@@ -14,7 +14,7 @@
"documentdb": "1.13.0",
"mime": "^1.3.4",
"minimist": "^1.2.0",
- "typescript": "2.9.1",
+ "typescript": "3.0.3",
"xml2js": "^0.4.17",
"github-releases": "^0.4.1",
"request": "^2.85.0"
diff --git a/build/tfs/continuous-build.yml b/build/tfs/continuous-build.yml
index 0bcd1e7cb2e..a1d4be71335 100644
--- a/build/tfs/continuous-build.yml
+++ b/build/tfs/continuous-build.yml
@@ -1,141 +1,17 @@
-phases:
-- phase: Windows
- queue: Hosted VS2017
+jobs:
+- job: Windows
+ pool:
+ vmImage: VS2017-Win2016
steps:
- - task: NodeTool@0
- inputs:
- versionSpec: "8.9.1"
- - task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
- inputs:
- versionSpec: "1.3.2"
- - task: geeklearningio.gl-vsts-tasks-yarn.yarn-task.Yarn@2
- displayName: Yarn
- inputs:
- customRegistry: useFeed
- customFeed: 'd28dd4e6-8e53-406e-8887-22f7c4dffd0c'
- # - task: npmAuthenticate@0
- # displayName: NPM Authenticate
- - powershell: |
- yarn gulp electron
- displayName: Download Electron
- - powershell: |
- yarn gulp hygiene
- displayName: Run Hygiene Checks
- - powershell: |
- yarn check-monaco-editor-compilation
- displayName: Run Monaco Editor Checks
- - powershell: |
- yarn compile
- displayName: Compile Sources
- - powershell: |
- yarn download-builtin-extensions
- displayName: Download Built-in Extensions
- - powershell: |
- .\scripts\test.bat --tfs
- displayName: Run Unit Tests
- - powershell: |
- .\scripts\test-integration.bat
- displayName: Run Integration Tests
- - powershell: |
- yarn smoketest --screenshots "$(Build.ArtifactStagingDirectory)\artifacts" --log "$(Build.ArtifactStagingDirectory)\artifacts\smoketest.log"
- displayName: Run Smoke Tests
- - task: PublishBuildArtifacts@1
- inputs:
- PathtoPublish: '$(Build.ArtifactStagingDirectory)/artifacts'
- ArtifactName: build-artifacts-win32
- publishLocation: Container
- continueOnError: true
- condition: succeededOrFailed()
+ - template: win32/continuous-build-win32.yml
-- phase: Linux
- queue: Hosted Linux Preview
+- job: Linux
+ pool: Hosted Linux Preview
steps:
- - script: |
- set -e
- apt-get update
- apt-get install -y libxkbfile-dev pkg-config libsecret-1-dev libxss1 libgconf-2-4 dbus xvfb libgtk-3-0
- cp build/tfs/linux/x64/xvfb.init /etc/init.d/xvfb
- chmod +x /etc/init.d/xvfb
- update-rc.d xvfb defaults
- ln -sf /bin/dbus-daemon /usr/bin/dbus-daemon
- service xvfb start
- service dbus start
- - task: NodeTool@0
- inputs:
- versionSpec: "8.9.1"
- - task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
- inputs:
- versionSpec: "1.3.2"
- - task: geeklearningio.gl-vsts-tasks-yarn.yarn-task.Yarn@2
- displayName: Yarn
- inputs:
- customRegistry: useFeed
- customFeed: 'd28dd4e6-8e53-406e-8887-22f7c4dffd0c'
- # - task: npmAuthenticate@0
- # displayName: NPM Authenticate
- - script: |
- yarn gulp electron-x64
- displayName: Download Electron
- - script: |
- yarn gulp hygiene
- displayName: Run Hygiene Checks
- - script: |
- yarn check-monaco-editor-compilation
- displayName: Run Monaco Editor Checks
- - script: |
- yarn compile
- displayName: Compile Sources
- - script: |
- yarn download-builtin-extensions
- displayName: Download Built-in Extensions
- - script: |
- DISPLAY=:10 ./scripts/test.sh --tfs
- displayName: Run Unit Tests
+ - template: linux/continuous-build-linux.yml
-- phase: macOS
- queue: Hosted macOS Preview
+- job: macOS
+ pool:
+ vmImage: macOS 10.13
steps:
- - task: NodeTool@0
- inputs:
- versionSpec: "8.9.1"
- - task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
- inputs:
- versionSpec: "1.3.2"
- - task: geeklearningio.gl-vsts-tasks-yarn.yarn-task.Yarn@2
- displayName: Yarn
- inputs:
- customRegistry: useFeed
- customFeed: 'd28dd4e6-8e53-406e-8887-22f7c4dffd0c'
- # - task: npmAuthenticate@0
- # displayName: NPM Authenticate
- - script: |
- yarn gulp electron-x64
- displayName: Download Electron
- - script: |
- yarn gulp hygiene
- displayName: Run Hygiene Checks
- - script: |
- yarn check-monaco-editor-compilation
- displayName: Run Monaco Editor Checks
- - script: |
- yarn compile
- displayName: Compile Sources
- - script: |
- yarn download-builtin-extensions
- displayName: Download Built-in Extensions
- - script: |
- ./scripts/test.sh --tfs
- displayName: Run Unit Tests
- - script: |
- ./scripts/test-integration.sh
- displayName: Run Integration Tests
- - script: |
- yarn smoketest --screenshots "$(Build.ArtifactStagingDirectory)/artifacts" --log "$(Build.ArtifactStagingDirectory)/artifacts/smoketest.log"
- displayName: Run Smoke Tests
- - task: PublishBuildArtifacts@1
- inputs:
- PathtoPublish: '$(Build.ArtifactStagingDirectory)/artifacts'
- ArtifactName: build-artifacts-darwin
- publishLocation: Container
- continueOnError: true
- condition: succeededOrFailed()
\ No newline at end of file
+ - template: darwin/continuous-build-darwin.yml
\ No newline at end of file
diff --git a/build/tfs/darwin/continuous-build-darwin.yml b/build/tfs/darwin/continuous-build-darwin.yml
new file mode 100644
index 00000000000..9d3f6254cd6
--- /dev/null
+++ b/build/tfs/darwin/continuous-build-darwin.yml
@@ -0,0 +1,48 @@
+steps:
+- task: NodeTool@0
+ inputs:
+ versionSpec: "8.9.1"
+- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
+ inputs:
+ versionSpec: "1.9.4"
+- script: |
+ yarn
+ displayName: Install Dependencies
+- script: |
+ yarn gulp electron-x64
+ displayName: Download Electron
+- script: |
+ yarn gulp hygiene
+ displayName: Run Hygiene Checks
+- script: |
+ yarn monaco-compile-check
+ displayName: Run Monaco Editor Checks
+- script: |
+ yarn compile
+ displayName: Compile Sources
+- script: |
+ yarn download-builtin-extensions
+ displayName: Download Built-in Extensions
+- script: |
+ ./scripts/test.sh --tfs "Unit Tests"
+ displayName: Run Unit Tests
+- script: |
+ ./scripts/test-integration.sh --tfs "Integration Tests"
+ displayName: Run Integration Tests
+- script: |
+ yarn smoketest --screenshots "$(Build.ArtifactStagingDirectory)/artifacts" --log "$(Build.ArtifactStagingDirectory)/artifacts/smoketest.log"
+ displayName: Run Smoke Tests
+ continueOnError: true
+- task: PublishBuildArtifacts@1
+ displayName: Publish Smoketest Artifacts
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)/artifacts'
+ ArtifactName: build-artifacts-darwin
+ publishLocation: Container
+ condition: eq(variables['System.PullRequest.IsFork'], 'False')
+- task: PublishTestResults@2
+ displayName: Publish Tests Results
+ inputs:
+ testResultsFiles: '*-results.xml'
+ searchFolder: '$(Build.ArtifactStagingDirectory)/test-results'
+ condition: succeededOrFailed()
\ No newline at end of file
diff --git a/build/tfs/darwin/enqueue.js b/build/tfs/darwin/enqueue.js
index 3b870657134..2de6022e1fe 100644
--- a/build/tfs/darwin/enqueue.js
+++ b/build/tfs/darwin/enqueue.js
@@ -18,8 +18,8 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
- if (f = 1, y && (t = y[op[0] & 2 ? "return" : op[0] ? "throw" : "next"]) && !(t = t.call(y, op[1])).done) return t;
- if (y = 0, t) op = [0, t.value];
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
+ if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
diff --git a/build/tfs/darwin/product-build-darwin.yml b/build/tfs/darwin/product-build-darwin.yml
new file mode 100644
index 00000000000..b783a2b5270
--- /dev/null
+++ b/build/tfs/darwin/product-build-darwin.yml
@@ -0,0 +1,86 @@
+steps:
+- task: NodeTool@0
+ inputs:
+ versionSpec: "8.9.1"
+
+- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
+ inputs:
+ versionSpec: "1.9.4"
+
+- script: |
+ set -e
+ echo "machine monacotools.visualstudio.com password $(VSO_PAT)" > ~/.netrc
+ yarn
+ yarn gulp -- hygiene
+ yarn monaco-compile-check
+ VSCODE_MIXIN_PASSWORD="$(VSCODE_MIXIN_PASSWORD)" yarn gulp -- mixin
+ node build/tfs/common/installDistro.js
+ node build/lib/builtInExtensions.js
+ displayName: Prepare build
+
+- script: |
+ set -e
+ VSCODE_MIXIN_PASSWORD="$(VSCODE_MIXIN_PASSWORD)" \
+ AZURE_STORAGE_ACCESS_KEY="$(AZURE_STORAGE_ACCESS_KEY)" \
+ yarn gulp -- vscode-darwin-min upload-vscode-sourcemaps
+ displayName: Build
+
+- script: |
+ set -e
+ ./scripts/test.sh --build --tfs "Unit Tests"
+ # APP_NAME="`ls $(agent.builddirectory)/VSCode-darwin | head -n 1`"
+ # yarn smoketest -- --build "$(agent.builddirectory)/VSCode-darwin/$APP_NAME"
+ displayName: Run unit tests
+
+- script: |
+ set -e
+ pushd ../VSCode-darwin && zip -r -X -y ../VSCode-darwin.zip * && popd
+ displayName: Archive build
+
+- task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@1
+ inputs:
+ ConnectedServiceName: 'ESRP CodeSign'
+ FolderPath: '$(agent.builddirectory)'
+ Pattern: 'VSCode-darwin.zip'
+ signConfigType: inlineSignParams
+ inlineOperation: |
+ [
+ {
+ "keyCode": "CP-401337-Apple",
+ "operationSetCode": "MacAppDeveloperSign",
+ "parameters": [ ],
+ "toolName": "sign",
+ "toolVersion": "1.0"
+ }
+ ]
+ SessionTimeout: 120
+ displayName: Codesign
+
+- script: |
+ set -e
+
+ # remove pkg from archive
+ zip -d ../VSCode-darwin.zip "*.pkg"
+
+ # publish the build
+ PACKAGEJSON=`ls ../VSCode-darwin/*.app/Contents/Resources/app/package.json`
+ VERSION=`node -p "require(\"$PACKAGEJSON\").version"`
+ AZURE_DOCUMENTDB_MASTERKEY="$(AZURE_DOCUMENTDB_MASTERKEY)" \
+ AZURE_STORAGE_ACCESS_KEY_2="$(AZURE_STORAGE_ACCESS_KEY_2)" \
+ MOONCAKE_STORAGE_ACCESS_KEY="$(MOONCAKE_STORAGE_ACCESS_KEY)" \
+ node build/tfs/common/publish.js \
+ "$(VSCODE_QUALITY)" \
+ darwin \
+ archive \
+ "VSCode-darwin-$(VSCODE_QUALITY).zip" \
+ $VERSION \
+ true \
+ ../VSCode-darwin.zip
+
+ # publish hockeyapp symbols
+ node build/tfs/common/symbols.js "$(VSCODE_MIXIN_PASSWORD)" "$(VSCODE_HOCKEYAPP_TOKEN)" "$(VSCODE_ARCH)" "$(VSCODE_HOCKEYAPP_ID_MACOS)"
+
+ # upload configuration
+ AZURE_STORAGE_ACCESS_KEY="$(AZURE_STORAGE_ACCESS_KEY)" \
+ yarn gulp -- upload-vscode-configuration
+ displayName: Publish
\ No newline at end of file
diff --git a/build/tfs/linux/continuous-build-linux.yml b/build/tfs/linux/continuous-build-linux.yml
new file mode 100644
index 00000000000..9c2e125447b
--- /dev/null
+++ b/build/tfs/linux/continuous-build-linux.yml
@@ -0,0 +1,44 @@
+steps:
+- script: |
+ set -e
+ apt-get update
+ apt-get install -y libxkbfile-dev pkg-config libsecret-1-dev libxss1 libgconf-2-4 dbus xvfb libgtk-3-0
+ cp build/tfs/linux/x64/xvfb.init /etc/init.d/xvfb
+ chmod +x /etc/init.d/xvfb
+ update-rc.d xvfb defaults
+ ln -sf /bin/dbus-daemon /usr/bin/dbus-daemon
+ service xvfb start
+ service dbus start
+- task: NodeTool@0
+ inputs:
+ versionSpec: "8.9.1"
+- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
+ inputs:
+ versionSpec: "1.9.4"
+- script: |
+ yarn
+ displayName: Install Dependencies
+- script: |
+ yarn gulp electron-x64
+ displayName: Download Electron
+- script: |
+ yarn gulp hygiene
+ displayName: Run Hygiene Checks
+- script: |
+ yarn monaco-compile-check
+ displayName: Run Monaco Editor Checks
+- script: |
+ yarn compile
+ displayName: Compile Sources
+- script: |
+ yarn download-builtin-extensions
+ displayName: Download Built-in Extensions
+- script: |
+ DISPLAY=:10 ./scripts/test.sh --tfs "Unit Tests"
+ displayName: Run Unit Tests
+- task: PublishTestResults@2
+ displayName: Publish Tests Results
+ inputs:
+ testResultsFiles: '*-results.xml'
+ searchFolder: '$(Build.ArtifactStagingDirectory)/test-results'
+ condition: succeededOrFailed()
\ No newline at end of file
diff --git a/build/tfs/linux/frozen-check.ts b/build/tfs/linux/frozen-check.ts
index 489a24dc28a..c97d33b3953 100644
--- a/build/tfs/linux/frozen-check.ts
+++ b/build/tfs/linux/frozen-check.ts
@@ -39,4 +39,11 @@ function getConfig(quality: string): Promise {
}
getConfig(process.argv[2])
- .then(c => console.log(c.frozen), e => console.error(e));
\ No newline at end of file
+ .then(config => {
+ console.log(config.frozen);
+ process.exit(0);
+ })
+ .catch(err => {
+ console.error(err);
+ process.exit(1);
+ });
\ No newline at end of file
diff --git a/build/tfs/linux/product-build-linux.yml b/build/tfs/linux/product-build-linux.yml
new file mode 100644
index 00000000000..3e1d2e8c9a7
--- /dev/null
+++ b/build/tfs/linux/product-build-linux.yml
@@ -0,0 +1,95 @@
+steps:
+- task: NodeTool@0
+ inputs:
+ versionSpec: "8.9.1"
+
+- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
+ inputs:
+ versionSpec: "1.9.4"
+
+- script: |
+ set -e
+ export npm_config_arch="$(VSCODE_ARCH)"
+ if [[ "$(VSCODE_ARCH)" == "ia32" ]]; then
+ export PKG_CONFIG_PATH="/usr/lib/i386-linux-gnu/pkgconfig"
+ fi
+
+ echo "machine monacotools.visualstudio.com password $(VSO_PAT)" > ~/.netrc
+ yarn
+ npm run gulp -- hygiene
+ npm run monaco-compile-check
+ VSCODE_MIXIN_PASSWORD="$(VSCODE_MIXIN_PASSWORD)" npm run gulp -- mixin
+ node build/tfs/common/installDistro.js
+ node build/lib/builtInExtensions.js
+
+- script: |
+ set -e
+ VSCODE_MIXIN_PASSWORD="$(VSCODE_MIXIN_PASSWORD)" npm run gulp -- vscode-linux-$(VSCODE_ARCH)-min
+ name: build
+
+- script: |
+ set -e
+ npm run gulp -- "electron-$(VSCODE_ARCH)"
+
+ # xvfb seems to be crashing often, let's make sure it's always up
+ service xvfb start
+
+ DISPLAY=:10 ./scripts/test.sh --build --tfs "Unit Tests"
+ # yarn smoketest -- --build "$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)"
+ name: test
+
+- script: |
+ set -e
+ REPO="$(pwd)"
+ ROOT="$REPO/.."
+ ARCH="$(VSCODE_ARCH)"
+
+ # Publish tarball
+ PLATFORM_LINUX="linux-$(VSCODE_ARCH)"
+ [[ "$ARCH" == "ia32" ]] && DEB_ARCH="i386" || DEB_ARCH="amd64"
+ [[ "$ARCH" == "ia32" ]] && RPM_ARCH="i386" || RPM_ARCH="x86_64"
+ BUILDNAME="VSCode-$PLATFORM_LINUX"
+ BUILD="$ROOT/$BUILDNAME"
+ BUILD_VERSION="$(date +%s)"
+ [ -z "$VSCODE_QUALITY" ] && TARBALL_FILENAME="code-$BUILD_VERSION.tar.gz" || TARBALL_FILENAME="code-$VSCODE_QUALITY-$BUILD_VERSION.tar.gz"
+ TARBALL_PATH="$ROOT/$TARBALL_FILENAME"
+ PACKAGEJSON="$BUILD/resources/app/package.json"
+ VERSION=$(node -p "require(\"$PACKAGEJSON\").version")
+
+ rm -rf $ROOT/code-*.tar.*
+ (cd $ROOT && tar -czf $TARBALL_PATH $BUILDNAME)
+
+ AZURE_DOCUMENTDB_MASTERKEY="$(AZURE_DOCUMENTDB_MASTERKEY)" \
+ AZURE_STORAGE_ACCESS_KEY_2="$(AZURE_STORAGE_ACCESS_KEY_2)" \
+ MOONCAKE_STORAGE_ACCESS_KEY="$(MOONCAKE_STORAGE_ACCESS_KEY)" \
+ node build/tfs/common/publish.js "$VSCODE_QUALITY" "$PLATFORM_LINUX" archive-unsigned "$TARBALL_FILENAME" "$VERSION" true "$TARBALL_PATH"
+
+ # Publish hockeyapp symbols
+ node build/tfs/common/symbols.js "$(VSCODE_MIXIN_PASSWORD)" "$(VSCODE_HOCKEYAPP_TOKEN)" "$(VSCODE_ARCH)" "$(VSCODE_HOCKEYAPP_ID_LINUX64)"
+
+ # Publish DEB
+ npm run gulp -- "vscode-linux-$(VSCODE_ARCH)-build-deb"
+ PLATFORM_DEB="linux-deb-$ARCH"
+ [[ "$ARCH" == "ia32" ]] && DEB_ARCH="i386" || DEB_ARCH="amd64"
+ DEB_FILENAME="$(ls $REPO/.build/linux/deb/$DEB_ARCH/deb/)"
+ DEB_PATH="$REPO/.build/linux/deb/$DEB_ARCH/deb/$DEB_FILENAME"
+
+ AZURE_DOCUMENTDB_MASTERKEY="$(AZURE_DOCUMENTDB_MASTERKEY)" \
+ AZURE_STORAGE_ACCESS_KEY_2="$(AZURE_STORAGE_ACCESS_KEY_2)" \
+ MOONCAKE_STORAGE_ACCESS_KEY="$(MOONCAKE_STORAGE_ACCESS_KEY)" \
+ node build/tfs/common/publish.js "$VSCODE_QUALITY" "$PLATFORM_DEB" package "$DEB_FILENAME" "$VERSION" true "$DEB_PATH"
+
+ # Publish RPM
+ npm run gulp -- "vscode-linux-$(VSCODE_ARCH)-build-rpm"
+ PLATFORM_RPM="linux-rpm-$ARCH"
+ [[ "$ARCH" == "ia32" ]] && RPM_ARCH="i386" || RPM_ARCH="x86_64"
+ RPM_FILENAME="$(ls $REPO/.build/linux/rpm/$RPM_ARCH/ | grep .rpm)"
+ RPM_PATH="$REPO/.build/linux/rpm/$RPM_ARCH/$RPM_FILENAME"
+
+ AZURE_DOCUMENTDB_MASTERKEY="$(AZURE_DOCUMENTDB_MASTERKEY)" \
+ AZURE_STORAGE_ACCESS_KEY_2="$(AZURE_STORAGE_ACCESS_KEY_2)" \
+ MOONCAKE_STORAGE_ACCESS_KEY="$(MOONCAKE_STORAGE_ACCESS_KEY)" \
+ node build/tfs/common/publish.js "$VSCODE_QUALITY" "$PLATFORM_RPM" package "$RPM_FILENAME" "$VERSION" true "$RPM_PATH"
+
+ # SNAP_FILENAME="$(ls $REPO/.build/linux/snap/$ARCH/ | grep .snap)"
+ # SNAP_PATH="$REPO/.build/linux/snap/$ARCH/$SNAP_FILENAME"
diff --git a/build/tfs/linux/release.sh b/build/tfs/linux/release.sh
deleted file mode 100755
index ad74ce0a385..00000000000
--- a/build/tfs/linux/release.sh
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/bin/bash
-set -e
-
-# Arguments
-ARCH="$1"
-LINUX_REPO_PASSWORD="$2"
-
-# Variables
-PLATFORM_LINUX="linux-$ARCH"
-PLATFORM_DEB="linux-deb-$ARCH"
-PLATFORM_RPM="linux-rpm-$ARCH"
-[[ "$ARCH" == "ia32" ]] && DEB_ARCH="i386" || DEB_ARCH="amd64"
-[[ "$ARCH" == "ia32" ]] && RPM_ARCH="i386" || RPM_ARCH="x86_64"
-REPO="`pwd`"
-ROOT="$REPO/.."
-BUILDNAME="VSCode-$PLATFORM_LINUX"
-BUILD="$ROOT/$BUILDNAME"
-BUILD_VERSION="$(ls $REPO/.build/linux/deb/$DEB_ARCH/deb/ | sed -e 's/code-[a-z]*_//g' -e 's/\.deb$//g')"
-[ -z "$VSCODE_QUALITY" ] && TARBALL_FILENAME="code-$BUILD_VERSION.tar.gz" || TARBALL_FILENAME="code-$VSCODE_QUALITY-$BUILD_VERSION.tar.gz"
-TARBALL_PATH="$ROOT/$TARBALL_FILENAME"
-PACKAGEJSON="$BUILD/resources/app/package.json"
-VERSION=$(node -p "require(\"$PACKAGEJSON\").version")
-
-rm -rf $ROOT/code-*.tar.*
-(cd $ROOT && tar -czf $TARBALL_PATH $BUILDNAME)
-
-node build/tfs/common/publish.js $VSCODE_QUALITY $PLATFORM_LINUX archive-unsigned $TARBALL_FILENAME $VERSION true $TARBALL_PATH
-
-DEB_FILENAME="$(ls $REPO/.build/linux/deb/$DEB_ARCH/deb/)"
-DEB_PATH="$REPO/.build/linux/deb/$DEB_ARCH/deb/$DEB_FILENAME"
-
-node build/tfs/common/publish.js $VSCODE_QUALITY $PLATFORM_DEB package $DEB_FILENAME $VERSION true $DEB_PATH
-
-RPM_FILENAME="$(ls $REPO/.build/linux/rpm/$RPM_ARCH/ | grep .rpm)"
-RPM_PATH="$REPO/.build/linux/rpm/$RPM_ARCH/$RPM_FILENAME"
-
-node build/tfs/common/publish.js $VSCODE_QUALITY $PLATFORM_RPM package $RPM_FILENAME $VERSION true $RPM_PATH
-
-# SNAP_FILENAME="$(ls $REPO/.build/linux/snap/$ARCH/ | grep .snap)"
-# SNAP_PATH="$REPO/.build/linux/snap/$ARCH/$SNAP_FILENAME"
-
-IS_FROZEN="$(node build/tfs/linux/frozen-check.js $VSCODE_QUALITY)"
-
-if [ -z "$VSCODE_QUALITY" ]; then
- echo "VSCODE_QUALITY is not set, skipping repo package publish"
-elif [ "$IS_FROZEN" = "true" ]; then
- echo "$VSCODE_QUALITY is frozen, skipping repo package publish"
-else
- if [ "$BUILD_SOURCEBRANCH" = "master" ] || [ "$BUILD_SOURCEBRANCH" = "refs/heads/master" ]; then
- if [[ $BUILD_QUEUEDBY = *"Project Collection Service Accounts"* || $BUILD_QUEUEDBY = *"Microsoft.VisualStudio.Services.TFS"* ]]; then
- # Write config files needed by API, use eval to force environment variable expansion
- pushd build/tfs/linux
- # Submit to apt repo
- if [ "$DEB_ARCH" = "amd64" ]; then
- eval echo '{ \"server\": \"azure-apt-cat.cloudapp.net\", \"protocol\": \"https\", \"port\": \"443\", \"repositoryId\": \"58a4adf642421134a1a48d1a\", \"username\": \"vscode\", \"password\": \"$LINUX_REPO_PASSWORD\" }' > apt-config.json
-
- ./repoapi_client.sh -config apt-config.json -addfile $DEB_PATH
- fi
- # Submit to yum repo (disabled as it's manual until signing is automated)
- # eval echo '{ \"server\": \"azure-apt-cat.cloudapp.net\", \"protocol\": \"https\", \"port\": \"443\", \"repositoryId\": \"58a4ae3542421134a1a48d1b\", \"username\": \"vscode\", \"password\": \"$LINUX_REPO_PASSWORD\" }' > yum-config.json
-
- # ./repoapi_client.sh -config yum-config.json -addfile $RPM_PATH
- popd
- echo "To check repo publish status run ./repoapi_client.sh -config config.json -check "
- fi
- fi
-fi
diff --git a/build/tfs/product-build.yml b/build/tfs/product-build.yml
index 35f64ea2dad..b437720a43a 100644
--- a/build/tfs/product-build.yml
+++ b/build/tfs/product-build.yml
@@ -1,413 +1,41 @@
-phases:
-- phase: Windows
+jobs:
+- job: Windows
condition: eq(variables['VSCODE_BUILD_WIN32'], 'true')
- queue:
- name: Hosted VS2017
- parallel: 2
- matrix:
- x64:
- VSCODE_ARCH: x64
- ia32:
- VSCODE_ARCH: ia32
-
- steps:
- - task: NodeTool@0
- inputs:
- versionSpec: "8.9.1"
-
- - task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
- inputs:
- versionSpec: "1.3.2"
-
- - powershell: |
- $ErrorActionPreference = "Stop"
- "machine monacotools.visualstudio.com password $(VSO_PAT)" | Out-File "$env:USERPROFILE\_netrc" -Encoding ASCII
- $env:npm_config_arch="$(VSCODE_ARCH)"
- $env:CHILD_CONCURRENCY="1"
- yarn
- npm run gulp -- hygiene
- npm run monaco-compile-check
- $env:VSCODE_MIXIN_PASSWORD="$(VSCODE_MIXIN_PASSWORD)"
- npm run gulp -- mixin
- node build/tfs/common/installDistro.js
- node build/lib/builtInExtensions.js
-
- - powershell: |
- $ErrorActionPreference = "Stop"
- $env:VSCODE_MIXIN_PASSWORD="$(VSCODE_MIXIN_PASSWORD)"
- npm run gulp -- "vscode-win32-$(VSCODE_ARCH)-min"
- npm run gulp -- "vscode-win32-$(VSCODE_ARCH)-copy-inno-updater"
- name: build
-
- - powershell: |
- $ErrorActionPreference = "Stop"
- npm run gulp -- "electron-$(VSCODE_ARCH)"
- .\scripts\test.bat --build --tfs
- # yarn smoketest -- --build "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)"
- name: test
-
- - task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@1
- inputs:
- ConnectedServiceName: 'ESRP CodeSign'
- FolderPath: '$(agent.builddirectory)/VSCode-win32-$(VSCODE_ARCH)'
- Pattern: '*.dll,*.exe,*.node'
- signConfigType: inlineSignParams
- inlineOperation: |
- [
- {
- "keyCode": "CP-229803",
- "operationSetCode": "SigntoolSign",
- "parameters": [
- {
- "parameterName": "OpusName",
- "parameterValue": "VS Code"
- },
- {
- "parameterName": "OpusInfo",
- "parameterValue": "https://code.visualstudio.com/"
- },
- {
- "parameterName": "PageHash",
- "parameterValue": "/NPH"
- },
- {
- "parameterName": "TimeStamp",
- "parameterValue": "/t \"http://ts4096.gtm.microsoft.com/TSS/AuthenticodeTS\""
- }
- ],
- "toolName": "sign",
- "toolVersion": "1.0"
- },
- {
- "keyCode": "CP-230012",
- "operationSetCode": "SigntoolSign",
- "parameters": [
- {
- "parameterName": "OpusName",
- "parameterValue": "VS Code"
- },
- {
- "parameterName": "OpusInfo",
- "parameterValue": "https://code.visualstudio.com/"
- },
- {
- "parameterName": "Append",
- "parameterValue": "/as"
- },
- {
- "parameterName": "FileDigest",
- "parameterValue": "/fd \"SHA256\""
- },
- {
- "parameterName": "PageHash",
- "parameterValue": "/NPH"
- },
- {
- "parameterName": "TimeStamp",
- "parameterValue": "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256"
- }
- ],
- "toolName": "sign",
- "toolVersion": "1.0"
- },
- {
- "keyCode": "CP-230012",
- "operationSetCode": "SigntoolVerify",
- "parameters": [
- {
- "parameterName": "VerifyAll",
- "parameterValue": "/all"
- }
- ],
- "toolName": "sign",
- "toolVersion": "1.0"
- }
- ]
- SessionTimeout: 120
-
- - powershell: |
- $ErrorActionPreference = "Stop"
- npm run gulp -- "vscode-win32-$(VSCODE_ARCH)-archive" "vscode-win32-$(VSCODE_ARCH)-setup"
-
- - task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@1
- inputs:
- ConnectedServiceName: 'ESRP CodeSign'
- FolderPath: '$(agent.builddirectory)'
- Pattern: VSCodeSetup.exe
- signConfigType: inlineSignParams
- inlineOperation: |
- [
- {
- "keyCode": "CP-229803",
- "operationSetCode": "SigntoolSign",
- "parameters": [
- {
- "parameterName": "OpusName",
- "parameterValue": "VS Code"
- },
- {
- "parameterName": "OpusInfo",
- "parameterValue": "https://code.visualstudio.com/"
- },
- {
- "parameterName": "PageHash",
- "parameterValue": "/NPH"
- },
- {
- "parameterName": "TimeStamp",
- "parameterValue": "/t \"http://ts4096.gtm.microsoft.com/TSS/AuthenticodeTS\""
- }
- ],
- "toolName": "sign",
- "toolVersion": "1.0"
- },
- {
- "keyCode": "CP-230012",
- "operationSetCode": "SigntoolSign",
- "parameters": [
- {
- "parameterName": "OpusName",
- "parameterValue": "VS Code"
- },
- {
- "parameterName": "OpusInfo",
- "parameterValue": "https://code.visualstudio.com/"
- },
- {
- "parameterName": "Append",
- "parameterValue": "/as"
- },
- {
- "parameterName": "FileDigest",
- "parameterValue": "/fd \"SHA256\""
- },
- {
- "parameterName": "PageHash",
- "parameterValue": "/NPH"
- },
- {
- "parameterName": "TimeStamp",
- "parameterValue": "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256"
- }
- ],
- "toolName": "sign",
- "toolVersion": "1.0"
- },
- {
- "keyCode": "CP-230012",
- "operationSetCode": "SigntoolVerify",
- "parameters": [
- {
- "parameterName": "VerifyAll",
- "parameterValue": "/all"
- }
- ],
- "toolName": "sign",
- "toolVersion": "1.0"
- }
- ]
- SessionTimeout: 120
-
- - powershell: |
- $ErrorActionPreference = "Stop"
- $Repo = "$(pwd)"
- $Root = "$Repo\.."
- $Exe = "$Repo\.build\win32-$(VSCODE_ARCH)\setup\VSCodeSetup.exe"
- $Zip = "$Repo\.build\win32-$(VSCODE_ARCH)\archive\VSCode-win32-$(VSCODE_ARCH).zip"
- $Build = "$Root\VSCode-win32-$(VSCODE_ARCH)"
-
- # get version
- $PackageJson = Get-Content -Raw -Path "$Build\resources\app\package.json" | ConvertFrom-Json
- $Version = $PackageJson.version
- $Quality = "$env:VSCODE_QUALITY"
- $env:AZURE_STORAGE_ACCESS_KEY_2 = "$(AZURE_STORAGE_ACCESS_KEY_2)"
- $env:MOONCAKE_STORAGE_ACCESS_KEY = "$(MOONCAKE_STORAGE_ACCESS_KEY)"
- $env:AZURE_DOCUMENTDB_MASTERKEY = "$(AZURE_DOCUMENTDB_MASTERKEY)"
-
- $assetPlatform = if ("$(VSCODE_ARCH)" -eq "ia32") { "win32" } else { "win32-x64" }
-
- node build/tfs/common/publish.js $Quality "$global:assetPlatform-archive" archive "VSCode-win32-$(VSCODE_ARCH)-$Version.zip" $Version true $Zip
- node build/tfs/common/publish.js $Quality "$global:assetPlatform" setup "VSCodeSetup-$(VSCODE_ARCH)-$Version.exe" $Version true $Exe
-
- # publish hockeyapp symbols
- $hockeyAppId = if ("$(VSCODE_ARCH)" -eq "ia32") { "$(VSCODE_HOCKEYAPP_ID_WIN32)" } else { "$(VSCODE_HOCKEYAPP_ID_WIN64)" }
- node build/tfs/common/symbols.js "$(VSCODE_MIXIN_PASSWORD)" "$(VSCODE_HOCKEYAPP_TOKEN)" "$(VSCODE_ARCH)" $hockeyAppId
-
-- phase: Linux
- condition: eq(variables['VSCODE_BUILD_LINUX'], 'true')
- queue: linux-x64
+ pool:
+ vmImage: VS2017-Win2016
variables:
VSCODE_ARCH: x64
-
steps:
- - task: NodeTool@0
- inputs:
- versionSpec: "8.9.1"
+ - template: win32/product-build-win32.yml
- - task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
- inputs:
- versionSpec: "1.3.2"
-
- - script: |
- set -e
- export npm_config_arch="$(VSCODE_ARCH)"
- if [[ "$(VSCODE_ARCH)" == "ia32" ]]; then
- export PKG_CONFIG_PATH="/usr/lib/i386-linux-gnu/pkgconfig"
- fi
-
- echo "machine monacotools.visualstudio.com password $(VSO_PAT)" > ~/.netrc
- yarn
- npm run gulp -- hygiene
- npm run monaco-compile-check
- VSCODE_MIXIN_PASSWORD="$(VSCODE_MIXIN_PASSWORD)" npm run gulp -- mixin
- node build/tfs/common/installDistro.js
- node build/lib/builtInExtensions.js
-
- - script: |
- set -e
- VSCODE_MIXIN_PASSWORD="$(VSCODE_MIXIN_PASSWORD)" npm run gulp -- vscode-linux-$(VSCODE_ARCH)-min
- name: build
-
- - script: |
- set -e
- npm run gulp -- "electron-$(VSCODE_ARCH)"
- DISPLAY=:10 ./scripts/test.sh --build --tfs
- # yarn smoketest -- --build "$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)"
- name: test
-
- - script: |
- set -e
- npm run gulp -- "vscode-linux-$(VSCODE_ARCH)-build-deb"
- npm run gulp -- "vscode-linux-$(VSCODE_ARCH)-build-rpm"
- #npm run gulp -- "vscode-linux-$(VSCODE_ARCH)-build-snap"
-
- AZURE_DOCUMENTDB_MASTERKEY="$(AZURE_DOCUMENTDB_MASTERKEY)" \
- AZURE_STORAGE_ACCESS_KEY_2="$(AZURE_STORAGE_ACCESS_KEY_2)" \
- MOONCAKE_STORAGE_ACCESS_KEY="$(MOONCAKE_STORAGE_ACCESS_KEY)" \
- ./build/tfs/linux/release2.sh "$(VSCODE_ARCH)" "$(LINUX_REPO_PASSWORD)"
-
- # publish hockeyapp symbols
- node build/tfs/common/symbols.js "$(VSCODE_MIXIN_PASSWORD)" "$(VSCODE_HOCKEYAPP_TOKEN)" "$(VSCODE_ARCH)" "$(VSCODE_HOCKEYAPP_ID_LINUX64)"
-
-- phase: Linux32
- condition: eq(variables['VSCODE_BUILD_LINUX'], 'true')
- queue: linux-ia32
+- job: Windows32
+ condition: eq(variables['VSCODE_BUILD_WIN32_32BIT'], 'true')
+ pool:
+ vmImage: VS2017-Win2016
variables:
VSCODE_ARCH: ia32
-
steps:
- - task: NodeTool@0
- inputs:
- versionSpec: "8.9.1"
+ - template: win32/product-build-win32.yml
- - task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
- inputs:
- versionSpec: "1.3.2"
+- job: Linux
+ condition: eq(variables['VSCODE_BUILD_LINUX'], 'true')
+ pool: linux-x64
+ variables:
+ VSCODE_ARCH: x64
+ steps:
+ - template: linux/product-build-linux.yml
- - script: |
- set -e
- export npm_config_arch="$(VSCODE_ARCH)"
- if [[ "$(VSCODE_ARCH)" == "ia32" ]]; then
- export PKG_CONFIG_PATH="/usr/lib/i386-linux-gnu/pkgconfig"
- fi
+- job: Linux32
+ condition: eq(variables['VSCODE_BUILD_LINUX_32BIT'], 'true')
+ pool: linux-ia32
+ variables:
+ VSCODE_ARCH: ia32
+ steps:
+ - template: linux/product-build-linux.yml
- echo "machine monacotools.visualstudio.com password $(VSO_PAT)" > ~/.netrc
- yarn
- npm run gulp -- hygiene
- npm run monaco-compile-check
- VSCODE_MIXIN_PASSWORD="$(VSCODE_MIXIN_PASSWORD)" npm run gulp -- mixin
- node build/tfs/common/installDistro.js
- node build/lib/builtInExtensions.js
-
- - script: |
- set -e
- VSCODE_MIXIN_PASSWORD="$(VSCODE_MIXIN_PASSWORD)" npm run gulp -- vscode-linux-$(VSCODE_ARCH)-min
- name: build
-
- - script: |
- set -e
- npm run gulp -- "electron-$(VSCODE_ARCH)"
- DISPLAY=:10 ./scripts/test.sh --build --tfs
- # yarn smoketest -- --build "$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)"
- name: test
-
- - script: |
- set -e
- npm run gulp -- "vscode-linux-$(VSCODE_ARCH)-build-deb"
- npm run gulp -- "vscode-linux-$(VSCODE_ARCH)-build-rpm"
- #npm run gulp -- "vscode-linux-$(VSCODE_ARCH)-build-snap"
-
- AZURE_DOCUMENTDB_MASTERKEY="$(AZURE_DOCUMENTDB_MASTERKEY)" \
- AZURE_STORAGE_ACCESS_KEY_2="$(AZURE_STORAGE_ACCESS_KEY_2)" \
- MOONCAKE_STORAGE_ACCESS_KEY="$(MOONCAKE_STORAGE_ACCESS_KEY)" \
- ./build/tfs/linux/release.sh "$(VSCODE_ARCH)" "$(LINUX_REPO_PASSWORD)"
-
- # publish hockeyapp symbols
- node build/tfs/common/symbols.js "$(VSCODE_MIXIN_PASSWORD)" "$(VSCODE_HOCKEYAPP_TOKEN)" "$(VSCODE_ARCH)" "$(VSCODE_HOCKEYAPP_ID_LINUX32)"
-
-- phase: macOS
+- job: macOS
condition: eq(variables['VSCODE_BUILD_MACOS'], 'true')
- queue: Hosted macOS Preview
+ pool:
+ vmImage: macOS 10.13
steps:
- - task: NodeTool@0
- inputs:
- versionSpec: "8.9.1"
-
- - task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
- inputs:
- versionSpec: "1.3.2"
-
- - script: |
- set -e
- echo "machine monacotools.visualstudio.com password $(VSO_PAT)" > ~/.netrc
- yarn
- npm run gulp -- hygiene
- npm run monaco-compile-check
- VSCODE_MIXIN_PASSWORD="$(VSCODE_MIXIN_PASSWORD)" npm run gulp -- mixin
- node build/tfs/common/installDistro.js
- node build/lib/builtInExtensions.js
-
- - script: |
- set -e
- VSCODE_MIXIN_PASSWORD="$(VSCODE_MIXIN_PASSWORD)" \
- AZURE_STORAGE_ACCESS_KEY="$(AZURE_STORAGE_ACCESS_KEY)" \
- npm run gulp -- vscode-darwin-min upload-vscode-sourcemaps
- name: build
-
- - script: |
- set -e
- ./scripts/test.sh --build --tfs
- APP_NAME="`ls $(agent.builddirectory)/VSCode-darwin | head -n 1`"
- # yarn smoketest -- --build "$(agent.builddirectory)/VSCode-darwin/$APP_NAME"
- name: test
-
- - script: |
- set -e
- # archive the unsigned build
- pushd ../VSCode-darwin && zip -r -X -y ../VSCode-darwin-unsigned.zip * && popd
-
- # publish the unsigned build
- PACKAGEJSON=`ls ../VSCode-darwin/*.app/Contents/Resources/app/package.json`
- VERSION=`node -p "require(\"$PACKAGEJSON\").version"`
- AZURE_DOCUMENTDB_MASTERKEY="$(AZURE_DOCUMENTDB_MASTERKEY)" \
- AZURE_STORAGE_ACCESS_KEY_2="$(AZURE_STORAGE_ACCESS_KEY_2)" \
- MOONCAKE_STORAGE_ACCESS_KEY="$(MOONCAKE_STORAGE_ACCESS_KEY)" \
- node build/tfs/common/publish.js \
- "$(VSCODE_QUALITY)" \
- darwin \
- archive-unsigned \
- "VSCode-darwin-$(VSCODE_QUALITY)-unsigned.zip" \
- $VERSION \
- false \
- ../VSCode-darwin-unsigned.zip
-
- # publish hockeyapp symbols
- node build/tfs/common/symbols.js "$(VSCODE_MIXIN_PASSWORD)" "$(VSCODE_HOCKEYAPP_TOKEN)" "$(VSCODE_ARCH)" "$(VSCODE_HOCKEYAPP_ID_MACOS)"
-
- # enqueue the unsigned build
- AZURE_DOCUMENTDB_MASTERKEY="$(AZURE_DOCUMENTDB_MASTERKEY)" \
- AZURE_STORAGE_ACCESS_KEY_2="$(AZURE_STORAGE_ACCESS_KEY_2)" \
- node build/tfs/darwin/enqueue.js "$(VSCODE_QUALITY)"
-
- AZURE_STORAGE_ACCESS_KEY="$(AZURE_STORAGE_ACCESS_KEY)" \
- npm run gulp -- upload-vscode-configuration
\ No newline at end of file
+ - template: darwin/product-build-darwin.yml
\ No newline at end of file
diff --git a/build/tfs/win32/ESRPClient/NuGet.config b/build/tfs/win32/ESRPClient/NuGet.config
new file mode 100644
index 00000000000..6d6da347fd2
--- /dev/null
+++ b/build/tfs/win32/ESRPClient/NuGet.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/build/tfs/win32/ESRPClient/packages.config b/build/tfs/win32/ESRPClient/packages.config
new file mode 100644
index 00000000000..d7a6f144f47
--- /dev/null
+++ b/build/tfs/win32/ESRPClient/packages.config
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/build/tfs/win32/continuous-build-win32.yml b/build/tfs/win32/continuous-build-win32.yml
new file mode 100644
index 00000000000..780c9a0e197
--- /dev/null
+++ b/build/tfs/win32/continuous-build-win32.yml
@@ -0,0 +1,48 @@
+steps:
+- task: NodeTool@0
+ inputs:
+ versionSpec: "8.9.1"
+- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
+ inputs:
+ versionSpec: "1.9.4"
+- powershell: |
+ yarn
+ displayName: Install Dependencies
+- powershell: |
+ yarn gulp electron
+ displayName: Download Electron
+- powershell: |
+ yarn gulp hygiene
+ displayName: Run Hygiene Checks
+- powershell: |
+ yarn monaco-compile-check
+ displayName: Run Monaco Editor Checks
+- powershell: |
+ yarn compile
+ displayName: Compile Sources
+- powershell: |
+ yarn download-builtin-extensions
+ displayName: Download Built-in Extensions
+- powershell: |
+ .\scripts\test.bat --tfs "Unit Tests"
+ displayName: Run Unit Tests
+- powershell: |
+ .\scripts\test-integration.bat --tfs "Integration Tests"
+ displayName: Run Integration Tests
+- powershell: |
+ yarn smoketest --screenshots "$(Build.ArtifactStagingDirectory)\artifacts" --log "$(Build.ArtifactStagingDirectory)\artifacts\smoketest.log"
+ displayName: Run Smoke Tests
+ continueOnError: true
+- task: PublishBuildArtifacts@1
+ displayName: Publish Smoketest Artifacts
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)/artifacts'
+ ArtifactName: build-artifacts-win32
+ publishLocation: Container
+ condition: eq(variables['System.PullRequest.IsFork'], 'False')
+- task: PublishTestResults@2
+ displayName: Publish Tests Results
+ inputs:
+ testResultsFiles: '*-results.xml'
+ searchFolder: '$(Build.ArtifactStagingDirectory)/test-results'
+ condition: succeededOrFailed()
diff --git a/build/tfs/win32/exec.ps1 b/build/tfs/win32/exec.ps1
new file mode 100644
index 00000000000..826cefdf7dd
--- /dev/null
+++ b/build/tfs/win32/exec.ps1
@@ -0,0 +1,24 @@
+# Taken from psake https://github.com/psake/psake
+
+<#
+.SYNOPSIS
+ This is a helper function that runs a scriptblock and checks the PS variable $lastexitcode
+ to see if an error occcured. If an error is detected then an exception is thrown.
+ This function allows you to run command-line programs without having to
+ explicitly check the $lastexitcode variable.
+
+.EXAMPLE
+ exec { svn info $repository_trunk } "Error executing SVN. Please verify SVN command-line client is installed"
+#>
+function Exec
+{
+ [CmdletBinding()]
+ param(
+ [Parameter(Position=0,Mandatory=1)][scriptblock]$cmd,
+ [Parameter(Position=1,Mandatory=0)][string]$errorMessage = ($msgs.error_bad_command -f $cmd)
+ )
+ & $cmd
+ if ($lastexitcode -ne 0) {
+ throw ("Exec: " + $errorMessage)
+ }
+}
\ No newline at end of file
diff --git a/build/tfs/win32/import-esrp-auth-cert.ps1 b/build/tfs/win32/import-esrp-auth-cert.ps1
new file mode 100644
index 00000000000..c345c780231
--- /dev/null
+++ b/build/tfs/win32/import-esrp-auth-cert.ps1
@@ -0,0 +1,14 @@
+Param(
+ [string]$AuthCertificateBase64,
+ [string]$AuthCertificateKey
+)
+
+# Import auth certificate
+$AuthCertificateFileName = [System.IO.Path]::GetTempFileName()
+$AuthCertificateBytes = [Convert]::FromBase64String($AuthCertificateBase64)
+[IO.File]::WriteAllBytes($AuthCertificateFileName, $AuthCertificateBytes)
+$AuthCertificate = Import-PfxCertificate -FilePath $AuthCertificateFileName -CertStoreLocation Cert:\LocalMachine\My -Password (ConvertTo-SecureString $AuthCertificateKey -AsPlainText -Force)
+rm $AuthCertificateFileName
+$ESRPAuthCertificateSubjectName = $AuthCertificate.Subject
+
+Write-Output ("##vso[task.setvariable variable=ESRPAuthCertificateSubjectName;]$ESRPAuthCertificateSubjectName")
\ No newline at end of file
diff --git a/build/tfs/win32/product-build-win32.yml b/build/tfs/win32/product-build-win32.yml
new file mode 100644
index 00000000000..31288bdbdda
--- /dev/null
+++ b/build/tfs/win32/product-build-win32.yml
@@ -0,0 +1,166 @@
+steps:
+- task: NodeTool@0
+ inputs:
+ versionSpec: "8.9.1"
+
+- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
+ inputs:
+ versionSpec: "1.9.4"
+
+- powershell: |
+ . build/tfs/win32/exec.ps1
+ $ErrorActionPreference = "Stop"
+ "machine monacotools.visualstudio.com password $(VSO_PAT)" | Out-File "$env:USERPROFILE\_netrc" -Encoding ASCII
+ $env:npm_config_arch="$(VSCODE_ARCH)"
+ $env:CHILD_CONCURRENCY="1"
+ $env:VSCODE_MIXIN_PASSWORD="$(VSCODE_MIXIN_PASSWORD)"
+ exec { yarn }
+ exec { npm run gulp -- hygiene }
+ exec { npm run monaco-compile-check }
+ exec { npm run gulp -- mixin }
+ exec { node build/tfs/common/installDistro.js }
+ exec { node build/lib/builtInExtensions.js }
+
+- powershell: |
+ . build/tfs/win32/exec.ps1
+ $ErrorActionPreference = "Stop"
+ $env:VSCODE_MIXIN_PASSWORD="$(VSCODE_MIXIN_PASSWORD)"
+ exec { npm run gulp -- "vscode-win32-$(VSCODE_ARCH)-min" }
+ exec { npm run gulp -- "vscode-win32-$(VSCODE_ARCH)-copy-inno-updater" }
+ name: build
+
+- powershell: |
+ . build/tfs/win32/exec.ps1
+ $ErrorActionPreference = "Stop"
+ exec { npm run gulp -- "electron-$(VSCODE_ARCH)" }
+ exec { .\scripts\test.bat --build --tfs "Unit Tests" }
+ # yarn smoketest -- --build "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)"
+ name: test
+
+- task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@1
+ inputs:
+ ConnectedServiceName: 'ESRP CodeSign'
+ FolderPath: '$(agent.builddirectory)/VSCode-win32-$(VSCODE_ARCH)'
+ Pattern: '*.dll,*.exe,*.node'
+ signConfigType: inlineSignParams
+ inlineOperation: |
+ [
+ {
+ "keyCode": "CP-229803",
+ "operationSetCode": "SigntoolSign",
+ "parameters": [
+ {
+ "parameterName": "OpusName",
+ "parameterValue": "VS Code"
+ },
+ {
+ "parameterName": "OpusInfo",
+ "parameterValue": "https://code.visualstudio.com/"
+ },
+ {
+ "parameterName": "PageHash",
+ "parameterValue": "/NPH"
+ },
+ {
+ "parameterName": "TimeStamp",
+ "parameterValue": "/t \"http://ts4096.gtm.microsoft.com/TSS/AuthenticodeTS\""
+ }
+ ],
+ "toolName": "sign",
+ "toolVersion": "1.0"
+ },
+ {
+ "keyCode": "CP-230012",
+ "operationSetCode": "SigntoolSign",
+ "parameters": [
+ {
+ "parameterName": "OpusName",
+ "parameterValue": "VS Code"
+ },
+ {
+ "parameterName": "OpusInfo",
+ "parameterValue": "https://code.visualstudio.com/"
+ },
+ {
+ "parameterName": "Append",
+ "parameterValue": "/as"
+ },
+ {
+ "parameterName": "FileDigest",
+ "parameterValue": "/fd \"SHA256\""
+ },
+ {
+ "parameterName": "PageHash",
+ "parameterValue": "/NPH"
+ },
+ {
+ "parameterName": "TimeStamp",
+ "parameterValue": "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256"
+ }
+ ],
+ "toolName": "sign",
+ "toolVersion": "1.0"
+ },
+ {
+ "keyCode": "CP-230012",
+ "operationSetCode": "SigntoolVerify",
+ "parameters": [
+ {
+ "parameterName": "VerifyAll",
+ "parameterValue": "/all"
+ }
+ ],
+ "toolName": "sign",
+ "toolVersion": "1.0"
+ }
+ ]
+ SessionTimeout: 120
+
+- task: NuGetCommand@2
+ displayName: Install ESRPClient.exe
+ inputs:
+ restoreSolution: 'build\tfs\win32\ESRPClient\packages.config'
+ feedsToUse: config
+ nugetConfigPath: 'build\tfs\win32\ESRPClient\NuGet.config'
+ externalFeedCredentials: 3fc0b7f7-da09-4ae7-a9c8-d69824b1819b
+ restoreDirectory: packages
+
+- task: ESRPImportCertTask@1
+ displayName: Import ESRP Request Signing Certificate
+ inputs:
+ ESRP: 'ESRP CodeSign'
+
+- powershell: |
+ $ErrorActionPreference = "Stop"
+ .\build\tfs\win32\import-esrp-auth-cert.ps1 -AuthCertificateBase64 $(ESRP_AUTH_CERTIFICATE) -AuthCertificateKey $(ESRP_AUTH_CERTIFICATE_KEY)
+ displayName: Import ESRP Auth Certificate
+
+- powershell: |
+ . build/tfs/win32/exec.ps1
+ $ErrorActionPreference = "Stop"
+ exec { npm run gulp -- "vscode-win32-$(VSCODE_ARCH)-archive" "vscode-win32-$(VSCODE_ARCH)-system-setup" "vscode-win32-$(VSCODE_ARCH)-user-setup" }
+
+ $Repo = "$(pwd)"
+ $Root = "$Repo\.."
+ $SystemExe = "$Repo\.build\win32-$(VSCODE_ARCH)\system-setup\VSCodeSetup.exe"
+ $UserExe = "$Repo\.build\win32-$(VSCODE_ARCH)\user-setup\VSCodeSetup.exe"
+ $Zip = "$Repo\.build\win32-$(VSCODE_ARCH)\archive\VSCode-win32-$(VSCODE_ARCH).zip"
+ $Build = "$Root\VSCode-win32-$(VSCODE_ARCH)"
+
+ # get version
+ $PackageJson = Get-Content -Raw -Path "$Build\resources\app\package.json" | ConvertFrom-Json
+ $Version = $PackageJson.version
+ $Quality = "$env:VSCODE_QUALITY"
+ $env:AZURE_STORAGE_ACCESS_KEY_2 = "$(AZURE_STORAGE_ACCESS_KEY_2)"
+ $env:MOONCAKE_STORAGE_ACCESS_KEY = "$(MOONCAKE_STORAGE_ACCESS_KEY)"
+ $env:AZURE_DOCUMENTDB_MASTERKEY = "$(AZURE_DOCUMENTDB_MASTERKEY)"
+
+ $assetPlatform = if ("$(VSCODE_ARCH)" -eq "ia32") { "win32" } else { "win32-x64" }
+
+ exec { node build/tfs/common/publish.js $Quality "$global:assetPlatform-archive" archive "VSCode-win32-$(VSCODE_ARCH)-$Version.zip" $Version true $Zip }
+ exec { node build/tfs/common/publish.js $Quality "$global:assetPlatform" setup "VSCodeSetup-$(VSCODE_ARCH)-$Version.exe" $Version true $SystemExe }
+ exec { node build/tfs/common/publish.js $Quality "$global:assetPlatform-user" setup "VSCodeUserSetup-$(VSCODE_ARCH)-$Version.exe" $Version true $UserExe }
+
+ # publish hockeyapp symbols
+ $hockeyAppId = if ("$(VSCODE_ARCH)" -eq "ia32") { "$(VSCODE_HOCKEYAPP_ID_WIN32)" } else { "$(VSCODE_HOCKEYAPP_ID_WIN64)" }
+ exec { node build/tfs/common/symbols.js "$(VSCODE_MIXIN_PASSWORD)" "$(VSCODE_HOCKEYAPP_TOKEN)" "$(VSCODE_ARCH)" $hockeyAppId }
diff --git a/build/tfs/win32/sign.ps1 b/build/tfs/win32/sign.ps1
new file mode 100644
index 00000000000..d888a7d104f
--- /dev/null
+++ b/build/tfs/win32/sign.ps1
@@ -0,0 +1,82 @@
+function Create-TmpJson($Obj) {
+ $FileName = [System.IO.Path]::GetTempFileName()
+ ConvertTo-Json -Depth 100 $Obj | Out-File -Encoding UTF8 $FileName
+ return $FileName
+}
+
+$Auth = Create-TmpJson @{
+ Version = "1.0.0"
+ AuthenticationType = "AAD_CERT"
+ ClientId = $env:ESRPClientId
+ AuthCert = @{
+ SubjectName = $env:ESRPAuthCertificateSubjectName
+ StoreLocation = "LocalMachine"
+ StoreName = "My"
+ }
+ RequestSigningCert = @{
+ SubjectName = $env:ESRPCertificateSubjectName
+ StoreLocation = "LocalMachine"
+ StoreName = "My"
+ }
+}
+
+$Policy = Create-TmpJson @{
+ Version = "1.0.0"
+}
+
+$Input = Create-TmpJson @{
+ Version = "1.0.0"
+ SignBatches = @(
+ @{
+ SourceLocationType = "UNC"
+ SignRequestFiles = @(
+ @{
+ SourceLocation = $args[0]
+ }
+ )
+ SigningInfo = @{
+ Operations = @(
+ @{
+ KeyCode = "CP-229803"
+ OperationCode = "SigntoolSign"
+ Parameters = @{
+ OpusName = "VS Code"
+ OpusInfo = "https://code.visualstudio.com/"
+ PageHash = "/NPH"
+ TimeStamp = "/t `"http://ts4096.gtm.microsoft.com/TSS/AuthenticodeTS`""
+ }
+ ToolName = "sign"
+ ToolVersion = "1.0"
+ },
+ @{
+ KeyCode = "CP-230012"
+ OperationCode = "SigntoolSign"
+ Parameters = @{
+ OpusName = "VS Code"
+ OpusInfo = "https://code.visualstudio.com/"
+ Append = "/as"
+ FileDigest = "/fd `"SHA256`""
+ PageHash = "/NPH"
+ TimeStamp = "/tr `"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer`" /td sha256"
+ }
+ ToolName = "sign"
+ ToolVersion = "1.0"
+ },
+ @{
+ KeyCode = "CP-230012"
+ OperationCode = "SigntoolVerify"
+ Parameters = @{
+ VerifyAll = "/all"
+ }
+ ToolName = "sign"
+ ToolVersion = "1.0"
+ }
+ )
+ }
+ }
+ )
+}
+
+$Output = [System.IO.Path]::GetTempFileName()
+$ScriptPath = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
+& "$ScriptPath\ESRPClient\packages\EsrpClient.1.0.27\tools\ESRPClient.exe" Sign -a $Auth -p $Policy -i $Input -o $Output
\ No newline at end of file
diff --git a/build/tsconfig.json b/build/tsconfig.json
index d60805e7f77..b2cc8c8a0ab 100644
--- a/build/tsconfig.json
+++ b/build/tsconfig.json
@@ -6,6 +6,7 @@
"removeComments": false,
"preserveConstEnums": true,
"sourceMap": false,
+ "resolveJsonModule": true,
"experimentalDecorators": true,
// enable JavaScript type checking for the language service
// use the tsconfig.build.json for compiling wich disable JavaScript
diff --git a/build/win32/.gitignore b/build/win32/.gitignore
new file mode 100644
index 00000000000..809f6a264e9
--- /dev/null
+++ b/build/win32/.gitignore
@@ -0,0 +1 @@
+code-processed.iss
\ No newline at end of file
diff --git a/build/win32/OSSREADME.json b/build/win32/OSSREADME.json
old mode 100755
new mode 100644
index 5e1078b9519..0635d4a1e9f
--- a/build/win32/OSSREADME.json
+++ b/build/win32/OSSREADME.json
@@ -547,7 +547,34 @@
},
{
"name": "retep998/winapi-rs",
- "version": "0.3.4",
+ "version": "0.1.1",
+ "repositoryUrl": "https://github.com/retep998/winapi-rs",
+ "licenseDetail": [
+ "Copyright (c) 2015 The winapi-rs Developers",
+ "",
+ "Permission is hereby granted, free of charge, to any person obtaining a copy",
+ "of this software and associated documentation files (the \"Software\"), to deal",
+ "in the Software without restriction, including without limitation the rights",
+ "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell",
+ "copies of the Software, and to permit persons to whom the Software is",
+ "furnished to do so, subject to the following conditions:",
+ "",
+ "The above copyright notice and this permission notice shall be included in all",
+ "copies or substantial portions of the Software.",
+ "",
+ "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR",
+ "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,",
+ "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE",
+ "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER",
+ "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,",
+ "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE",
+ "SOFTWARE."
+ ],
+ "isProd": true
+ },
+ {
+ "name": "retep998/winapi-rs",
+ "version": "0.2.2",
"repositoryUrl": "https://github.com/retep998/winapi-rs",
"licenseDetail": [
"Copyright (c) 2015 The winapi-rs Developers",
@@ -601,7 +628,7 @@
},
{
"name": "retep998/winapi-rs",
- "version": "0.1.1",
+ "version": "0.3.4",
"repositoryUrl": "https://github.com/retep998/winapi-rs",
"licenseDetail": [
"Copyright (c) 2015 The winapi-rs Developers",
@@ -680,33 +707,6 @@
],
"isProd": true
},
- {
- "name": "retep998/winapi-rs",
- "version": "0.2.2",
- "repositoryUrl": "https://github.com/retep998/winapi-rs",
- "licenseDetail": [
- "Copyright (c) 2015 The winapi-rs Developers",
- "",
- "Permission is hereby granted, free of charge, to any person obtaining a copy",
- "of this software and associated documentation files (the \"Software\"), to deal",
- "in the Software without restriction, including without limitation the rights",
- "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell",
- "copies of the Software, and to permit persons to whom the Software is",
- "furnished to do so, subject to the following conditions:",
- "",
- "The above copyright notice and this permission notice shall be included in all",
- "copies or substantial portions of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR",
- "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,",
- "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE",
- "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER",
- "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,",
- "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE",
- "SOFTWARE."
- ],
- "isProd": true
- },
{
"name": "rust-lang-nursery/lazy-static.rs",
"version": "1.0.0",
diff --git a/build/win32/code.iss b/build/win32/code.iss
index 9bc3329b03a..d9cf6e14dd7 100644
--- a/build/win32/code.iss
+++ b/build/win32/code.iss
@@ -11,7 +11,6 @@ AppPublisher=Microsoft Corporation
AppPublisherURL=https://code.visualstudio.com/
AppSupportURL=https://code.visualstudio.com/
AppUpdatesURL=https://code.visualstudio.com/
-DefaultDirName={pf}\{#DirName}
DefaultGroupName={#NameLong}
AllowNoIcons=yes
OutputDir={#OutputDir}
@@ -33,9 +32,17 @@ VersionInfoVersion={#RawVersion}
ShowLanguageDialog=auto
ArchitecturesAllowed={#ArchitecturesAllowed}
ArchitecturesInstallIn64BitMode={#ArchitecturesInstallIn64BitMode}
+SignTool=esrp
+
+#if "user" == InstallTarget
+DefaultDirName={userpf}\{#DirName}
+PrivilegesRequired=lowest
+#else
+DefaultDirName={pf}\{#DirName}
+#endif
[Languages]
-Name: "english"; MessagesFile: "compiler:Default.isl,{#RepoDir}\build\win32\i18n\messages.en.isl" {#LocalizedLanguageFile}
+Name: "english"; MessagesFile: "{#RepoDir}\build\win32\i18n\Default.isl,{#RepoDir}\build\win32\i18n\messages.en.isl" {#LocalizedLanguageFile}
Name: "german"; MessagesFile: "compiler:Languages\German.isl,{#RepoDir}\build\win32\i18n\messages.de.isl" {#LocalizedLanguageFile("deu")}
Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl,{#RepoDir}\build\win32\i18n\messages.es.isl" {#LocalizedLanguageFile("esp")}
Name: "french"; MessagesFile: "compiler:Languages\French.isl,{#RepoDir}\build\win32\i18n\messages.fr.isl" {#LocalizedLanguageFile("fra")}
@@ -68,8 +75,9 @@ Name: "addtopath"; Description: "{cm:AddToPath}"; GroupDescription: "{cm:Other}"
Name: "runcode"; Description: "{cm:RunAfter,{#NameShort}}"; GroupDescription: "{cm:Other}"; Check: WizardSilent
[Files]
-Source: "*"; Excludes: "\tools,\tools\*"; DestDir: "{code:GetDestDir}"; Flags: ignoreversion recursesubdirs createallsubdirs
+Source: "*"; Excludes: "\CodeSignSummary*.md,\tools,\tools\*,\resources\app\product.json"; DestDir: "{code:GetDestDir}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "tools\*"; DestDir: "{app}\tools"; Flags: ignoreversion
+Source: "{#ProductJsonPath}"; DestDir: "{code:GetDestDir}\resources\app"; Flags: ignoreversion
[Icons]
Name: "{group}\{#NameLong}"; Filename: "{app}\{#ExeBasename}.exe"; AppUserModelID: "{#AppUserId}"
@@ -81,851 +89,870 @@ Filename: "{app}\{#ExeBasename}.exe"; Description: "{cm:LaunchProgram,{#NameLong
Filename: "{app}\{#ExeBasename}.exe"; Description: "{cm:LaunchProgram,{#NameLong}}"; Flags: nowait postinstall; Check: WizardNotSilent
[Registry]
-Root: HKCR; Subkey: ".ascx\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".ascx\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.ascx"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.ascx"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,ASCX}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.ascx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.ascx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.ascx\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".asp\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".asp\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.asp"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.asp"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,ASP}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.asp"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.asp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.asp\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".aspx\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".aspx\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.aspx"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.aspx"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,ASPX}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.aspx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.aspx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.aspx\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".bash\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".bash\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.bash"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.bash"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Bash}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.bash"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.bash\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.bash\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".bash_login\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".bash_login\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.bash_login"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.bash_login"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Bash Login}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.bash_login"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.bash_login\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.bash_login\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".bash_logout\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".bash_logout\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.bash_logout"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.bash_logout"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Bash Logout}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.bash_logout"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.bash_logout\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.bash_logout\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".bash_profile\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".bash_profile\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.bash_profile"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.bash_profile"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Bash Profile}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.bash_profile"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.bash_profile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.bash_profile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".bashrc\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".bashrc\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.bashrc"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.bashrc"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Bash RC}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.bashrc"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.bashrc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.bashrc\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".bib\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".bib\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.bib"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.bib"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,BibTeX}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.bib"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.bib\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.bib\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".bowerrc\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".bowerrc\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.bowerrc"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.bowerrc"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Bower RC}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.bowerrc"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.bowerrc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.bowerrc\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".c\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".c\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.c"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.c"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,C}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.c"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.c\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.c\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".cc\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".cc\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.cc"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.cc"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,C++}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.cc"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.cc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.cc\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".clj\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".clj\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.clj"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.clj"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Clojure}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.clj"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.clj\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.clj\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".cljs\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".cljs\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.cljs"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.cljs"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,ClojureScript}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.cljs"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.cljs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.cljs\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".cljx\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".cljx\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.cljx"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.cljx"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,CLJX}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.cljx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.cljx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.cljx\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".clojure\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".clojure\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.clojure"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.clojure"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Clojure}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.clojure"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.clojure\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.clojure\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".code-workspace\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".code-workspace\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.code-workspace"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.code-workspace"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Code Workspace}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.code"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.code-workspace\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.code-workspace\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".coffee\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".coffee\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.coffee"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.coffee"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,CoffeeScript}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.coffee"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.coffee\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.coffee\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".config\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".config\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.config"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.config"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Configuration}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.config"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.config\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.config\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".cpp\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".cpp\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.cpp"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.cpp"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,C++}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.cpp"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.cpp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.cpp\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".cs\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".cs\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.cs"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.cs"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,C#}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.cs"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.cs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.cs\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".cshtml\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".cshtml\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.cshtml"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.cshtml"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,CSHTML}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.cshtml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.cshtml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.cshtml\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".csproj\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".csproj\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.csproj"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.csproj"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,C# Project}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.csproj"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.csproj\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.csproj\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".css\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".css\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.css"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.css"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,CSS}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.css"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.css\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.css\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".csx\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".csx\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.csx"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.csx"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,C# Script}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.csx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.csx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.csx\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".ctp\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".ctp\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.ctp"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.ctp"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,CakePHP Template}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.ctp"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.ctp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.ctp\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".cxx\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".cxx\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.cxx"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.cxx"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,C++}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.cxx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.cxx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.cxx\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".dockerfile\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".dockerfile\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.dockerfile"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.dockerfile"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Dockerfile}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.dockerfile"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.dockerfile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.dockerfile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".dot\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".dot\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.dot"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.dot"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Dot}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.dot"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.dot\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.dot\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".dtd\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".dtd\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.dtd"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.dtd"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Document Type Definition}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.dtd"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.dtd\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.dtd\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".editorconfig\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".editorconfig\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.editorconfig"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.editorconfig"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Editor Config}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.editorconfig"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.editorconfig\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.editorconfig\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".edn\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".edn\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.edn"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.edn"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Extensible Data Notation}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.edn"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.edn\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.edn\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".eyaml\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".eyaml\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.eyaml"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.eyaml"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Hiera Eyaml}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.eyaml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.eyaml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.eyaml\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".eyml\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".eyml\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.eyml"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.eyml"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Hiera Eyaml}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.eyml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.eyml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.eyml\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".fs\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".fs\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.fs"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.fs"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,F#}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.fs"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.fs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.fs\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".fsi\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".fsi\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.fsi"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.fsi"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,F# Signature}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.fsi"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.fsi\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.fsi\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".fsscript\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".fsscript\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.fsscript"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.fsscript"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,F# Script}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.fsscript"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.fsscript\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.fsscript\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".fsx\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".fsx\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.fsx"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.fsx"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,F# Script}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.fsx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.fsx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.fsx\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".gemspec\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".gemspec\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.gemspec"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.gemspec"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Gemspec}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.gemspec"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.gemspec\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.gemspec\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".gitattributes\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".gitattributes\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.gitattributes"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.gitattributes"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Git Attributes}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.gitattributes"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.gitattributes"; ValueType: string; ValueName: "AlwaysShowExt"; ValueData: ""; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.gitattributes\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.gitattributes\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".gitconfig\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".gitconfig\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.gitconfig"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.gitconfig"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Git Config}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.gitconfig"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.gitconfig"; ValueType: string; ValueName: "AlwaysShowExt"; ValueData: ""; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.gitconfig\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.gitconfig\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".gitignore\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".gitignore\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.gitignore"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.gitignore"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Git Ignore}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.gitignore"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.gitignore"; ValueType: string; ValueName: "AlwaysShowExt"; ValueData: ""; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.gitignore\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.gitignore\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".go\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".go\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.go"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.go"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Go}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.go"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.go\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.go\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".h\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".h\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.h"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.h"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,C Header}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.h"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.h\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.h\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".handlebars\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".handlebars\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.handlebars"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.handlebars"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Handlebars}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.handlebars"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.handlebars\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.handlebars\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".hbs\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".hbs\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.hbs"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.hbs"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Handlebars}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.hbs"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.hbs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.hbs\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".hh\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".hh\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.hh"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.hh"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,C++ Header}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.hh"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.hh\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.hh\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".hpp\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".hpp\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.hpp"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.hpp"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,C++ Header}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.hpp"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.hpp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.hpp\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".htm\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".htm\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.htm"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.htm"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,HTML}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.htm"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.htm\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.htm\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".html\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".html\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.html"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.html"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,HTML}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.html"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.html\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.html\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".hxx\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".hxx\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.hxx"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.hxx"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,C++ Header}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.hxx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.hxx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.hxx\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".ini\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".ini\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.ini"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.ini"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,INI}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.ini"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.ini\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.ini\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".jade\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".jade\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.jade"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.jade"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Jade}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.jade"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.jade\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.jade\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".jav\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".jav\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.jav"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.jav"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Java}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.jav"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.jav\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.jav\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".java\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".java\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.java"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.java"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Java}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.java"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.java\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.java\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".js\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".js\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.js"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.js"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,JavaScript}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.js"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.js\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.js\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".jscsrc\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".jscsrc\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.jscsrc"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.jscsrc"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,JSCS RC}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.jscsrc"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.jscsrc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.jscsrc\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".jshintrc\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".jshintrc\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.jshintrc"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.jshintrc"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,JSHint RC}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.jshintrc"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.jshintrc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.jshintrc\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".jshtm\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".jshtm\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.jshtm"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.jshtm"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,JavaScript HTML Template}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.jshtm"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.jshtm\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.jshtm\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".json\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".json\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.json"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.json"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,JSON}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.json"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.json\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.json\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".jsp\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".jsp\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.jsp"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.jsp"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Java Server Pages}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.jsp"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.jsp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.jsp\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".less\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".less\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.less"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.less"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,LESS}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.less"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.less\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.less\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".lua\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".lua\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.lua"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.lua"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Lua}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.lua"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.lua\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.lua\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".m\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".m\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.m"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.m"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Objective C}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.m"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.m\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.m\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".makefile\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".makefile\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.makefile"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.makefile"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Makefile}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.makefile"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.makefile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.makefile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".markdown\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".markdown\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.markdown"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.markdown"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Markdown}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.markdown"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.markdown\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.markdown\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".md\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".md\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.md"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.md"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Markdown}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.md"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.md\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.md\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".mdoc\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".mdoc\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.mdoc"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mdoc"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,MDoc}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mdoc"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mdoc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mdoc\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".mdown\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".mdown\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.mdown"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mdown"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Markdown}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mdown"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mdown\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mdown\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".mdtext\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".mdtext\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.mdtext"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mdtext"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Markdown}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mdtext"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mdtext\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mdtext\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".mdtxt\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".mdtxt\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.mdtxt"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mdtxt"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Markdown}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mdtxt"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mdtxt\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mdtxt\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".mdwn\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".mdwn\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.mdwn"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mdwn"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Markdown}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mdwn"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mdwn\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mdwn\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".mkd\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".mkd\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.mkd"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mkd"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Markdown}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mkd"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mkd\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mkd\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".mkdn\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".mkdn\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.mkdn"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mkdn"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Markdown}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mkdn"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mkdn\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mkdn\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".ml\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".ml\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.ml"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.ml"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,OCaml}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.ml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.ml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.ml\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".mli\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".mli\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.mli"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mli"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,OCaml}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mli"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mli\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.mli\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".npmignore\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".npmignore\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.npmignore"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.npmignore"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,NPM Ignore}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.npmignore"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.npmignore"; ValueType: string; ValueName: "AlwaysShowExt"; ValueData: ""; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.npmignore\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.npmignore\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".php\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".php\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.php"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.php"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,PHP}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.php"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.php\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.php\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".phtml\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".phtml\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.phtml"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.phtml"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,PHP HTML}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.phtml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.phtml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.phtml\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".pl\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".pl\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.pl"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.pl"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Perl}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.pl"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.pl\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.pl\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".pl6\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".pl6\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.pl6"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.pl6"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Perl 6}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.pl6"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.pl6\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.pl6\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".pm\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".pm\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.pm"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.pm"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Perl Module}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.pm"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.pm\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.pm\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".pm6\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".pm6\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.pm6"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.pm6"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Perl 6 Module}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.pm6"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.pm6\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.pm6\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".pod\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".pod\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.pod"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.pod"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Perl POD}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.pod"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.pod\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.pod\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".pp\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".pp\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.pp"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.pp"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Perl}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.pp"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.pp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.pp\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".profile\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".profile\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.profile"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.profile"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Profile}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.profile"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.profile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.profile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".properties\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".properties\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.properties"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.properties"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Properties}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.properties"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.properties\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.properties\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".ps1\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".ps1\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.ps1"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.ps1"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,PowerShell}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.ps1"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.ps1\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.ps1\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".psd1\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".psd1\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.psd1"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.psd1"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,PowerShell Module Manifest}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.psd1"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.psd1\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.psd1\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".psgi\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".psgi\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.psgi"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.psgi"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Perl CGI}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.psgi"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.psgi\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.psgi\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".psm1\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".psm1\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.psm1"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.psm1"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,PowerShell Module}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.psm1"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.psm1\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.psm1\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".py\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".py\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.py"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.py"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Python}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.py"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.py\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.py\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".r\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".r\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.r"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.r"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,R}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.r"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.r\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.r\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".rb\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".rb\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.rb"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.rb"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Ruby}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.rb"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.rb\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.rb\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".rhistory\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".rhistory\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.rhistory"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.rhistory"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,R History}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.rhistory"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.rhistory\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.rhistory\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".rprofile\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".rprofile\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.rprofile"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.rprofile"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,R Profile}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.rprofile"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.rprofile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.rprofile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".rs\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".rs\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.rs"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.rs"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Rust}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.rs"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.rs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.rs\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".rt\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".rt\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.rt"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.rt"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Rich Text}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.rt"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.rt\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.rt\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".scss\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".scss\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.scss"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.scss"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Sass}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.scss"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.scss\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.scss\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".sh\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".sh\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.sh"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.sh"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,SH}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.sh"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.sh\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.sh\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".shtml\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".shtml\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.shtml"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.shtml"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,SHTML}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.shtml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.shtml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.shtml\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".sql\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".sql\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.sql"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.sql"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,SQL}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.sql"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.sql\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.sql\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".svg\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".svg\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.svg"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.svg"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,SVG}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.svg"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.svg\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.svg\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".svgz\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".svgz\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.svgz"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.svgz"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,SVGZ}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.svgz"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.svgz\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.svgz\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".t\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".t\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.t"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.t"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Perl}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.t"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.t\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.t\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".tex\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".tex\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.tex"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.tex"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,LaTeX}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.tex"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.tex\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.tex\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".ts\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".ts\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.ts"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.ts"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,TypeScript}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.ts"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.ts\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.ts\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".txt\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".txt\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.txt"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.txt"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Text}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.txt"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.txt\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.txt\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".vb\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".vb\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.vb"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.vb"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Visual Basic}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.vb"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.vb\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.vb\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".wxi\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".wxi\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.wxi"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.wxi"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,WiX Include}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.wxi"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.wxi\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.wxi\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".wxl\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".wxl\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.wxl"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.wxl"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,WiX Localization}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.wxl"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.wxl\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.wxl\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".wxs\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".wxs\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.wxs"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.wxs"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,WiX}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.wxs"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.wxs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.wxs\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".xaml\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".xaml\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.xaml"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.xaml"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,XAML}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.xaml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.xaml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.xaml\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".xml\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".xml\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.xml"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.xml"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,XML}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.xml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.xml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.xml\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".yaml\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".yaml\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.yaml"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.yaml"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Yaml}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.yaml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.yaml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.yaml\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".yml\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".yml\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.yml"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.yml"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Yaml}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.yml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.yml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.yml\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: ".zsh\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: ".zsh\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.zsh"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.zsh"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,ZSH}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.zsh"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.zsh\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
-Root: HKCR; Subkey: "{#RegValueName}.zsh\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
-
-Root: HKCR; Subkey: "{#RegValueName}SourceFile"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,{#NameLong}}"; Flags: uninsdeletekey
-Root: HKCR; Subkey: "{#RegValueName}SourceFile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"
-Root: HKCR; Subkey: "{#RegValueName}SourceFile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""
-
-Root: HKCR; Subkey: "Applications\{#ExeBasename}.exe"; ValueType: none; ValueName: ""; Flags: uninsdeletekey
-Root: HKCR; Subkey: "Applications\{#ExeBasename}.exe\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"
-Root: HKCR; Subkey: "Applications\{#ExeBasename}.exe\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""
-
-Root: HKCU; Subkey: "Environment"; ValueType: expandsz; ValueName: "Path"; ValueData: "{olddata};{app}\bin"; Tasks: addtopath; Check: NeedsAddPath(ExpandConstant('{app}\bin'))
-
-Root: HKCU; Subkey: "SOFTWARE\Classes\*\shell\{#RegValueName}"; ValueType: expandsz; ValueName: ""; ValueData: "Open w&ith {#ShellNameShort}"; Tasks: addcontextmenufiles; Flags: uninsdeletekey
-Root: HKCU; Subkey: "SOFTWARE\Classes\*\shell\{#RegValueName}"; ValueType: expandsz; ValueName: "Icon"; ValueData: "{app}\{#ExeBasename}.exe"; Tasks: addcontextmenufiles
-Root: HKCU; Subkey: "SOFTWARE\Classes\*\shell\{#RegValueName}\command"; ValueType: expandsz; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: addcontextmenufiles
-Root: HKCU; Subkey: "SOFTWARE\Classes\directory\shell\{#RegValueName}"; ValueType: expandsz; ValueName: ""; ValueData: "Open w&ith {#ShellNameShort}"; Tasks: addcontextmenufolders; Flags: uninsdeletekey
-Root: HKCU; Subkey: "SOFTWARE\Classes\directory\shell\{#RegValueName}"; ValueType: expandsz; ValueName: "Icon"; ValueData: "{app}\{#ExeBasename}.exe"; Tasks: addcontextmenufolders
-Root: HKCU; Subkey: "SOFTWARE\Classes\directory\shell\{#RegValueName}\command"; ValueType: expandsz; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%V"""; Tasks: addcontextmenufolders
-Root: HKCU; Subkey: "SOFTWARE\Classes\directory\background\shell\{#RegValueName}"; ValueType: expandsz; ValueName: ""; ValueData: "Open w&ith {#ShellNameShort}"; Tasks: addcontextmenufolders; Flags: uninsdeletekey
-Root: HKCU; Subkey: "SOFTWARE\Classes\directory\background\shell\{#RegValueName}"; ValueType: expandsz; ValueName: "Icon"; ValueData: "{app}\{#ExeBasename}.exe"; Tasks: addcontextmenufolders
-Root: HKCU; Subkey: "SOFTWARE\Classes\directory\background\shell\{#RegValueName}\command"; ValueType: expandsz; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%V"""; Tasks: addcontextmenufolders
-Root: HKCU; Subkey: "SOFTWARE\Classes\Drive\shell\{#RegValueName}"; ValueType: expandsz; ValueName: ""; ValueData: "Open w&ith {#ShellNameShort}"; Tasks: addcontextmenufolders; Flags: uninsdeletekey
-Root: HKCU; Subkey: "SOFTWARE\Classes\Drive\shell\{#RegValueName}"; ValueType: expandsz; ValueName: "Icon"; ValueData: "{app}\{#ExeBasename}.exe"; Tasks: addcontextmenufolders
-Root: HKCU; Subkey: "SOFTWARE\Classes\Drive\shell\{#RegValueName}\command"; ValueType: expandsz; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%V"""; Tasks: addcontextmenufolders
+#if "user" == InstallTarget
+#define SoftwareClassesRootKey "HKCU"
+#else
+#define SoftwareClassesRootKey "HKLM"
+#endif
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.ascx\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.ascx\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.ascx"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ascx"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,ASCX}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ascx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ascx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ascx\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.asp\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.asp\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.asp"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.asp"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,ASP}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.asp"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.asp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.asp\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.aspx\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.aspx\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.aspx"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.aspx"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,ASPX}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.aspx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.aspx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.aspx\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.bash\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.bash\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.bash"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Bash}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.bash_login\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.bash_login\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.bash_login"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_login"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Bash Login}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_login"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_login\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_login\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.bash_logout\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.bash_logout\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.bash_logout"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_logout"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Bash Logout}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_logout"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_logout\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_logout\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.bash_profile\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.bash_profile\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.bash_profile"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_profile"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Bash Profile}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_profile"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_profile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_profile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.bashrc\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.bashrc\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.bashrc"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bashrc"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Bash RC}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bashrc"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bashrc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bashrc\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.bib\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.bib\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.bib"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bib"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,BibTeX}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bib"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bib\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bib\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.bowerrc\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.bowerrc\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.bowerrc"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bowerrc"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Bower RC}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bowerrc"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bowerrc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bowerrc\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.c\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.c\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.c"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.c"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,C}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.c"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.c\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.c\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.cc\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.cc\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.cc"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cc"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,C++}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cc"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cc\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.clj\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.clj\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.clj"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.clj"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Clojure}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.clj"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.clj\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.clj\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.cljs\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.cljs\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.cljs"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cljs"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,ClojureScript}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cljs"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cljs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cljs\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.cljx\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.cljx\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.cljx"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cljx"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,CLJX}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cljx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cljx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cljx\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.clojure\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.clojure\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.clojure"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.clojure"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Clojure}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.clojure"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.clojure\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.clojure\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.code-workspace\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.code-workspace\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.code-workspace"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.code-workspace"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Code Workspace}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.code"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.code-workspace\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.code-workspace\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.coffee\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.coffee\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.coffee"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.coffee"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,CoffeeScript}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.coffee"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.coffee\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.coffee\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.config\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.config\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.config"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.config"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Configuration}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.config"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.config\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.config\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.cpp\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.cpp\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.cpp"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cpp"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,C++}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cpp"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cpp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cpp\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.cs\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.cs\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.cs"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cs"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,C#}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cs"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cs\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.cshtml\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.cshtml\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.cshtml"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cshtml"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,CSHTML}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cshtml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cshtml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cshtml\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.csproj\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.csproj\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.csproj"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csproj"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,C# Project}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csproj"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csproj\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csproj\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.css\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.css\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.css"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.css"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,CSS}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.css"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.css\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.css\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.csx\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.csx\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.csx"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csx"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,C# Script}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csx\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.ctp\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.ctp\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.ctp"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ctp"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,CakePHP Template}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ctp"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ctp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ctp\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.cxx\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.cxx\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.cxx"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cxx"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,C++}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cxx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cxx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cxx\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.dockerfile\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.dockerfile\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.dockerfile"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dockerfile"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Dockerfile}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dockerfile"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dockerfile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dockerfile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.dot\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.dot\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.dot"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dot"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Dot}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dot"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dot\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dot\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.dtd\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.dtd\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.dtd"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dtd"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Document Type Definition}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dtd"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dtd\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dtd\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.editorconfig\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.editorconfig\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.editorconfig"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.editorconfig"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Editor Config}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.editorconfig"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.editorconfig\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.editorconfig\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.edn\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.edn\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.edn"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.edn"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Extensible Data Notation}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.edn"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.edn\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.edn\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.eyaml\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.eyaml\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.eyaml"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.eyaml"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Hiera Eyaml}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.eyaml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.eyaml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.eyaml\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.eyml\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.eyml\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.eyml"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.eyml"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Hiera Eyaml}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.eyml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.eyml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.eyml\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.fs\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.fs\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.fs"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fs"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,F#}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fs"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fs\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.fsi\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.fsi\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.fsi"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsi"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,F# Signature}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsi"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsi\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsi\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.fsscript\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.fsscript\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.fsscript"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsscript"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,F# Script}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsscript"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsscript\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsscript\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.fsx\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.fsx\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.fsx"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsx"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,F# Script}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsx\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.gemspec\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.gemspec\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.gemspec"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gemspec"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Gemspec}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gemspec"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gemspec\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gemspec\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.gitattributes\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.gitattributes\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.gitattributes"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitattributes"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Git Attributes}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitattributes"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitattributes"; ValueType: string; ValueName: "AlwaysShowExt"; ValueData: ""; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitattributes\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitattributes\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.gitconfig\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.gitconfig\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.gitconfig"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitconfig"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Git Config}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitconfig"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitconfig"; ValueType: string; ValueName: "AlwaysShowExt"; ValueData: ""; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitconfig\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitconfig\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.gitignore\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.gitignore\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.gitignore"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitignore"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Git Ignore}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitignore"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitignore"; ValueType: string; ValueName: "AlwaysShowExt"; ValueData: ""; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitignore\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitignore\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.go\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.go\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.go"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.go"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Go}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.go"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.go\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.go\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.h\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.h\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.h"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.h"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,C Header}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.h"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.h\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.h\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.handlebars\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.handlebars\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.handlebars"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.handlebars"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Handlebars}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.handlebars"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.handlebars\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.handlebars\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.hbs\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.hbs\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.hbs"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hbs"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Handlebars}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hbs"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hbs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hbs\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.hh\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.hh\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.hh"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hh"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,C++ Header}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hh"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hh\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hh\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.hpp\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.hpp\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.hpp"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hpp"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,C++ Header}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hpp"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hpp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hpp\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.htm\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.htm\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.htm"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.htm"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,HTML}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.htm"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.htm\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.htm\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.html\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.html\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.html"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.html"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,HTML}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.html"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.html\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.html\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.hxx\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.hxx\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.hxx"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hxx"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,C++ Header}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hxx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hxx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hxx\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.ini\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.ini\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.ini"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ini"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,INI}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ini"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ini\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ini\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.jade\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.jade\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.jade"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jade"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Jade}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jade"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jade\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jade\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.jav\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.jav\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.jav"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jav"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Java}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jav"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jav\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jav\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.java\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.java\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.java"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.java"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Java}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.java"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.java\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.java\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.js\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.js\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.js"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.js"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,JavaScript}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.js"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.js\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.js\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.jscsrc\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.jscsrc\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.jscsrc"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jscsrc"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,JSCS RC}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jscsrc"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jscsrc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jscsrc\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.jshintrc\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.jshintrc\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.jshintrc"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jshintrc"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,JSHint RC}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jshintrc"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jshintrc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jshintrc\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.jshtm\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.jshtm\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.jshtm"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jshtm"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,JavaScript HTML Template}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jshtm"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jshtm\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jshtm\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.json\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.json\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.json"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.json"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,JSON}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.json"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.json\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.json\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.jsp\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.jsp\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.jsp"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jsp"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Java Server Pages}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jsp"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jsp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jsp\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.less\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.less\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.less"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.less"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,LESS}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.less"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.less\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.less\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.lua\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.lua\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.lua"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.lua"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Lua}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.lua"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.lua\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.lua\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.m\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.m\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.m"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.m"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Objective C}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.m"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.m\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.m\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.makefile\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.makefile\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.makefile"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.makefile"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Makefile}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.makefile"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.makefile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.makefile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.markdown\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.markdown\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.markdown"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.markdown"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Markdown}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.markdown"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.markdown\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.markdown\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.md\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.md\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.md"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.md"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Markdown}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.md"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.md\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.md\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.mdoc\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.mdoc\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.mdoc"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdoc"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,MDoc}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdoc"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdoc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdoc\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.mdown\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.mdown\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.mdown"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdown"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Markdown}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdown"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdown\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdown\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.mdtext\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.mdtext\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.mdtext"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdtext"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Markdown}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdtext"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdtext\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdtext\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.mdtxt\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.mdtxt\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.mdtxt"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdtxt"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Markdown}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdtxt"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdtxt\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdtxt\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.mdwn\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.mdwn\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.mdwn"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdwn"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Markdown}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdwn"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdwn\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdwn\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.mkd\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.mkd\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.mkd"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mkd"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Markdown}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mkd"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mkd\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mkd\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.mkdn\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.mkdn\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.mkdn"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mkdn"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Markdown}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mkdn"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mkdn\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mkdn\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.ml\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.ml\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.ml"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ml"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,OCaml}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ml\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.mli\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.mli\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.mli"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mli"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,OCaml}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mli"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mli\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mli\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.npmignore\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.npmignore\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.npmignore"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.npmignore"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,NPM Ignore}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.npmignore"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.npmignore"; ValueType: string; ValueName: "AlwaysShowExt"; ValueData: ""; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.npmignore\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.npmignore\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.php\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.php\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.php"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.php"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,PHP}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.php"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.php\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.php\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.phtml\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.phtml\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.phtml"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.phtml"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,PHP HTML}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.phtml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.phtml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.phtml\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.pl\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.pl\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.pl"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pl"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Perl}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pl"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pl\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pl\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.pl6\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.pl6\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.pl6"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pl6"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Perl 6}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pl6"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pl6\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pl6\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.pm\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.pm\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.pm"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pm"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Perl Module}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pm"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pm\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pm\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.pm6\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.pm6\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.pm6"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pm6"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Perl 6 Module}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pm6"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pm6\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pm6\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.pod\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.pod\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.pod"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pod"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Perl POD}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pod"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pod\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pod\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.pp\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.pp\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.pp"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pp"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Perl}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pp"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pp\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.profile\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.profile\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.profile"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.profile"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Profile}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.profile"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.profile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.profile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.properties\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.properties\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.properties"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.properties"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Properties}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.properties"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.properties\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.properties\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.ps1\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.ps1\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.ps1"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ps1"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,PowerShell}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ps1"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ps1\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ps1\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.psd1\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.psd1\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.psd1"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psd1"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,PowerShell Module Manifest}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psd1"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psd1\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psd1\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.psgi\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.psgi\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.psgi"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psgi"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Perl CGI}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psgi"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psgi\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psgi\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.psm1\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.psm1\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.psm1"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psm1"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,PowerShell Module}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psm1"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psm1\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psm1\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.py\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.py\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.py"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.py"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Python}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.py"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.py\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.py\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.r\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.r\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.r"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.r"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,R}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.r"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.r\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.r\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.rb\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.rb\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.rb"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rb"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Ruby}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rb"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rb\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rb\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.rhistory\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.rhistory\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.rhistory"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rhistory"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,R History}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rhistory"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rhistory\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rhistory\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.rprofile\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.rprofile\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.rprofile"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rprofile"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,R Profile}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rprofile"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rprofile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rprofile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.rs\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.rs\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.rs"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rs"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Rust}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rs"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rs\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.rt\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.rt\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.rt"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rt"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Rich Text}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rt"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rt\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rt\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.scss\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.scss\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.scss"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.scss"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Sass}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.scss"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.scss\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.scss\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.sh\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.sh\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.sh"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sh"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,SH}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sh"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sh\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sh\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.shtml\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.shtml\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.shtml"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.shtml"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,SHTML}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.shtml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.shtml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.shtml\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.sql\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.sql\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.sql"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sql"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,SQL}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sql"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sql\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sql\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.svg\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.svg\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.svg"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.svg"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,SVG}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.svg"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.svg\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.svg\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.svgz\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.svgz\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.svgz"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.svgz"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,SVGZ}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.svgz"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.svgz\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.svgz\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.t\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.t\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.t"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.t"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Perl}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.t"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.t\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.t\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.tex\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.tex\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.tex"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.tex"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,LaTeX}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.tex"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.tex\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.tex\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.ts\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.ts\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.ts"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ts"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,TypeScript}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ts"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ts\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ts\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.txt\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.txt\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.txt"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.txt"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Text}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.txt"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.txt\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.txt\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.vb\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.vb\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.vb"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.vb"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Visual Basic}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.vb"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.vb\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.vb\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.wxi\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.wxi\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.wxi"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxi"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,WiX Include}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxi"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxi\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxi\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.wxl\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.wxl\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.wxl"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxl"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,WiX Localization}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxl"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxl\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxl\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.wxs\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.wxs\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.wxs"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxs"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,WiX}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxs"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxs\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.xaml\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.xaml\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.xaml"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xaml"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,XAML}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xaml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xaml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xaml\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.xml\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.xml\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.xml"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xml"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,XML}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xml\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.yaml\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.yaml\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.yaml"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.yaml"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Yaml}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.yaml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.yaml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.yaml\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.yml\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.yml\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.yml"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.yml"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Yaml}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.yml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.yml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.yml\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.zsh\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.zsh\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.zsh"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.zsh"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,ZSH}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.zsh"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.zsh\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"; Tasks: associatewithfiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.zsh\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}SourceFile"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,{#NameLong}}"; Flags: uninsdeletekey
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}SourceFile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}SourceFile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\Applications\{#ExeBasename}.exe"; ValueType: none; ValueName: ""; Flags: uninsdeletekey
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\Applications\{#ExeBasename}.exe\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\code_file.ico"
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\Applications\{#ExeBasename}.exe\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""
+
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\*\shell\{#RegValueName}"; ValueType: expandsz; ValueName: ""; ValueData: "Open w&ith {#ShellNameShort}"; Tasks: addcontextmenufiles; Flags: uninsdeletekey
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\*\shell\{#RegValueName}"; ValueType: expandsz; ValueName: "Icon"; ValueData: "{app}\{#ExeBasename}.exe"; Tasks: addcontextmenufiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\*\shell\{#RegValueName}\command"; ValueType: expandsz; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: addcontextmenufiles
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\directory\shell\{#RegValueName}"; ValueType: expandsz; ValueName: ""; ValueData: "Open w&ith {#ShellNameShort}"; Tasks: addcontextmenufolders; Flags: uninsdeletekey
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\directory\shell\{#RegValueName}"; ValueType: expandsz; ValueName: "Icon"; ValueData: "{app}\{#ExeBasename}.exe"; Tasks: addcontextmenufolders
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\directory\shell\{#RegValueName}\command"; ValueType: expandsz; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%V"""; Tasks: addcontextmenufolders
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\directory\background\shell\{#RegValueName}"; ValueType: expandsz; ValueName: ""; ValueData: "Open w&ith {#ShellNameShort}"; Tasks: addcontextmenufolders; Flags: uninsdeletekey
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\directory\background\shell\{#RegValueName}"; ValueType: expandsz; ValueName: "Icon"; ValueData: "{app}\{#ExeBasename}.exe"; Tasks: addcontextmenufolders
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\directory\background\shell\{#RegValueName}\command"; ValueType: expandsz; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%V"""; Tasks: addcontextmenufolders
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\Drive\shell\{#RegValueName}"; ValueType: expandsz; ValueName: ""; ValueData: "Open w&ith {#ShellNameShort}"; Tasks: addcontextmenufolders; Flags: uninsdeletekey
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\Drive\shell\{#RegValueName}"; ValueType: expandsz; ValueName: "Icon"; ValueData: "{app}\{#ExeBasename}.exe"; Tasks: addcontextmenufolders
+Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\Drive\shell\{#RegValueName}\command"; ValueType: expandsz; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%V"""; Tasks: addcontextmenufolders
+
+; Environment
+#if "user" == InstallTarget
+#define EnvironmentRootKey "HKCU"
+#define EnvironmentKey "Environment"
+#define Uninstall64RootKey "HKCU64"
+#define Uninstall32RootKey "HKCU32"
+#else
+#define EnvironmentRootKey "HKLM"
+#define EnvironmentKey "System\CurrentControlSet\Control\Session Manager\Environment"
+#define Uninstall64RootKey "HKLM64"
+#define Uninstall32RootKey "HKLM32"
+#endif
+
+Root: {#EnvironmentRootKey}; Subkey: "{#EnvironmentKey}"; ValueType: expandsz; ValueName: "Path"; ValueData: "{olddata};{app}\bin"; Tasks: addtopath; Check: NeedsAddPath(ExpandConstant('{app}\bin'))
[Code]
// Don't allow installing conflicting architectures
@@ -937,15 +964,33 @@ var
begin
Result := True;
- if IsWin64 then begin
- RegKey := 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + copy('{#IncompatibleAppId}', 2, 38) + '_is1';
+ #if "user" == InstallTarget
+ #if "ia32" == Arch
+ #define IncompatibleArchRootKey "HKLM32"
+ #else
+ #define IncompatibleArchRootKey "HKLM64"
+ #endif
+
+ if not WizardSilent() then begin
+ RegKey := 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + copy('{#IncompatibleTargetAppId}', 2, 38) + '_is1';
+
+ if RegKeyExists({#IncompatibleArchRootKey}, RegKey) then begin
+ if MsgBox('{#NameShort} is already installed on this system for all users. We recommend first uninstalling that version before installing this one. Are you sure you want to continue the installation?', mbConfirmation, MB_YESNO) = IDNO then begin
+ Result := false;
+ end;
+ end;
+ end;
+ #endif
+
+ if Result and IsWin64 then begin
+ RegKey := 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + copy('{#IncompatibleArchAppId}', 2, 38) + '_is1';
if '{#Arch}' = 'ia32' then begin
- Result := not RegKeyExists(HKLM64, RegKey);
+ Result := not RegKeyExists({#Uninstall64RootKey}, RegKey);
ThisArch := '32';
AltArch := '64';
end else begin
- Result := not RegKeyExists(HKLM32, RegKey);
+ Result := not RegKeyExists({#Uninstall32RootKey}, RegKey);
ThisArch := '64';
AltArch := '32';
end;
@@ -1054,7 +1099,7 @@ function NeedsAddPath(Param: string): boolean;
var
OrigPath: string;
begin
- if not RegQueryStringValue(HKEY_CURRENT_USER, 'Environment', 'Path', OrigPath)
+ if not RegQueryStringValue({#EnvironmentRootKey}, '{#EnvironmentKey}', 'Path', OrigPath)
then begin
Result := True;
exit;
@@ -1073,7 +1118,7 @@ begin
if not CurUninstallStep = usUninstall then begin
exit;
end;
- if not RegQueryStringValue(HKEY_CURRENT_USER, 'Environment', 'Path', Path)
+ if not RegQueryStringValue({#EnvironmentRootKey}, '{#EnvironmentKey}', 'Path', Path)
then begin
exit;
end;
@@ -1089,5 +1134,9 @@ begin
end;
end;
end;
- RegWriteExpandStringValue(HKEY_CURRENT_USER, 'Environment', 'Path', NewPath);
+ RegWriteExpandStringValue({#EnvironmentRootKey}, '{#EnvironmentKey}', 'Path', NewPath);
end;
+
+#ifdef Debug
+ #expr SaveToFile(AddBackslash(SourcePath) + "code-processed.iss")
+#endif
diff --git a/build/win32/i18n/Default.isl b/build/win32/i18n/Default.isl
index fdcfbb16568..370da6b37c7 100644
--- a/build/win32/i18n/Default.isl
+++ b/build/win32/i18n/Default.isl
@@ -9,7 +9,7 @@
; two periods being displayed).
[LangOptions]
-; The following three entries are very important. Be sure to read and
+; The following three entries are very important. Be sure to read and
; understand the '[LangOptions] section' topic in the help file.
LanguageName=English
LanguageID=$0409
@@ -216,7 +216,7 @@ InstallingLabel=Please wait while Setup installs [name] on your computer.
; *** "Setup Completed" wizard page
FinishedHeadingLabel=Completing the [name] Setup Wizard
FinishedLabelNoIcons=Setup has finished installing [name] on your computer.
-FinishedLabel=Setup has finished installing [name] on your computer. The application may be launched by selecting the installed shortcuts.
+FinishedLabel=Setup has finished installing [name] on your computer. The application may be launched by selecting the installed icons.
ClickFinish=Click Finish to exit Setup.
FinishedRestartLabel=To complete the installation of [name], Setup must restart your computer. Would you like to restart now?
FinishedRestartMessage=To complete the installation of [name], Setup must restart your computer.%n%nWould you like to restart now?
@@ -296,7 +296,7 @@ UninstallNotFound=File "%1" does not exist. Cannot uninstall.
UninstallOpenError=File "%1" could not be opened. Cannot uninstall
UninstallUnsupportedVer=The uninstall log file "%1" is in a format not recognized by this version of the uninstaller. Cannot uninstall
UninstallUnknownEntry=An unknown entry (%1) was encountered in the uninstall log
-ConfirmUninstall=Are you sure you want to completely remove %1 and all of its components?
+ConfirmUninstall=Are you sure you want to completely remove %1? Extensions and settings will not be removed.
UninstallOnlyOnWin64=This installation can only be uninstalled on 64-bit Windows.
OnlyAdminCanUninstall=This installation can only be uninstalled by a user with administrative privileges.
UninstallStatusLabel=Please wait while %1 is removed from your computer.
@@ -323,9 +323,9 @@ ShutdownBlockReasonUninstallingApp=Uninstalling %1.
[CustomMessages]
NameAndVersion=%1 version %2
-AdditionalIcons=Additional shortcuts:
-CreateDesktopIcon=Create a &desktop shortcut
-CreateQuickLaunchIcon=Create a &Quick Launch shortcut
+AdditionalIcons=Additional icons:
+CreateDesktopIcon=Create a &desktop icon
+CreateQuickLaunchIcon=Create a &Quick Launch icon
ProgramOnTheWeb=%1 on the Web
UninstallProgram=Uninstall %1
LaunchProgram=Launch %1
@@ -334,4 +334,3 @@ AssocingFileExtension=Associating %1 with the %2 file extension...
AutoStartProgramGroupDescription=Startup:
AutoStartProgram=Automatically start %1
AddonHostProgramNotFound=%1 could not be located in the folder you selected.%n%nDo you want to continue anyway?
-
diff --git a/build/win32/inno_updater.exe b/build/win32/inno_updater.exe
old mode 100755
new mode 100644
index 6d83b2b748b..9a2a7848ffe
Binary files a/build/win32/inno_updater.exe and b/build/win32/inno_updater.exe differ
diff --git a/build/yarn.lock b/build/yarn.lock
index ac6150fcf60..e36dc85525d 100644
--- a/build/yarn.lock
+++ b/build/yarn.lock
@@ -652,9 +652,9 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0:
version "0.14.5"
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
-typescript@2.9.1:
- version "2.9.1"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.9.1.tgz#fdb19d2c67a15d11995fd15640e373e09ab09961"
+typescript@3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.0.3.tgz#4853b3e275ecdaa27f78fda46dc273a7eb7fc1c8"
underscore@1.8.3, underscore@~1.8.3:
version "1.8.3"
diff --git a/extensions/bat/syntaxes/batchfile.tmLanguage.json b/extensions/bat/syntaxes/batchfile.tmLanguage.json
index e5f00ed3827..26ae88f43c5 100644
--- a/extensions/bat/syntaxes/batchfile.tmLanguage.json
+++ b/extensions/bat/syntaxes/batchfile.tmLanguage.json
@@ -4,7 +4,7 @@
"If you want to provide a fix or improvement, please create a pull request against the original repository.",
"Once accepted there, we are happy to receive an update request."
],
- "version": "https://github.com/mmims/language-batchfile/commit/6235c491be4dff49cd3966b50142874d7f79580a",
+ "version": "https://github.com/mmims/language-batchfile/commit/4b67596631b4ecd2c89c2ec1b2e08a6623438903",
"name": "Batch File",
"scopeName": "source.batchfile",
"patterns": [
@@ -163,12 +163,6 @@
"end": "(?=$\\n|[&|><)])",
"name": "meta.expression.set.batchfile",
"patterns": [
- {
- "include": "#command_set_inside_arithmetic"
- },
- {
- "include": "#command_set_group"
- },
{
"begin": "\"",
"beginCaptures": {
@@ -194,6 +188,12 @@
"include": "#variables"
}
]
+ },
+ {
+ "include": "#command_set_inside_arithmetic"
+ },
+ {
+ "include": "#command_set_group"
}
]
},
@@ -266,8 +266,15 @@
"command_set_operators": {
"patterns": [
{
- "match": "\\+\\=|\\-\\=|\\*\\=|/\\=|%%\\=|&\\=|\\|\\=|\\^\\=|<<\\=|>>\\=",
- "name": "keyword.operator.assignment.augmented.batchfile"
+ "match": "([^ ]*)(\\+\\=|\\-\\=|\\*\\=|\\/\\=|%%\\=|&\\=|\\|\\=|\\^\\=|<<\\=|>>\\=)",
+ "captures": {
+ "1": {
+ "name": "variable.other.readwrite.batchfile"
+ },
+ "2": {
+ "name": "keyword.operator.assignment.augmented.batchfile"
+ }
+ }
},
{
"match": "\\+|\\-|/|\\*|%%|\\||&|\\^|<<|>>|~",
@@ -278,8 +285,15 @@
"name": "keyword.operator.logical.batchfile"
},
{
- "match": "=",
- "name": "keyword.operator.assignment.batchfile"
+ "match": "([^ ][^=]*)(=)",
+ "captures": {
+ "1": {
+ "name": "variable.other.readwrite.batchfile"
+ },
+ "2": {
+ "name": "keyword.operator.assignment.batchfile"
+ }
+ }
}
]
},
diff --git a/extensions/bat/test/colorize-results/test_bat.json b/extensions/bat/test/colorize-results/test_bat.json
index 3c2abc5d2dc..97155fafc8b 100644
--- a/extensions/bat/test/colorize-results/test_bat.json
+++ b/extensions/bat/test/colorize-results/test_bat.json
@@ -135,9 +135,9 @@
"c": "::",
"t": "source.batchfile comment.line.colon.batchfile punctuation.definition.comment.batchfile",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -146,9 +146,9 @@
"c": " Node modules",
"t": "source.batchfile comment.line.colon.batchfile",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -245,9 +245,9 @@
"c": "::",
"t": "source.batchfile comment.line.colon.batchfile punctuation.definition.comment.batchfile",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -256,9 +256,9 @@
"c": " Get electron",
"t": "source.batchfile comment.line.colon.batchfile",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -278,9 +278,9 @@
"c": "::",
"t": "source.batchfile comment.line.colon.batchfile punctuation.definition.comment.batchfile",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -289,9 +289,9 @@
"c": " Build",
"t": "source.batchfile comment.line.colon.batchfile",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -366,9 +366,9 @@
"c": "::",
"t": "source.batchfile comment.line.colon.batchfile punctuation.definition.comment.batchfile",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -377,9 +377,9 @@
"c": " Configuration",
"t": "source.batchfile comment.line.colon.batchfile",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
diff --git a/extensions/clojure/test/colorize-results/test_clj.json b/extensions/clojure/test/colorize-results/test_clj.json
index 8a704fb9683..b7dd17d91e8 100644
--- a/extensions/clojure/test/colorize-results/test_clj.json
+++ b/extensions/clojure/test/colorize-results/test_clj.json
@@ -3,9 +3,9 @@
"c": ";",
"t": "source.clojure comment.line.semicolon.clojure punctuation.definition.comment.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -14,9 +14,9 @@
"c": "; from http://clojure-doc.org/articles/tutorials/introduction.html",
"t": "source.clojure comment.line.semicolon.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -311,9 +311,9 @@
"c": ";",
"t": "source.clojure comment.line.semicolon.clojure punctuation.definition.comment.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -322,9 +322,9 @@
"c": " A vector",
"t": "source.clojure comment.line.semicolon.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -905,9 +905,9 @@
"c": ";",
"t": "source.clojure comment.line.semicolon.clojure punctuation.definition.comment.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -916,9 +916,9 @@
"c": " this is more typical usage.",
"t": "source.clojure comment.line.semicolon.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1433,9 +1433,9 @@
"c": ";",
"t": "source.clojure comment.line.semicolon.clojure punctuation.definition.comment.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1444,9 +1444,9 @@
"c": "; ⇒ (+ 1 2 3)",
"t": "source.clojure comment.line.semicolon.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1840,9 +1840,9 @@
"c": ";",
"t": "source.clojure comment.line.semicolon.clojure punctuation.definition.comment.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1851,9 +1851,9 @@
"c": "; Vectors",
"t": "source.clojure comment.line.semicolon.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2236,9 +2236,9 @@
"c": ";",
"t": "source.clojure comment.line.semicolon.clojure punctuation.definition.comment.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2247,9 +2247,9 @@
"c": " ⇒ [:a :b :c :d]",
"t": "source.clojure comment.line.semicolon.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2346,9 +2346,9 @@
"c": ";",
"t": "source.clojure comment.line.semicolon.clojure punctuation.definition.comment.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2357,9 +2357,9 @@
"c": " ⇒ (:d :a :b :c)",
"t": "source.clojure comment.line.semicolon.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2390,9 +2390,9 @@
"c": ";",
"t": "source.clojure comment.line.semicolon.clojure punctuation.definition.comment.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2401,9 +2401,9 @@
"c": " ⇒ is still [:a :b :c]",
"t": "source.clojure comment.line.semicolon.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2434,9 +2434,9 @@
"c": ";",
"t": "source.clojure comment.line.semicolon.clojure punctuation.definition.comment.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2445,9 +2445,9 @@
"c": " ⇒ is still (:a :b :c)",
"t": "source.clojure comment.line.semicolon.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2456,9 +2456,9 @@
"c": ";",
"t": "source.clojure comment.line.semicolon.clojure punctuation.definition.comment.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2467,9 +2467,9 @@
"c": "; Maps",
"t": "source.clojure comment.line.semicolon.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2753,9 +2753,9 @@
"c": ";",
"t": "source.clojure comment.line.semicolon.clojure punctuation.definition.comment.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2764,9 +2764,9 @@
"c": " ⇒ {:a 1 :c 3 :b 2}",
"t": "source.clojure comment.line.semicolon.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2863,9 +2863,9 @@
"c": ";",
"t": "source.clojure comment.line.semicolon.clojure punctuation.definition.comment.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2874,9 +2874,9 @@
"c": " ⇒ {:a 1}",
"t": "source.clojure comment.line.semicolon.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -3050,9 +3050,9 @@
"c": ";",
"t": "source.clojure comment.line.semicolon.clojure punctuation.definition.comment.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -3061,9 +3061,9 @@
"c": "; ⇒ #'user/my-atom",
"t": "source.clojure comment.line.semicolon.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -3094,9 +3094,9 @@
"c": ";",
"t": "source.clojure comment.line.semicolon.clojure punctuation.definition.comment.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -3105,9 +3105,9 @@
"c": "; ⇒ {:foo 1}",
"t": "source.clojure comment.line.semicolon.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -3259,9 +3259,9 @@
"c": ";",
"t": "source.clojure comment.line.semicolon.clojure punctuation.definition.comment.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -3270,9 +3270,9 @@
"c": "; ⇒ {:foo 2}",
"t": "source.clojure comment.line.semicolon.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -3303,9 +3303,9 @@
"c": ";",
"t": "source.clojure comment.line.semicolon.clojure punctuation.definition.comment.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -3314,9 +3314,9 @@
"c": "; ⇒ {:foo 2}",
"t": "source.clojure comment.line.semicolon.clojure",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
diff --git a/extensions/coffeescript/test/colorize-results/test-regex_coffee.json b/extensions/coffeescript/test/colorize-results/test-regex_coffee.json
index ad11ba9d687..9daab0d5533 100644
--- a/extensions/coffeescript/test/colorize-results/test-regex_coffee.json
+++ b/extensions/coffeescript/test/colorize-results/test-regex_coffee.json
@@ -575,9 +575,9 @@
"c": "#",
"t": "source.coffee comment.line.number-sign.coffee punctuation.definition.comment.coffee",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -586,9 +586,9 @@
"c": " numbers",
"t": "source.coffee comment.line.number-sign.coffee",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -663,9 +663,9 @@
"c": "#",
"t": "source.coffee comment.line.number-sign.coffee punctuation.definition.comment.coffee",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -674,9 +674,9 @@
"c": " letters",
"t": "source.coffee comment.line.number-sign.coffee",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -696,9 +696,9 @@
"c": "#",
"t": "source.coffee comment.line.number-sign.coffee punctuation.definition.comment.coffee",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -707,9 +707,9 @@
"c": " the end",
"t": "source.coffee comment.line.number-sign.coffee",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
diff --git a/extensions/coffeescript/test/colorize-results/test_coffee.json b/extensions/coffeescript/test/colorize-results/test_coffee.json
index e7eae7d047f..d3de07d3f82 100644
--- a/extensions/coffeescript/test/colorize-results/test_coffee.json
+++ b/extensions/coffeescript/test/colorize-results/test_coffee.json
@@ -1433,9 +1433,9 @@
"c": "#",
"t": "source.coffee string.regexp.multiline.coffee comment.line.number-sign.coffee punctuation.definition.comment.coffee",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1444,9 +1444,9 @@
"c": " numbers",
"t": "source.coffee string.regexp.multiline.coffee comment.line.number-sign.coffee",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1521,9 +1521,9 @@
"c": "#",
"t": "source.coffee string.regexp.multiline.coffee comment.line.number-sign.coffee punctuation.definition.comment.coffee",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1532,9 +1532,9 @@
"c": " letters",
"t": "source.coffee string.regexp.multiline.coffee comment.line.number-sign.coffee",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1576,9 +1576,9 @@
"c": "#",
"t": "source.coffee string.regexp.multiline.coffee comment.line.number-sign.coffee punctuation.definition.comment.coffee",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1587,9 +1587,9 @@
"c": " the end",
"t": "source.coffee string.regexp.multiline.coffee comment.line.number-sign.coffee",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
diff --git a/extensions/configuration-editing/extension.webpack.config.js b/extensions/configuration-editing/extension.webpack.config.js
new file mode 100644
index 00000000000..b474e65cbb1
--- /dev/null
+++ b/extensions/configuration-editing/extension.webpack.config.js
@@ -0,0 +1,20 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+//@ts-check
+
+'use strict';
+
+const withDefaults = require('../shared.webpack.config');
+
+module.exports = withDefaults({
+ context: __dirname,
+ entry: {
+ extension: './src/extension.ts',
+ },
+ resolve: {
+ mainFields: ['module', 'main']
+ }
+});
diff --git a/extensions/configuration-editing/package.json b/extensions/configuration-editing/package.json
index e66a313c9f6..46f4eba3a95 100644
--- a/extensions/configuration-editing/package.json
+++ b/extensions/configuration-editing/package.json
@@ -17,8 +17,8 @@
"watch": "gulp watch-extension:configuration-editing"
},
"dependencies": {
- "jsonc-parser": "^1.0.0",
- "vscode-nls": "^3.2.1"
+ "jsonc-parser": "2.0.2",
+ "vscode-nls": "^4.0.0"
},
"contributes": {
"languages": [
@@ -96,6 +96,6 @@
]
},
"devDependencies": {
- "@types/node": "7.0.4"
+ "@types/node": "^8.10.25"
}
-}
\ No newline at end of file
+}
diff --git a/extensions/configuration-editing/package.nls.json b/extensions/configuration-editing/package.nls.json
index b8c247a9de3..20a9c1af8b7 100644
--- a/extensions/configuration-editing/package.nls.json
+++ b/extensions/configuration-editing/package.nls.json
@@ -1,4 +1,4 @@
{
"displayName": "Configuration Editing",
- "description": "Provides capabilities (advanced IntelliSense, auto-fixing) in configuration files like settings, launch and extension recommendation files."
+ "description": "Provides capabilities (advanced IntelliSense, auto-fixing) in configuration files like settings, launch, and extension recommendation files."
}
\ No newline at end of file
diff --git a/extensions/configuration-editing/src/extension.ts b/extensions/configuration-editing/src/extension.ts
index 68dbbf165b4..f6ec0b625e7 100644
--- a/extensions/configuration-editing/src/extension.ts
+++ b/extensions/configuration-editing/src/extension.ts
@@ -11,8 +11,8 @@ import { getLocation, visit, parse, ParseErrorCode } from 'jsonc-parser';
import * as path from 'path';
import { SettingsDocument } from './settingsDocumentHelper';
-const decoration = vscode.window.createTextEditorDecorationType({
- color: '#9e9e9e'
+const fadedDecoration = vscode.window.createTextEditorDecorationType({
+ color: '#777'
});
let pendingLaunchJsonDecoration: NodeJS.Timer;
@@ -241,7 +241,7 @@ function updateLaunchJsonDecorations(editor: vscode.TextEditor | undefined): voi
}
});
- editor.setDecorations(decoration, ranges);
+ editor.setDecorations(fadedDecoration, ranges);
}
vscode.languages.registerDocumentSymbolProvider({ pattern: '**/launch.json', language: 'jsonc' }, {
diff --git a/extensions/configuration-editing/yarn.lock b/extensions/configuration-editing/yarn.lock
index 29d3d43ae80..c74f1de37ba 100644
--- a/extensions/configuration-editing/yarn.lock
+++ b/extensions/configuration-editing/yarn.lock
@@ -2,14 +2,14 @@
# yarn lockfile v1
-"@types/node@7.0.4":
- version "7.0.4"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.4.tgz#9aabc135979ded383325749f508894c662948c8b"
+"@types/node@^8.10.25":
+ version "8.10.25"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.25.tgz#801fe4e39372cef18f268db880a5fbfcf71adc7e"
-jsonc-parser@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-1.0.0.tgz#ddcc864ae708e60a7a6dd36daea00172fa8d9272"
+jsonc-parser@2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-2.0.2.tgz#42fcf56d70852a043fadafde51ddb4a85649978d"
-vscode-nls@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.1.tgz#b1f3e04e8a94a715d5a7bcbc8339c51e6d74ca51"
+vscode-nls@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-4.0.0.tgz#4001c8a6caba5cedb23a9c5ce1090395c0e44002"
diff --git a/extensions/cpp/test/colorize-results/test_c.json b/extensions/cpp/test/colorize-results/test_c.json
index d3bac881c43..0725010d8c2 100644
--- a/extensions/cpp/test/colorize-results/test_c.json
+++ b/extensions/cpp/test/colorize-results/test_c.json
@@ -3,9 +3,9 @@
"c": "/*",
"t": "source.c comment.block.c punctuation.definition.comment.begin.c",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -14,9 +14,9 @@
"c": " C Program to find roots of a quadratic equation when coefficients are entered by user. ",
"t": "source.c comment.block.c",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -25,9 +25,9 @@
"c": "*/",
"t": "source.c comment.block.c punctuation.definition.comment.end.c",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -36,9 +36,9 @@
"c": "/*",
"t": "source.c comment.block.c punctuation.definition.comment.begin.c",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -47,9 +47,9 @@
"c": " Library function sqrt() computes the square root. ",
"t": "source.c comment.block.c",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -58,9 +58,9 @@
"c": "*/",
"t": "source.c comment.block.c punctuation.definition.comment.end.c",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -212,9 +212,9 @@
"c": "/*",
"t": "source.c comment.block.c punctuation.definition.comment.begin.c",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -223,9 +223,9 @@
"c": " This is needed to use sqrt() function.",
"t": "source.c comment.block.c",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -234,9 +234,9 @@
"c": "*/",
"t": "source.c comment.block.c punctuation.definition.comment.end.c",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
diff --git a/extensions/cpp/test/colorize-results/test_cc.json b/extensions/cpp/test/colorize-results/test_cc.json
index 845a693b3ab..f3f72320fb5 100644
--- a/extensions/cpp/test/colorize-results/test_cc.json
+++ b/extensions/cpp/test/colorize-results/test_cc.json
@@ -1114,9 +1114,9 @@
"c": "//",
"t": "source.cpp meta.block.c comment.line.double-slash.cpp punctuation.definition.comment.cpp",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1125,9 +1125,9 @@
"c": " everything from this point on is interpeted as a string literal...",
"t": "source.cpp meta.block.c comment.line.double-slash.cpp",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1312,9 +1312,9 @@
"c": "//",
"t": "source.cpp meta.block.c comment.line.double-slash.cpp punctuation.definition.comment.cpp",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1323,9 +1323,9 @@
"c": " sadness.",
"t": "source.cpp meta.block.c comment.line.double-slash.cpp",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1708,9 +1708,9 @@
"c": "//",
"t": "source.cpp meta.block.c comment.line.double-slash.cpp punctuation.definition.comment.cpp",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1719,9 +1719,9 @@
"c": " the rest of",
"t": "source.cpp meta.block.c comment.line.double-slash.cpp",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1961,9 +1961,9 @@
"c": "//",
"t": "source.cpp meta.block.c comment.line.double-slash.cpp punctuation.definition.comment.cpp",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1972,9 +1972,9 @@
"c": " the rest of",
"t": "source.cpp meta.block.c comment.line.double-slash.cpp",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
diff --git a/extensions/cpp/test/colorize-results/test_cpp.json b/extensions/cpp/test/colorize-results/test_cpp.json
index 8527e98a4f2..b3c9a841cc4 100644
--- a/extensions/cpp/test/colorize-results/test_cpp.json
+++ b/extensions/cpp/test/colorize-results/test_cpp.json
@@ -3,9 +3,9 @@
"c": "//",
"t": "source.cpp comment.line.double-slash.cpp punctuation.definition.comment.cpp",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -14,9 +14,9 @@
"c": " classes example",
"t": "source.cpp comment.line.double-slash.cpp",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
diff --git a/extensions/csharp/test/colorize-results/test_cs.json b/extensions/csharp/test/colorize-results/test_cs.json
index 6b56bff9935..1fc73fb341c 100644
--- a/extensions/csharp/test/colorize-results/test_cs.json
+++ b/extensions/csharp/test/colorize-results/test_cs.json
@@ -1114,9 +1114,9 @@
"c": "//",
"t": "source.cs comment.line.double-slash.cs punctuation.definition.comment.cs",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1125,9 +1125,9 @@
"c": " Display the number of command line arguments:",
"t": "source.cs comment.line.double-slash.cs",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
diff --git a/extensions/css-language-features/.vscode/launch.json b/extensions/css-language-features/.vscode/launch.json
index f6f6922c78d..d6393141c5d 100644
--- a/extensions/css-language-features/.vscode/launch.json
+++ b/extensions/css-language-features/.vscode/launch.json
@@ -3,7 +3,10 @@
"compounds": [
{
"name": "Debug Extension and Language Server",
- "configurations": ["Launch Extension", "Attach Language Server"]
+ "configurations": [
+ "Launch Extension",
+ "Attach Language Server"
+ ]
}
],
"configurations": [
@@ -17,7 +20,9 @@
],
"stopOnEntry": false,
"sourceMaps": true,
- "outFiles": ["${workspaceFolder}/client/out/**/*.js"],
+ "outFiles": [
+ "${workspaceFolder}/client/out/**/*.js"
+ ],
"smartStep": true,
"preLaunchTask": "npm: compile"
},
@@ -26,10 +31,15 @@
"type": "extensionHost",
"request": "launch",
"runtimeExecutable": "${execPath}",
- "args": ["--extensionDevelopmentPath=${workspaceFolder}", "--extensionTestsPath=${workspaceFolder}/client/out/test" ],
+ "args": [
+ "--extensionDevelopmentPath=${workspaceFolder}",
+ "--extensionTestsPath=${workspaceFolder}/client/out/test"
+ ],
"stopOnEntry": false,
"sourceMaps": true,
- "outFiles": ["${workspaceFolder}/client/out/test/**/*.js"],
+ "outFiles": [
+ "${workspaceFolder}/client/out/test/**/*.js"
+ ],
"preLaunchTask": "npm: compile"
},
{
@@ -39,9 +49,31 @@
"protocol": "inspector",
"port": 6044,
"sourceMaps": true,
- "outFiles": ["${workspaceFolder}/server/out/**/*.js"],
+ "outFiles": [
+ "${workspaceFolder}/server/out/**/*.js"
+ ],
"smartStep": true,
"restart": true
+ },
+ {
+ "name": "Server Unit Tests",
+ "type": "node",
+ "request": "launch",
+ "program": "${workspaceRoot}/node_modules/mocha/bin/_mocha",
+ "stopOnEntry": false,
+ "args": [
+ "--timeout",
+ "999999",
+ "--colors"
+ ],
+ "cwd": "${workspaceRoot}",
+ "runtimeExecutable": null,
+ "runtimeArgs": [],
+ "env": {},
+ "sourceMaps": true,
+ "outFiles": [
+ "${workspaceRoot}/server/out/**"
+ ]
}
]
}
\ No newline at end of file
diff --git a/extensions/css-language-features/.vscodeignore b/extensions/css-language-features/.vscodeignore
index b85541d78ee..89a62ee0761 100644
--- a/extensions/css-language-features/.vscodeignore
+++ b/extensions/css-language-features/.vscodeignore
@@ -1,5 +1,21 @@
+test/**
+.vscode/**
+server/.vscode/**
+node_modules/**
+server/node_modules/**
client/src/**
-client/tsconfig.json
server/src/**
+client/out/**
+server/out/**
+client/tsconfig.json
server/tsconfig.json
-server/node_modules/@types/**
\ No newline at end of file
+server/test/**
+server/bin/**
+server/build/**
+server/yarn.lock
+server/.npmignore
+yarn.lock
+server/extension.webpack.config.js
+extension.webpack.config.js
+!node_modules/vscode-nls/**
+!server/node_modules/vscode-nls/**
\ No newline at end of file
diff --git a/extensions/css-language-features/CONTRIBUTING.md b/extensions/css-language-features/CONTRIBUTING.md
new file mode 100644
index 00000000000..38843f2fbaa
--- /dev/null
+++ b/extensions/css-language-features/CONTRIBUTING.md
@@ -0,0 +1,39 @@
+
+## Setup
+
+- Clone [Microsoft/vscode](https://github.com/microsoft/vscode)
+- Run `yarn` at `/`, this will install
+ - Dependencies for `/extension/css-language-features/`
+ - Dependencies for `/extension/css-language-features/server/`
+ - devDependencies such as `gulp`
+- Open `/extensions/css-language-features/` as the workspace in VS Code
+- Run the [`Launch Extension`](https://github.com/Microsoft/vscode/blob/master/extensions/css-language-features/.vscode/launch.json) debug target in the Debug View. This will:
+ - Launch the `preLaunchTask` task to compile the extension
+ - Launch a new VS Code instance with the `css-language-features` extension loaded
+ - You should see a notification saying the development version of `css-language-features` overwrites the bundled version of `css-language-features`
+- Test the behavior of this extension by editing CSS/SCSS/Less files
+- Run `Reload Window` command in the launched instance to reload the extension
+
+### Contribute to vscode-css-languageservice
+
+[Microsoft/vscode-css-languageservice](https://github.com/Microsoft/vscode-css-languageservice) contains the language smarts for CSS/SCSS/Less.
+This extension wraps the css language service into a Language Server for VS Code.
+If you want to fix CSS/SCSS/Less issues or make improvements, you should make changes at [Microsoft/vscode-css-languageservice](https://github.com/Microsoft/vscode-css-languageservice).
+
+However, within this extension, you can run a development version of `vscode-css-languageservice` to debug code or test language features interactively:
+
+#### Linking `vscode-css-languageservice` in `css-language-features/server/`
+
+- Clone [Microsoft/vscode-css-languageservice](https://github.com/Microsoft/vscode-css-languageservice)
+- Run `yarn` in `vscode-css-languageservice`
+- Run `yarn link` in `vscode-css-languageservice`. This will compile and link `vscode-css-languageservice`
+- In `css-language-features/server/`, run `yarn link vscode-css-languageservice`
+
+#### Testing the development version of `vscode-css-languageservice`
+
+- Open both `vscode-css-languageservice` and this extension in a single workspace with [multi-root workspace](https://code.visualstudio.com/docs/editor/multi-root-workspaces) feature
+- Run `yarn watch` in `vscode-css-languageservice` to recompile the extension whenever it changes
+- Run `yarn watch` at `css-language-features/server/` to recompile this extension with the linked version of `vscode-css-languageservice`
+- Make some changes in `vscode-css-languageservice`
+- Now when you run `Launch Extension` debug target, the launched instance will use your development version of `vscode-css-languageservice`. You can interactively test the language features.
+- You can also run the `Debug Extension and Language Server` debug target, which will launch the extension and attach the debugger to the language server. After successful attach, you should be able to hit breakpoints in both `vscode-css-languageservice` and `css-language-features/server/`
diff --git a/extensions/css-language-features/README.md b/extensions/css-language-features/README.md
index 43065919fd4..5a3fad4948b 100644
--- a/extensions/css-language-features/README.md
+++ b/extensions/css-language-features/README.md
@@ -1,35 +1,9 @@
-# CSS Language Features
+# Language Features for CSS, SCSS, and LESS files
-This extension offers CSS/SCSS/Less support in VS Code.
+**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.
-## Development
+## Features
-- Clone [Microsoft/vscode](https://github.com/microsoft/vscode)
-- Run `yarn` at `/`, this will install
- - Dependencies for `/extension/css-language-features/`
- - Dependencies for `/extension/css-language-features/server/`
- - devDependencies such as `gulp`
-- Open `/extensions/css-language-features/` as the workspace in VS Code
-- Run the [`Launch Extension`](https://github.com/Microsoft/vscode/blob/master/extensions/css-language-features/.vscode/launch.json) debug target in the Debug View. This will:
- - Launch the `preLaunchTask` task to compile the extension
- - Launch a new VS Code instance with the `css-language-features` extension loaded
- - You should see a notification saying the development version of `css-language-features` overwrites the bundled version of `css-language-features`
-- Test the behavior of this extension by editing CSS/SCSS/Less files
-- Run `Reload Window` command in the launched instance to reload the extension
+See [CSS, SCSS and Less in VS Code](https://code.visualstudio.com/docs/languages/css) to learn about the features of this extension.
-### Contribute to vscode-css-languageservice
-
-[Microsoft/vscode-css-languageservice](https://github.com/Microsoft/vscode-css-languageservice) contains the language smarts for CSS/SCSS/Less, and this extension wraps the service into a Language Server for VS Code. If you want to fix CSS/SCSS/Less issues or make improvements, you should make changes at [Microsoft/vscode-css-languageservice](https://github.com/Microsoft/vscode-css-languageservice).
-
-However, within this extension, you can run a development version of `vscode-css-languageservice` to debug code or test language features interactively:
-
-- Clone [Microsoft/vscode-css-languageservice](https://github.com/Microsoft/vscode-css-languageservice)
-- Open both `vscode-css-languageservice` and this extension in a single workspace with [multi-root workspace](https://code.visualstudio.com/docs/editor/multi-root-workspaces) feature
-- Run `yarn` in `vscode-css-languageservice`
-- Run `yarn link` in `vscode-css-languageservice`. This will compile and link `vscode-css-languageservice`
-- In `css-language-features/server/`, run `npm link vscode-css-languageservice`
-- Run `yarn watch` at `css-languagefeatures/server/` to recompile this extension with the linked version of `vscode-css-languageservice`
-- Run `yarn watch` in `vscode-css-languageservice`
-- Make some changes in `vscode-css-languageservice`
-- Now when you run `Launch Extension` debug target, the launched instance will use your development version of `vscode-css-languageservice`. You can interactively test the language features.
-- You can also run the `Debug Extension and Language Server` debug target, which will launch the extension and attach the debugger to the language server. After successful attach, you should be able to hit breakpoints in both `vscode-css-languageservice` and `css-language-features/server/`
+Please read the [CONTRIBUTING.md](https://github.com/Microsoft/vscode/blob/master/extensions/css-language-features/CONTRIBUTING.md) file to learn how to contribute to this extension.
\ No newline at end of file
diff --git a/extensions/css-language-features/client/src/cssMain.ts b/extensions/css-language-features/client/src/cssMain.ts
index a7a031bda3c..e91d5408054 100644
--- a/extensions/css-language-features/client/src/cssMain.ts
+++ b/extensions/css-language-features/client/src/cssMain.ts
@@ -4,19 +4,20 @@
*--------------------------------------------------------------------------------------------*/
'use strict';
import * as path from 'path';
+import * as fs from 'fs';
import * as nls from 'vscode-nls';
const localize = nls.loadMessageBundle();
-import { languages, window, commands, ExtensionContext, Range, Position, TextDocument, CompletionItem, CompletionItemKind, TextEdit, SnippetString, FoldingRangeKind, FoldingRange, FoldingContext, CancellationToken } from 'vscode';
+import { languages, window, commands, ExtensionContext, Range, Position, CompletionItem, CompletionItemKind, TextEdit, SnippetString } from 'vscode';
import { LanguageClient, LanguageClientOptions, ServerOptions, TransportKind, Disposable } from 'vscode-languageclient';
-import { FoldingRangeRequest, FoldingRangeRequestParam, FoldingRangeClientCapabilities, FoldingRangeKind as LSFoldingRangeKind } from 'vscode-languageserver-protocol-foldingprovider';
// this method is called when vs code is activated
export function activate(context: ExtensionContext) {
- // The server is implemented in node
- let serverModule = context.asAbsolutePath(path.join('server', 'out', 'cssServerMain.js'));
+ let serverMain = readJSONFile(context.asAbsolutePath('./server/package.json')).main;
+ let serverModule = context.asAbsolutePath(path.join('server', serverMain));
+
// The debug options for the server
let debugOptions = { execArgv: ['--nolazy', '--inspect=6044'] };
@@ -42,21 +43,6 @@ export function activate(context: ExtensionContext) {
// Create the language client and start the client.
let client = new LanguageClient('css', localize('cssserver.name', 'CSS Language Server'), serverOptions, clientOptions);
client.registerProposedFeatures();
- client.registerFeature({
- fillClientCapabilities(capabilities: FoldingRangeClientCapabilities): void {
- let textDocumentCap = capabilities.textDocument;
- if (!textDocumentCap) {
- textDocumentCap = capabilities.textDocument = {};
- }
- textDocumentCap.foldingRange = {
- dynamicRegistration: false,
- rangeLimit: 5000,
- lineFoldingOnly: true
- };
- },
- initialize(capabilities, documentSelector): void {
- }
- });
let disposable = client.start();
// Push the disposable to the context's subscriptions so that the
@@ -85,7 +71,6 @@ export function activate(context: ExtensionContext) {
client.onReady().then(() => {
context.subscriptions.push(initCompletionProvider());
- context.subscriptions.push(initFoldingProvider());
});
function initCompletionProvider(): Disposable {
@@ -116,38 +101,6 @@ export function activate(context: ExtensionContext) {
});
}
- function initFoldingProvider(): Disposable {
- function getKind(kind: string | undefined): FoldingRangeKind | undefined {
- if (kind) {
- switch (kind) {
- case LSFoldingRangeKind.Comment:
- return FoldingRangeKind.Comment;
- case LSFoldingRangeKind.Imports:
- return FoldingRangeKind.Imports;
- case LSFoldingRangeKind.Region:
- return FoldingRangeKind.Region;
- }
- }
- return void 0;
- }
- return languages.registerFoldingRangeProvider(documentSelector, {
- provideFoldingRanges(document: TextDocument, context: FoldingContext, token: CancellationToken) {
- const param: FoldingRangeRequestParam = {
- textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document)
- };
- return client.sendRequest(FoldingRangeRequest.type, param, token).then(ranges => {
- if (Array.isArray(ranges)) {
- return ranges.map(r => new FoldingRange(r.startLine, r.endLine, getKind(r.kind)));
- }
- return null;
- }, error => {
- client.logFailedRequest(FoldingRangeRequest.type, error);
- return null;
- });
- }
- });
- }
-
commands.registerCommand('_css.applyCodeAction', applyCodeAction);
function applyCodeAction(uri: string, documentVersion: number, edits: TextEdit[]) {
@@ -169,3 +122,12 @@ export function activate(context: ExtensionContext) {
}
}
+function readJSONFile(location: string) {
+ try {
+ return JSON.parse(fs.readFileSync(location).toString());
+ } catch (e) {
+ console.log(`Problems reading ${location}: ${e}`);
+ return {};
+ }
+}
+
diff --git a/extensions/css-language-features/extension.webpack.config.js b/extensions/css-language-features/extension.webpack.config.js
new file mode 100644
index 00000000000..3c1d55ef6a0
--- /dev/null
+++ b/extensions/css-language-features/extension.webpack.config.js
@@ -0,0 +1,37 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+//@ts-check
+
+'use strict';
+
+const withDefaults = require('../shared.webpack.config');
+const CopyWebpackPlugin = require('copy-webpack-plugin');
+const path = require('path');
+
+module.exports = withDefaults({
+ context: path.join(__dirname, 'client'),
+ entry: {
+ extension: './src/cssMain.ts',
+ },
+ resolve: {
+ mainFields: ['module', 'main'],
+ extensions: ['.ts', '.js'] // support ts-files and js-files
+ },
+ output: {
+ filename: 'cssMain.js',
+ path: path.join(__dirname, 'client', 'dist'),
+ libraryTarget: "commonjs",
+ },
+ externals: {
+ './files': 'commonjs', // ignored because it doesn't exist
+ },
+ plugins: [
+ new CopyWebpackPlugin([
+ { from: './out/*.sh', to: '[name].sh' },
+ { from: './out/nls.*.json', to: '[name].json' }
+ ])
+ ]
+});
diff --git a/extensions/css-language-features/package.json b/extensions/css-language-features/package.json
index b3e9af99b7b..a565f4309ef 100644
--- a/extensions/css-language-features/package.json
+++ b/extensions/css-language-features/package.json
@@ -19,6 +19,7 @@
"scripts": {
"compile": "gulp compile-extension:css-language-features-client compile-extension:css-language-features-server",
"watch": "gulp watch-extension:css-language-features-client watch-extension:css-language-features-server",
+ "test": "mocha",
"postinstall": "cd server && yarn install",
"install-client-next": "yarn add vscode-languageclient@next"
},
@@ -109,7 +110,7 @@
"error"
],
"default": "ignore",
- "description": "%css.lint.boxModel.desc%"
+ "markdownDescription": "%css.lint.boxModel.desc%"
},
"css.lint.universalSelector": {
"type": "string",
@@ -120,7 +121,7 @@
"error"
],
"default": "ignore",
- "description": "%css.lint.universalSelector.desc%"
+ "markdownDescription": "%css.lint.universalSelector.desc%"
},
"css.lint.zeroUnits": {
"type": "string",
@@ -208,7 +209,7 @@
"error"
],
"default": "warning",
- "description": "%css.lint.propertyIgnoredDueToDisplay.desc%"
+ "markdownDescription": "%css.lint.propertyIgnoredDueToDisplay.desc%"
},
"css.lint.important": {
"type": "string",
@@ -230,7 +231,7 @@
"error"
],
"default": "ignore",
- "description": "%css.lint.float.desc%"
+ "markdownDescription": "%css.lint.float.desc%"
},
"css.lint.idSelector": {
"type": "string",
@@ -243,6 +244,17 @@
"default": "ignore",
"description": "%css.lint.idSelector.desc%"
},
+ "css.lint.unknownAtRules": {
+ "type": "string",
+ "scope": "resource",
+ "enum": [
+ "ignore",
+ "warning",
+ "error"
+ ],
+ "default": "warning",
+ "description": "%css.lint.unknownAtRules.desc%"
+ },
"css.trace.server": {
"type": "string",
"scope": "window",
@@ -338,7 +350,7 @@
"error"
],
"default": "ignore",
- "description": "%scss.lint.boxModel.desc%"
+ "markdownDescription": "%scss.lint.boxModel.desc%"
},
"scss.lint.universalSelector": {
"type": "string",
@@ -349,7 +361,7 @@
"error"
],
"default": "ignore",
- "description": "%scss.lint.universalSelector.desc%"
+ "markdownDescription": "%scss.lint.universalSelector.desc%"
},
"scss.lint.zeroUnits": {
"type": "string",
@@ -371,7 +383,7 @@
"error"
],
"default": "warning",
- "description": "%scss.lint.fontFaceProperties.desc%"
+ "markdownDescription": "%scss.lint.fontFaceProperties.desc%"
},
"scss.lint.hexColorLength": {
"type": "string",
@@ -437,7 +449,7 @@
"error"
],
"default": "warning",
- "description": "%scss.lint.propertyIgnoredDueToDisplay.desc%"
+ "markdownDescription": "%scss.lint.propertyIgnoredDueToDisplay.desc%"
},
"scss.lint.important": {
"type": "string",
@@ -448,7 +460,7 @@
"error"
],
"default": "ignore",
- "description": "%scss.lint.important.desc%"
+ "markdownDescription": "%scss.lint.important.desc%"
},
"scss.lint.float": {
"type": "string",
@@ -459,7 +471,7 @@
"error"
],
"default": "ignore",
- "description": "%scss.lint.float.desc%"
+ "markdownDescription": "%scss.lint.float.desc%"
},
"scss.lint.idSelector": {
"type": "string",
@@ -557,7 +569,7 @@
"error"
],
"default": "ignore",
- "description": "%less.lint.boxModel.desc%"
+ "markdownDescription": "%less.lint.boxModel.desc%"
},
"less.lint.universalSelector": {
"type": "string",
@@ -568,7 +580,7 @@
"error"
],
"default": "ignore",
- "description": "%less.lint.universalSelector.desc%"
+ "markdownDescription": "%less.lint.universalSelector.desc%"
},
"less.lint.zeroUnits": {
"type": "string",
@@ -590,7 +602,7 @@
"error"
],
"default": "warning",
- "description": "%less.lint.fontFaceProperties.desc%"
+ "markdownDescription": "%less.lint.fontFaceProperties.desc%"
},
"less.lint.hexColorLength": {
"type": "string",
@@ -656,7 +668,7 @@
"error"
],
"default": "warning",
- "description": "%less.lint.propertyIgnoredDueToDisplay.desc%"
+ "markdownDescription": "%less.lint.propertyIgnoredDueToDisplay.desc%"
},
"less.lint.important": {
"type": "string",
@@ -678,7 +690,7 @@
"error"
],
"default": "ignore",
- "description": "%less.lint.float.desc%"
+ "markdownDescription": "%less.lint.float.desc%"
},
"less.lint.idSelector": {
"type": "string",
@@ -696,11 +708,11 @@
]
},
"dependencies": {
- "vscode-languageclient": "^4.1.4",
- "vscode-languageserver-protocol-foldingprovider": "^2.0.1",
- "vscode-nls": "^3.2.2"
+ "vscode-languageclient": "^5.1.0-next.9",
+ "vscode-nls": "^4.0.0"
},
"devDependencies": {
- "@types/node": "7.0.43"
+ "@types/node": "^8.10.25",
+ "mocha": "^5.2.0"
}
}
diff --git a/extensions/css-language-features/package.nls.json b/extensions/css-language-features/package.nls.json
index cbe77ea0abb..f62c6fb669c 100644
--- a/extensions/css-language-features/package.nls.json
+++ b/extensions/css-language-features/package.nls.json
@@ -2,72 +2,73 @@
"displayName": "CSS Language Features",
"description": "Provides rich language support for CSS, LESS and SCSS files.",
"css.title": "CSS",
- "css.lint.argumentsInColorFunction.desc": "Invalid number of parameters",
- "css.lint.boxModel.desc": "Do not use width or height when using padding or border",
- "css.lint.compatibleVendorPrefixes.desc": "When using a vendor-specific prefix make sure to also include all other vendor-specific properties",
- "css.lint.duplicateProperties.desc": "Do not use duplicate style definitions",
- "css.lint.emptyRules.desc": "Do not use empty rulesets",
- "css.lint.float.desc": "Avoid using 'float'. Floats lead to fragile CSS that is easy to break if one aspect of the layout changes.",
- "css.lint.fontFaceProperties.desc": "@font-face rule must define 'src' and 'font-family' properties",
- "css.lint.hexColorLength.desc": "Hex colors must consist of three or six hex numbers",
+ "css.lint.argumentsInColorFunction.desc": "Invalid number of parameters.",
+ "css.lint.boxModel.desc": "Do not use `width` or `height` when using `padding` or `border`.",
+ "css.lint.compatibleVendorPrefixes.desc": "When using a vendor-specific prefix make sure to also include all other vendor-specific properties.",
+ "css.lint.duplicateProperties.desc": "Do not use duplicate style definitions.",
+ "css.lint.emptyRules.desc": "Do not use empty rulesets.",
+ "css.lint.float.desc": "Avoid using `float`. Floats lead to fragile CSS that is easy to break if one aspect of the layout changes.",
+ "css.lint.fontFaceProperties.desc": "`@font-face` rule must define `src` and `font-family` properties.",
+ "css.lint.hexColorLength.desc": "Hex colors must consist of three or six hex numbers.",
"css.lint.idSelector.desc": "Selectors should not contain IDs because these rules are too tightly coupled with the HTML.",
- "css.lint.ieHack.desc": "IE hacks are only necessary when supporting IE7 and older",
- "css.lint.important.desc": "Avoid using !important. It is an indication that the specificity of the entire CSS has gotten out of control and needs to be refactored.",
- "css.lint.importStatement.desc": "Import statements do not load in parallel",
- "css.lint.propertyIgnoredDueToDisplay.desc": "Property is ignored due to the display. E.g. with 'display: inline', the width, height, margin-top, margin-bottom, and float properties have no effect",
- "css.lint.universalSelector.desc": "The universal selector (*) is known to be slow",
+ "css.lint.ieHack.desc": "IE hacks are only necessary when supporting IE7 and older.",
+ "css.lint.important.desc": "Avoid using `!important`. It is an indication that the specificity of the entire CSS has gotten out of control and needs to be refactored.",
+ "css.lint.importStatement.desc": "Import statements do not load in parallel.",
+ "css.lint.propertyIgnoredDueToDisplay.desc": "Property is ignored due to the display. E.g. with `display: inline`, the `width`, `height`, `margin-top`, `margin-bottom`, and `float` properties have no effect.",
+ "css.lint.universalSelector.desc": "The universal selector (`*`) is known to be slow.",
+ "css.lint.unknownAtRules.desc": "Unknown at-rule.",
"css.lint.unknownProperties.desc": "Unknown property.",
"css.lint.unknownVendorSpecificProperties.desc": "Unknown vendor specific property.",
- "css.lint.vendorPrefix.desc": "When using a vendor-specific prefix also include the standard property",
- "css.lint.zeroUnits.desc": "No unit for zero needed",
+ "css.lint.vendorPrefix.desc": "When using a vendor-specific prefix, also include the standard property.",
+ "css.lint.zeroUnits.desc": "No unit for zero needed.",
"css.trace.server.desc": "Traces the communication between VS Code and the CSS language server.",
"css.validate.title": "Controls CSS validation and problem severities.",
- "css.validate.desc": "Enables or disables all validations",
+ "css.validate.desc": "Enables or disables all validations.",
"less.title": "LESS",
- "less.lint.argumentsInColorFunction.desc": "Invalid number of parameters",
- "less.lint.boxModel.desc": "Do not use width or height when using padding or border",
- "less.lint.compatibleVendorPrefixes.desc": "When using a vendor-specific prefix make sure to also include all other vendor-specific properties",
- "less.lint.duplicateProperties.desc": "Do not use duplicate style definitions",
- "less.lint.emptyRules.desc": "Do not use empty rulesets",
- "less.lint.float.desc": "Avoid using 'float'. Floats lead to fragile CSS that is easy to break if one aspect of the layout changes.",
- "less.lint.fontFaceProperties.desc": "@font-face rule must define 'src' and 'font-family' properties",
- "less.lint.hexColorLength.desc": "Hex colors must consist of three or six hex numbers",
+ "less.lint.argumentsInColorFunction.desc": "Invalid number of parameters.",
+ "less.lint.boxModel.desc": "Do not use `width` or `height` when using `padding` or `border`.",
+ "less.lint.compatibleVendorPrefixes.desc": "When using a vendor-specific prefix make sure to also include all other vendor-specific properties.",
+ "less.lint.duplicateProperties.desc": "Do not use duplicate style definitions.",
+ "less.lint.emptyRules.desc": "Do not use empty rulesets.",
+ "less.lint.float.desc": "Avoid using `float`. Floats lead to fragile CSS that is easy to break if one aspect of the layout changes.",
+ "less.lint.fontFaceProperties.desc": "`@font-face` rule must define `src` and `font-family` properties.",
+ "less.lint.hexColorLength.desc": "Hex colors must consist of three or six hex numbers.",
"less.lint.idSelector.desc": "Selectors should not contain IDs because these rules are too tightly coupled with the HTML.",
- "less.lint.ieHack.desc": "IE hacks are only necessary when supporting IE7 and older",
+ "less.lint.ieHack.desc": "IE hacks are only necessary when supporting IE7 and older.",
"less.lint.important.desc": "Avoid using !important. It is an indication that the specificity of the entire CSS has gotten out of control and needs to be refactored.",
- "less.lint.importStatement.desc": "Import statements do not load in parallel",
- "less.lint.propertyIgnoredDueToDisplay.desc": "Property is ignored due to the display. E.g. with 'display: inline', the width, height, margin-top, margin-bottom, and float properties have no effect",
- "less.lint.universalSelector.desc": "The universal selector (*) is known to be slow",
+ "less.lint.importStatement.desc": "Import statements do not load in parallel.",
+ "less.lint.propertyIgnoredDueToDisplay.desc": "Property is ignored due to the display. E.g. with `display: inline`, the `width`, `height`, `margin-top`, `margin-bottom`, and `float` properties have no effect.",
+ "less.lint.universalSelector.desc": "The universal selector (`*`) is known to be slow.",
"less.lint.unknownProperties.desc": "Unknown property.",
"less.lint.unknownVendorSpecificProperties.desc": "Unknown vendor specific property.",
- "less.lint.vendorPrefix.desc": "When using a vendor-specific prefix also include the standard property",
- "less.lint.zeroUnits.desc": "No unit for zero needed",
+ "less.lint.vendorPrefix.desc": "When using a vendor-specific prefix, also include the standard property.",
+ "less.lint.zeroUnits.desc": "No unit for zero needed.",
"less.validate.title": "Controls LESS validation and problem severities.",
- "less.validate.desc": "Enables or disables all validations",
+ "less.validate.desc": "Enables or disables all validations.",
"scss.title": "SCSS (Sass)",
- "scss.lint.argumentsInColorFunction.desc": "Invalid number of parameters",
- "scss.lint.boxModel.desc": "Do not use width or height when using padding or border",
- "scss.lint.compatibleVendorPrefixes.desc": "When using a vendor-specific prefix make sure to also include all other vendor-specific properties",
- "scss.lint.duplicateProperties.desc": "Do not use duplicate style definitions",
- "scss.lint.emptyRules.desc": "Do not use empty rulesets",
- "scss.lint.float.desc": "Avoid using 'float'. Floats lead to fragile CSS that is easy to break if one aspect of the layout changes.",
- "scss.lint.fontFaceProperties.desc": "@font-face rule must define 'src' and 'font-family' properties",
- "scss.lint.hexColorLength.desc": "Hex colors must consist of three or six hex numbers",
+ "scss.lint.argumentsInColorFunction.desc": "Invalid number of parameters.",
+ "scss.lint.boxModel.desc": "Do not use `width` or `height` when using `padding` or `border`.",
+ "scss.lint.compatibleVendorPrefixes.desc": "When using a vendor-specific prefix make sure to also include all other vendor-specific properties.",
+ "scss.lint.duplicateProperties.desc": "Do not use duplicate style definitions.",
+ "scss.lint.emptyRules.desc": "Do not use empty rulesets.",
+ "scss.lint.float.desc": "Avoid using `float`. Floats lead to fragile CSS that is easy to break if one aspect of the layout changes.",
+ "scss.lint.fontFaceProperties.desc": "`@font-face` rule must define `src` and `font-family` properties.",
+ "scss.lint.hexColorLength.desc": "Hex colors must consist of three or six hex numbers.",
"scss.lint.idSelector.desc": "Selectors should not contain IDs because these rules are too tightly coupled with the HTML.",
- "scss.lint.ieHack.desc": "IE hacks are only necessary when supporting IE7 and older",
+ "scss.lint.ieHack.desc": "IE hacks are only necessary when supporting IE7 and older.",
"scss.lint.important.desc": "Avoid using !important. It is an indication that the specificity of the entire CSS has gotten out of control and needs to be refactored.",
- "scss.lint.importStatement.desc": "Import statements do not load in parallel",
- "scss.lint.propertyIgnoredDueToDisplay.desc": "Property is ignored due to the display. E.g. with 'display: inline', the width, height, margin-top, margin-bottom, and float properties have no effect",
- "scss.lint.universalSelector.desc": "The universal selector (*) is known to be slow",
+ "scss.lint.importStatement.desc": "Import statements do not load in parallel.",
+ "scss.lint.propertyIgnoredDueToDisplay.desc": "Property is ignored due to the display. E.g. with `display: inline`, the `width`, `height`, `margin-top`, `margin-bottom`, and `float` properties have no effect.",
+ "scss.lint.universalSelector.desc": "The universal selector (`*`) is known to be slow.",
"scss.lint.unknownProperties.desc": "Unknown property.",
"scss.lint.unknownVendorSpecificProperties.desc": "Unknown vendor specific property.",
- "scss.lint.vendorPrefix.desc": "When using a vendor-specific prefix also include the standard property",
- "scss.lint.zeroUnits.desc": "No unit for zero needed",
+ "scss.lint.vendorPrefix.desc": "When using a vendor-specific prefix, also include the standard property.",
+ "scss.lint.zeroUnits.desc": "No unit for zero needed.",
"scss.validate.title": "Controls SCSS validation and problem severities.",
- "scss.validate.desc": "Enables or disables all validations",
- "less.colorDecorators.enable.desc": "Enables or disables color decorators",
- "scss.colorDecorators.enable.desc": "Enables or disables color decorators",
- "css.colorDecorators.enable.desc": "Enables or disables color decorators",
+ "scss.validate.desc": "Enables or disables all validations.",
+ "less.colorDecorators.enable.desc": "Enables or disables color decorators.",
+ "scss.colorDecorators.enable.desc": "Enables or disables color decorators.",
+ "css.colorDecorators.enable.desc": "Enables or disables color decorators.",
"css.colorDecorators.enable.deprecationMessage": "The setting `css.colorDecorators.enable` has been deprecated in favor of `editor.colorDecorators`.",
"scss.colorDecorators.enable.deprecationMessage": "The setting `scss.colorDecorators.enable` has been deprecated in favor of `editor.colorDecorators`.",
"less.colorDecorators.enable.deprecationMessage": "The setting `less.colorDecorators.enable` has been deprecated in favor of `editor.colorDecorators`."
diff --git a/extensions/css-language-features/server/build/filesFillIn.js b/extensions/css-language-features/server/build/filesFillIn.js
new file mode 100644
index 00000000000..906617384e0
--- /dev/null
+++ b/extensions/css-language-features/server/build/filesFillIn.js
@@ -0,0 +1,5 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+module.exports = {};
\ No newline at end of file
diff --git a/extensions/css-language-features/server/extension.webpack.config.js b/extensions/css-language-features/server/extension.webpack.config.js
new file mode 100644
index 00000000000..29533fa59fb
--- /dev/null
+++ b/extensions/css-language-features/server/extension.webpack.config.js
@@ -0,0 +1,38 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+//@ts-check
+
+'use strict';
+
+const withDefaults = require('../../shared.webpack.config');
+const path = require('path');
+var webpack = require('webpack');
+
+module.exports = withDefaults({
+ context: path.join(__dirname),
+ entry: {
+ extension: './src/cssServerMain.ts',
+ },
+ resolve: {
+ mainFields: ['module', 'main'],
+ extensions: ['.ts', '.js'] // support ts-files and js-files
+ },
+ output: {
+ filename: 'cssServerMain.js',
+ path: path.join(__dirname, 'dist'),
+ libraryTarget: "commonjs",
+ },
+ externals: {
+ "vscode-nls": 'commonjs vscode-nls',
+ },
+ plugins: [
+ new webpack.NormalModuleReplacementPlugin(
+ /(\/|\\)vscode-languageserver(\/|\\)lib(\/|\\)files\.js/,
+ require.resolve('./build/filesFillIn')
+ ),
+ new webpack.IgnorePlugin(/vertx/)
+ ],
+});
diff --git a/extensions/css-language-features/server/package.json b/extensions/css-language-features/server/package.json
index 9404a08ce70..0ef07147fe0 100644
--- a/extensions/css-language-features/server/package.json
+++ b/extensions/css-language-features/server/package.json
@@ -7,14 +7,18 @@
"engines": {
"node": "*"
},
+ "main": "./out/cssServerMain",
"dependencies": {
- "vscode-css-languageservice": "^3.0.9-next.18",
- "vscode-languageserver": "^4.1.3",
- "vscode-languageserver-protocol-foldingprovider": "^2.0.1"
+ "vscode-css-languageservice": "^3.0.11-next.2",
+ "vscode-languageserver": "^5.1.0-next.5"
},
"devDependencies": {
"@types/mocha": "2.2.33",
- "@types/node": "7.0.43"
+ "@types/node": "^8.10.25",
+ "glob": "^7.1.2",
+ "mocha": "^5.2.0",
+ "mocha-junit-reporter": "^1.17.0",
+ "mocha-multi-reporters": "^1.1.7"
},
"scripts": {
"compile": "gulp compile-extension:css-language-features-server",
diff --git a/extensions/css-language-features/server/src/cssServerMain.ts b/extensions/css-language-features/server/src/cssServerMain.ts
index 8778faf2b79..853f6690473 100644
--- a/extensions/css-language-features/server/src/cssServerMain.ts
+++ b/extensions/css-language-features/server/src/cssServerMain.ts
@@ -7,15 +7,14 @@
import {
createConnection, IConnection, TextDocuments, InitializeParams, InitializeResult, ServerCapabilities, ConfigurationRequest, WorkspaceFolder
} from 'vscode-languageserver';
-
+import URI from 'vscode-uri';
import { TextDocument, CompletionList } from 'vscode-languageserver-types';
import { getCSSLanguageService, getSCSSLanguageService, getLESSLanguageService, LanguageSettings, LanguageService, Stylesheet } from 'vscode-css-languageservice';
import { getLanguageModelCache } from './languageModelCache';
-import { formatError, runSafe } from './utils/runner';
-import URI from 'vscode-uri';
import { getPathCompletionParticipant } from './pathCompletion';
-import { FoldingRangeServerCapabilities, FoldingRangeRequest } from 'vscode-languageserver-protocol-foldingprovider';
+import { formatError, runSafe } from './utils/runner';
+import { getDocumentContext } from './utils/documentContext';
export interface Settings {
css: LanguageSettings;
@@ -78,7 +77,7 @@ connection.onInitialize((params: InitializeParams): InitializeResult => {
scopedSettingsSupport = !!getClientCapability('workspace.configuration', false);
foldingRangeLimit = getClientCapability('textDocument.foldingRange.rangeLimit', Number.MAX_VALUE);
- const capabilities: ServerCapabilities & FoldingRangeServerCapabilities = {
+ const capabilities: ServerCapabilities = {
// Tell the client that the server works in FULL text document sync mode
textDocumentSync: documents.syncKind,
completionProvider: snippetSupport ? { resolveProvider: false, triggerCharacters: ['/'] } : undefined,
@@ -87,6 +86,9 @@ connection.onInitialize((params: InitializeParams): InitializeResult => {
referencesProvider: true,
definitionProvider: true,
documentHighlightProvider: true,
+ documentLinkProvider: {
+ resolveProvider: false
+ },
codeActionProvider: true,
renameProvider: true,
colorProvider: {},
@@ -228,29 +230,43 @@ connection.onDocumentSymbol((documentSymbolParams, token) => {
}, [], `Error while computing document symbols for ${documentSymbolParams.textDocument.uri}`, token);
});
-connection.onDefinition((documentSymbolParams, token) => {
+connection.onDefinition((documentDefinitionParams, token) => {
return runSafe(() => {
- const document = documents.get(documentSymbolParams.textDocument.uri);
+ const document = documents.get(documentDefinitionParams.textDocument.uri);
if (document) {
const stylesheet = stylesheets.get(document);
- return getLanguageService(document).findDefinition(document, documentSymbolParams.position, stylesheet);
+ return getLanguageService(document).findDefinition(document, documentDefinitionParams.position, stylesheet);
}
return null;
- }, null, `Error while computing definitions for ${documentSymbolParams.textDocument.uri}`, token);
+ }, null, `Error while computing definitions for ${documentDefinitionParams.textDocument.uri}`, token);
});
-connection.onDocumentHighlight((documentSymbolParams, token) => {
+connection.onDocumentHighlight((documentHighlightParams, token) => {
return runSafe(() => {
- const document = documents.get(documentSymbolParams.textDocument.uri);
+ const document = documents.get(documentHighlightParams.textDocument.uri);
if (document) {
const stylesheet = stylesheets.get(document);
- return getLanguageService(document).findDocumentHighlights(document, documentSymbolParams.position, stylesheet);
+ return getLanguageService(document).findDocumentHighlights(document, documentHighlightParams.position, stylesheet);
}
return [];
- }, [], `Error while computing document highlights for ${documentSymbolParams.textDocument.uri}`, token);
+ }, [], `Error while computing document highlights for ${documentHighlightParams.textDocument.uri}`, token);
});
+
+connection.onDocumentLinks((documentLinkParams, token) => {
+ return runSafe(() => {
+ const document = documents.get(documentLinkParams.textDocument.uri);
+ if (document) {
+ const documentContext = getDocumentContext(document.uri, workspaceFolders);
+ const stylesheet = stylesheets.get(document);
+ return getLanguageService(document).findDocumentLinks(document, stylesheet, documentContext);
+ }
+ return [];
+ }, [], `Error while computing document links for ${documentLinkParams.textDocument.uri}`, token);
+});
+
+
connection.onReferences((referenceParams, token) => {
return runSafe(() => {
const document = documents.get(referenceParams.textDocument.uri);
@@ -306,7 +322,7 @@ connection.onRenameRequest((renameParameters, token) => {
}, null, `Error while computing renames for ${renameParameters.textDocument.uri}`, token);
});
-connection.onRequest(FoldingRangeRequest.type, (params, token) => {
+connection.onFoldingRanges((params, token) => {
return runSafe(() => {
const document = documents.get(params.textDocument.uri);
if (document) {
diff --git a/extensions/css-language-features/server/src/pathCompletion.ts b/extensions/css-language-features/server/src/pathCompletion.ts
index b072c4136f6..ecbd9a09843 100644
--- a/extensions/css-language-features/server/src/pathCompletion.ts
+++ b/extensions/css-language-features/server/src/pathCompletion.ts
@@ -12,7 +12,7 @@ import { TextDocument, CompletionList, CompletionItemKind, CompletionItem, TextE
import { WorkspaceFolder } from 'vscode-languageserver';
import { ICompletionParticipant } from 'vscode-css-languageservice';
-import { startsWith } from './utils/strings';
+import { startsWith, endsWith } from './utils/strings';
export function getPathCompletionParticipant(
document: TextDocument,
@@ -21,32 +21,79 @@ export function getPathCompletionParticipant(
): ICompletionParticipant {
return {
onCssURILiteralValue: ({ position, range, uriValue }) => {
- const isValueQuoted = startsWith(uriValue, `'`) || startsWith(uriValue, `"`);
const fullValue = stripQuotes(uriValue);
- const valueBeforeCursor = isValueQuoted
- ? fullValue.slice(0, position.character - (range.start.character + 1))
- : fullValue.slice(0, position.character - range.start.character);
-
- if (fullValue === '.' || fullValue === '..') {
- result.isIncomplete = true;
+ if (!shouldDoPathCompletion(uriValue, workspaceFolders)) {
+ if (fullValue === '.' || fullValue === '..') {
+ result.isIncomplete = true;
+ }
return;
}
- if (!workspaceFolders || workspaceFolders.length === 0) {
+ let suggestions = providePathSuggestions(uriValue, position, range, document, workspaceFolders);
+ result.items = [...suggestions, ...result.items];
+ },
+ onCssImportPath: ({ position, range, pathValue }) => {
+ const fullValue = stripQuotes(pathValue);
+ if (!shouldDoPathCompletion(pathValue, workspaceFolders)) {
+ if (fullValue === '.' || fullValue === '..') {
+ result.isIncomplete = true;
+ }
return;
}
- const workspaceRoot = resolveWorkspaceRoot(document, workspaceFolders);
- const paths = providePaths(valueBeforeCursor, URI.parse(document.uri).fsPath, workspaceRoot);
- const fullValueRange = isValueQuoted ? shiftRange(range, 1, -1) : range;
- const replaceRange = pathToReplaceRange(valueBeforeCursor, fullValue, fullValueRange);
- const suggestions = paths.map(p => pathToSuggestion(p, replaceRange));
+ let suggestions = providePathSuggestions(pathValue, position, range, document, workspaceFolders);
+
+ if (document.languageId === 'scss') {
+ suggestions.forEach(s => {
+ if (startsWith(s.label, '_') && endsWith(s.label, '.scss')) {
+ if (s.textEdit) {
+ s.textEdit.newText = s.label.slice(1, -5);
+ } else {
+ s.label = s.label.slice(1, -5);
+ }
+ }
+ });
+ }
+
result.items = [...suggestions, ...result.items];
}
-
};
}
+function providePathSuggestions(pathValue: string, position: Position, range: Range, document: TextDocument, workspaceFolders: WorkspaceFolder[]) {
+ const fullValue = stripQuotes(pathValue);
+ const isValueQuoted = startsWith(pathValue, `'`) || startsWith(pathValue, `"`);
+ const valueBeforeCursor = isValueQuoted
+ ? fullValue.slice(0, position.character - (range.start.character + 1))
+ : fullValue.slice(0, position.character - range.start.character);
+ const workspaceRoot = resolveWorkspaceRoot(document, workspaceFolders);
+ const currentDocFsPath = URI.parse(document.uri).fsPath;
+
+ const paths = providePaths(valueBeforeCursor, currentDocFsPath, workspaceRoot).filter(p => {
+ // Exclude current doc's path
+ return path.resolve(currentDocFsPath, '../', p) !== currentDocFsPath;
+ });
+
+ const fullValueRange = isValueQuoted ? shiftRange(range, 1, -1) : range;
+ const replaceRange = pathToReplaceRange(valueBeforeCursor, fullValue, fullValueRange);
+
+ const suggestions = paths.map(p => pathToSuggestion(p, replaceRange));
+ return suggestions;
+}
+
+function shouldDoPathCompletion(pathValue: string, workspaceFolders: WorkspaceFolder[]): boolean {
+ const fullValue = stripQuotes(pathValue);
+ if (fullValue === '.' || fullValue === '..') {
+ return false;
+ }
+
+ if (!workspaceFolders || workspaceFolders.length === 0) {
+ return false;
+ }
+
+ return true;
+}
+
function stripQuotes(fullValue: string) {
if (startsWith(fullValue, `'`) || startsWith(fullValue, `"`)) {
return fullValue.slice(1, -1);
@@ -59,16 +106,19 @@ function stripQuotes(fullValue: string) {
* Get a list of path suggestions. Folder suggestions are suffixed with a slash.
*/
function providePaths(valueBeforeCursor: string, activeDocFsPath: string, root?: string): string[] {
- if (startsWith(valueBeforeCursor, '/') && !root) {
- return [];
- }
-
const lastIndexOfSlash = valueBeforeCursor.lastIndexOf('/');
const valueBeforeLastSlash = valueBeforeCursor.slice(0, lastIndexOfSlash + 1);
- const parentDir = startsWith(valueBeforeCursor, '/')
- ? path.resolve(root, '.' + valueBeforeLastSlash)
- : path.resolve(activeDocFsPath, '..', valueBeforeLastSlash);
+ const startsWithSlash = startsWith(valueBeforeCursor, '/');
+ let parentDir: string;
+ if (startsWithSlash) {
+ if (!root) {
+ return [];
+ }
+ parentDir = path.resolve(root, '.' + valueBeforeLastSlash);
+ } else {
+ parentDir = path.resolve(activeDocFsPath, '..', valueBeforeLastSlash);
+ }
try {
return fs.readdirSync(parentDir).map(f => {
diff --git a/extensions/css-language-features/server/src/test/completion.test.ts b/extensions/css-language-features/server/src/test/completion.test.ts
index 62094de6b5b..65cfed74d0c 100644
--- a/extensions/css-language-features/server/src/test/completion.test.ts
+++ b/extensions/css-language-features/server/src/test/completion.test.ts
@@ -33,11 +33,11 @@ suite('Completions', () => {
}
};
- function assertCompletions(value: string, expected: { count?: number, items?: ItemDescription[] }, testUri: string, workspaceFolders?: WorkspaceFolder[]): void {
+ function assertCompletions(value: string, expected: { count?: number, items?: ItemDescription[] }, testUri: string, workspaceFolders?: WorkspaceFolder[], lang: string = 'css'): void {
const offset = value.indexOf('|');
value = value.substr(0, offset) + value.substr(offset + 1);
- const document = TextDocument.create(testUri, 'css', 0, value);
+ const document = TextDocument.create(testUri, lang, 0, value);
const position = document.positionAt(offset);
if (!workspaceFolders) {
@@ -61,7 +61,7 @@ suite('Completions', () => {
}
}
- test('CSS Path completion', function () {
+ test('CSS url() Path completion', function () {
let testUri = Uri.file(path.resolve(__dirname, '../../test/pathCompletionFixtures/about/about.css')).toString();
let folders = [{ name: 'x', uri: Uri.file(path.resolve(__dirname, '../../test')).toString() }];
@@ -95,7 +95,6 @@ suite('Completions', () => {
assertCompletions(`html { background-image: url('|')`, {
items: [
- { label: 'about.css', resultText: `html { background-image: url('about.css')` },
{ label: 'about.html', resultText: `html { background-image: url('about.html')` },
]
}, testUri, folders);
@@ -121,7 +120,7 @@ suite('Completions', () => {
}, testUri, folders);
});
- test('CSS Path Completion - Unquoted url', function () {
+ test('CSS url() Path Completion - Unquoted url', function () {
let testUri = Uri.file(path.resolve(__dirname, '../../test/pathCompletionFixtures/about/about.css')).toString();
let folders = [{ name: 'x', uri: Uri.file(path.resolve(__dirname, '../../test')).toString() }];
@@ -149,4 +148,49 @@ suite('Completions', () => {
]
}, testUri, folders);
});
+
+ test('CSS @import Path completion', function () {
+ let testUri = Uri.file(path.resolve(__dirname, '../../test/pathCompletionFixtures/about/about.css')).toString();
+ let folders = [{ name: 'x', uri: Uri.file(path.resolve(__dirname, '../../test')).toString() }];
+
+ assertCompletions(`@import './|'`, {
+ items: [
+ { label: 'about.html', resultText: `@import './about.html'` },
+ ]
+ }, testUri, folders);
+
+ assertCompletions(`@import '../|'`, {
+ items: [
+ { label: 'about/', resultText: `@import '../about/'` },
+ { label: 'scss/', resultText: `@import '../scss/'` },
+ { label: 'index.html', resultText: `@import '../index.html'` },
+ { label: 'src/', resultText: `@import '../src/'` }
+ ]
+ }, testUri, folders);
+ });
+
+ /**
+ * For SCSS, `@import 'foo';` can be used for importing partial file `_foo.scss`
+ */
+ test('SCSS @import Path completion', function () {
+ let testCSSUri = Uri.file(path.resolve(__dirname, '../../test/pathCompletionFixtures/about/about.css')).toString();
+ let folders = [{ name: 'x', uri: Uri.file(path.resolve(__dirname, '../../test')).toString() }];
+
+ /**
+ * We are in a CSS file, so no special treatment for SCSS partial files
+ */
+ assertCompletions(`@import '../scss/|'`, {
+ items: [
+ { label: 'main.scss', resultText: `@import '../scss/main.scss'` },
+ { label: '_foo.scss', resultText: `@import '../scss/_foo.scss'` }
+ ]
+ }, testCSSUri, folders);
+
+ let testSCSSUri = Uri.file(path.resolve(__dirname, '../../test/pathCompletionFixtures/scss/main.scss')).toString();
+ assertCompletions(`@import './|'`, {
+ items: [
+ { label: '_foo.scss', resultText: `@import './foo'` }
+ ]
+ }, testSCSSUri, folders, 'scss');
+ });
});
\ No newline at end of file
diff --git a/extensions/css-language-features/server/src/utils/documentContext.ts b/extensions/css-language-features/server/src/utils/documentContext.ts
new file mode 100644
index 00000000000..b37993b7655
--- /dev/null
+++ b/extensions/css-language-features/server/src/utils/documentContext.ts
@@ -0,0 +1,40 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+'use strict';
+
+import { DocumentContext } from 'vscode-css-languageservice';
+import { endsWith, startsWith } from '../utils/strings';
+import * as url from 'url';
+import { WorkspaceFolder } from 'vscode-languageserver';
+
+export function getDocumentContext(documentUri: string, workspaceFolders: WorkspaceFolder[]): DocumentContext {
+ function getRootFolder(): string | undefined {
+ for (let folder of workspaceFolders) {
+ let folderURI = folder.uri;
+ if (!endsWith(folderURI, '/')) {
+ folderURI = folderURI + '/';
+ }
+ if (startsWith(documentUri, folderURI)) {
+ return folderURI;
+ }
+ }
+ return void 0;
+ }
+
+ return {
+ resolveReference: (ref, base = documentUri) => {
+ if (ref[0] === '/') { // resolve absolute path against the current workspace folder
+ if (startsWith(base, 'file://')) {
+ let folderUri = getRootFolder();
+ if (folderUri) {
+ return folderUri + ref.substr(1);
+ }
+ }
+ }
+ return url.resolve(base, ref);
+ },
+ };
+}
+
diff --git a/extensions/css-language-features/server/src/utils/strings.ts b/extensions/css-language-features/server/src/utils/strings.ts
index f7ad0845cc8..114fb4f0808 100644
--- a/extensions/css-language-features/server/src/utils/strings.ts
+++ b/extensions/css-language-features/server/src/utils/strings.ts
@@ -17,3 +17,17 @@ export function startsWith(haystack: string, needle: string): boolean {
return true;
}
+
+/**
+ * Determines if haystack ends with needle.
+ */
+export function endsWith(haystack: string, needle: string): boolean {
+ let diff = haystack.length - needle.length;
+ if (diff > 0) {
+ return haystack.lastIndexOf(needle) === diff;
+ } else if (diff === 0) {
+ return haystack === needle;
+ } else {
+ return false;
+ }
+}
diff --git a/extensions/css-language-features/server/test/index.js b/extensions/css-language-features/server/test/index.js
new file mode 100644
index 00000000000..570751f14ce
--- /dev/null
+++ b/extensions/css-language-features/server/test/index.js
@@ -0,0 +1,34 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+const path = require('path');
+const Mocha = require('mocha');
+const glob = require('glob');
+
+const suite = 'Integration CSS Extension Tests';
+
+const options = {
+ ui: 'tdd',
+ useColors: true,
+ timeout: 60000
+};
+
+if (process.env.BUILD_ARTIFACTSTAGINGDIRECTORY) {
+ options.reporter = 'mocha-multi-reporters';
+ options.reporterOptions = {
+ reporterEnabled: 'spec, mocha-junit-reporter',
+ mochaJunitReporterReporterOptions: {
+ testsuitesTitle: `${suite} ${process.platform}`,
+ mochaFile: path.join(process.env.BUILD_ARTIFACTSTAGINGDIRECTORY, `test-results/${process.platform}-${suite.toLowerCase().replace(/[^\w]/g, '-')}-results.xml`)
+ }
+ };
+}
+
+const mocha = new Mocha(options);
+
+glob.sync(__dirname + '/../out/test/**/*.test.js')
+ .forEach(file => mocha.addFile(file));
+
+mocha.run(failures => process.exit(failures ? -1 : 0));
diff --git a/extensions/css-language-features/server/test/mocha.opts b/extensions/css-language-features/server/test/mocha.opts
deleted file mode 100644
index 97e8b723ae2..00000000000
--- a/extensions/css-language-features/server/test/mocha.opts
+++ /dev/null
@@ -1,3 +0,0 @@
---ui tdd
---useColors true
-./out/test
\ No newline at end of file
diff --git a/extensions/css-language-features/server/test/pathCompletionFixtures/scss/_foo.scss b/extensions/css-language-features/server/test/pathCompletionFixtures/scss/_foo.scss
new file mode 100644
index 00000000000..adae63e647c
--- /dev/null
+++ b/extensions/css-language-features/server/test/pathCompletionFixtures/scss/_foo.scss
@@ -0,0 +1,4 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
\ No newline at end of file
diff --git a/extensions/css-language-features/server/test/pathCompletionFixtures/scss/main.scss b/extensions/css-language-features/server/test/pathCompletionFixtures/scss/main.scss
new file mode 100644
index 00000000000..adae63e647c
--- /dev/null
+++ b/extensions/css-language-features/server/test/pathCompletionFixtures/scss/main.scss
@@ -0,0 +1,4 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
\ No newline at end of file
diff --git a/extensions/css-language-features/server/yarn.lock b/extensions/css-language-features/server/yarn.lock
index f9b1f5c6468..7e5589b98e8 100644
--- a/extensions/css-language-features/server/yarn.lock
+++ b/extensions/css-language-features/server/yarn.lock
@@ -6,50 +6,239 @@
version "2.2.33"
resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.33.tgz#d79a0061ec270379f4d9e225f4096fb436669def"
-"@types/node@7.0.43":
- version "7.0.43"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.43.tgz#a187e08495a075f200ca946079c914e1a5fe962c"
+"@types/node@^8.10.25":
+ version "8.10.25"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.25.tgz#801fe4e39372cef18f268db880a5fbfcf71adc7e"
-vscode-css-languageservice@^3.0.9-next.18:
- version "3.0.9-next.18"
- resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-3.0.9-next.18.tgz#f8f25123b5a8cdc9f72fafcd2c0088f726322437"
+ansi-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+
+balanced-match@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
dependencies:
- vscode-languageserver-types "^3.7.2"
- vscode-nls "^3.2.2"
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+browser-stdout@1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
+
+charenc@~0.0.1:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
+
+commander@2.15.1:
+ version "2.15.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+
+crypt@~0.0.1:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
+
+debug@3.1.0, debug@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
+ dependencies:
+ ms "2.0.0"
+
+debug@^2.2.0:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ dependencies:
+ ms "2.0.0"
+
+diff@3.5.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
+
+escape-string-regexp@1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+
+glob@7.1.2, glob@^7.1.2:
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+growl@1.10.5:
+ version "1.10.5"
+ resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+
+he@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+
+is-buffer@~1.1.1:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+
+lodash@^4.16.4:
+ version "4.17.10"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7"
+
+md5@^2.1.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9"
+ dependencies:
+ charenc "~0.0.1"
+ crypt "~0.0.1"
+ is-buffer "~1.1.1"
+
+minimatch@3.0.4, minimatch@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+
+mkdirp@0.5.1, mkdirp@~0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ dependencies:
+ minimist "0.0.8"
+
+mocha-junit-reporter@^1.17.0:
+ version "1.17.0"
+ resolved "https://registry.yarnpkg.com/mocha-junit-reporter/-/mocha-junit-reporter-1.17.0.tgz#2e5149ed40fc5d2e3ca71e42db5ab1fec9c6d85c"
+ dependencies:
+ debug "^2.2.0"
+ md5 "^2.1.0"
+ mkdirp "~0.5.1"
+ strip-ansi "^4.0.0"
+ xml "^1.0.0"
+
+mocha-multi-reporters@^1.1.7:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/mocha-multi-reporters/-/mocha-multi-reporters-1.1.7.tgz#cc7f3f4d32f478520941d852abb64d9988587d82"
+ dependencies:
+ debug "^3.1.0"
+ lodash "^4.16.4"
+
+mocha@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.2.0.tgz#6d8ae508f59167f940f2b5b3c4a612ae50c90ae6"
+ dependencies:
+ browser-stdout "1.3.1"
+ commander "2.15.1"
+ debug "3.1.0"
+ diff "3.5.0"
+ escape-string-regexp "1.0.5"
+ glob "7.1.2"
+ growl "1.10.5"
+ he "1.1.1"
+ minimatch "3.0.4"
+ mkdirp "0.5.1"
+ supports-color "5.4.0"
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+
+once@^1.3.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ dependencies:
+ wrappy "1"
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+
+strip-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+ dependencies:
+ ansi-regex "^3.0.0"
+
+supports-color@5.4.0:
+ version "5.4.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54"
+ dependencies:
+ has-flag "^3.0.0"
+
+vscode-css-languageservice@^3.0.11-next.2:
+ version "3.0.11-next.2"
+ resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-3.0.11-next.2.tgz#7aa41a895abbcb3c0884d9612ae546c39de8b984"
+ dependencies:
+ vscode-languageserver-types "^3.12.0"
+ vscode-nls "^3.2.5"
vscode-jsonrpc@^3.6.2:
version "3.6.2"
resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-3.6.2.tgz#3b5eef691159a15556ecc500e9a8a0dd143470c8"
-vscode-languageserver-protocol-foldingprovider@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol-foldingprovider/-/vscode-languageserver-protocol-foldingprovider-2.0.1.tgz#051d0d9e58d1b79dc4681acd48f21797f5515bfd"
- dependencies:
- vscode-languageserver-protocol "^3.7.2"
- vscode-languageserver-types "^3.7.2"
-
-vscode-languageserver-protocol@^3.7.2:
- version "3.7.2"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.7.2.tgz#df58621c032139010888b6a9ddc969423f9ba9d6"
+vscode-languageserver-protocol@^3.13.0-next.1:
+ version "3.13.0-next.1"
+ resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.13.0-next.1.tgz#24d15aa5769e4b035f6ce38342685959e1eb454e"
dependencies:
vscode-jsonrpc "^3.6.2"
- vscode-languageserver-types "^3.7.2"
+ vscode-languageserver-types "^3.13.0-next.1"
-vscode-languageserver-types@^3.7.2:
- version "3.7.2"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.7.2.tgz#aad8846f8e3e27962648554de5a8417e358f34eb"
+vscode-languageserver-types@^3.12.0:
+ version "3.12.0"
+ resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.12.0.tgz#f96051381b6a050b7175b37d6cb5d2f2eb64b944"
-vscode-languageserver@^4.1.3:
- version "4.1.3"
- resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-4.1.3.tgz#937d37c955b6b9c2409388413cd6f54d1eb9fe7d"
+vscode-languageserver-types@^3.13.0-next.1:
+ version "3.13.0-next.1"
+ resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.13.0-next.1.tgz#dd91b78b13a2a6c7131e8291e3db3183cf566280"
+
+vscode-languageserver@^5.1.0-next.5:
+ version "5.1.0-next.5"
+ resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-5.1.0-next.5.tgz#d343278b4de448a31f9db146b98638898c8d4f55"
dependencies:
- vscode-languageserver-protocol "^3.7.2"
- vscode-uri "^1.0.1"
+ vscode-languageserver-protocol "^3.13.0-next.1"
+ vscode-uri "^1.0.5"
-vscode-nls@^3.2.2:
- version "3.2.2"
- resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.2.tgz#3817eca5b985c2393de325197cf4e15eb2aa5350"
+vscode-nls@^3.2.5:
+ version "3.2.5"
+ resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.5.tgz#25520c1955108036dec607c85e00a522f247f1a4"
-vscode-uri@^1.0.1:
+vscode-uri@^1.0.5:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-1.0.6.tgz#6b8f141b0bbc44ad7b07e94f82f168ac7608ad4d"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+
+xml@^1.0.0:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-1.0.1.tgz#11a86befeac3c4aa3ec08623651a3c81a6d0bbc8"
+ resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5"
diff --git a/extensions/css-language-features/test/mocha.opts b/extensions/css-language-features/test/mocha.opts
new file mode 100644
index 00000000000..20fcfb6eef6
--- /dev/null
+++ b/extensions/css-language-features/test/mocha.opts
@@ -0,0 +1,3 @@
+--ui tdd
+--useColors true
+server/out/test/**.test.js
\ No newline at end of file
diff --git a/extensions/css-language-features/yarn.lock b/extensions/css-language-features/yarn.lock
index 98f6af48a34..b0af5d6319b 100644
--- a/extensions/css-language-features/yarn.lock
+++ b/extensions/css-language-features/yarn.lock
@@ -2,38 +2,167 @@
# yarn lockfile v1
-"@types/node@7.0.43":
- version "7.0.43"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.43.tgz#a187e08495a075f200ca946079c914e1a5fe962c"
+"@types/node@^8.10.25":
+ version "8.10.25"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.25.tgz#801fe4e39372cef18f268db880a5fbfcf71adc7e"
-vscode-jsonrpc@^3.6.2:
- version "3.6.2"
- resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-3.6.2.tgz#3b5eef691159a15556ecc500e9a8a0dd143470c8"
+balanced-match@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
-vscode-languageclient@^4.1.4:
- version "4.1.4"
- resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-4.1.4.tgz#fff1a6bca4714835dca7fce35bc4ce81442fdf2c"
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
dependencies:
- vscode-languageserver-protocol "^3.7.2"
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
-vscode-languageserver-protocol-foldingprovider@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol-foldingprovider/-/vscode-languageserver-protocol-foldingprovider-2.0.1.tgz#051d0d9e58d1b79dc4681acd48f21797f5515bfd"
+browser-stdout@1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
+
+commander@2.15.1:
+ version "2.15.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+
+debug@3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
dependencies:
- vscode-languageserver-protocol "^3.7.2"
- vscode-languageserver-types "^3.7.2"
+ ms "2.0.0"
-vscode-languageserver-protocol@^3.7.2:
- version "3.7.2"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.7.2.tgz#df58621c032139010888b6a9ddc969423f9ba9d6"
+diff@3.5.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
+
+escape-string-regexp@1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+
+glob@7.1.2:
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
dependencies:
- vscode-jsonrpc "^3.6.2"
- vscode-languageserver-types "^3.7.2"
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
-vscode-languageserver-types@^3.7.2:
- version "3.7.2"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.7.2.tgz#aad8846f8e3e27962648554de5a8417e358f34eb"
+growl@1.10.5:
+ version "1.10.5"
+ resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
-vscode-nls@^3.2.2:
- version "3.2.2"
- resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.2.tgz#3817eca5b985c2393de325197cf4e15eb2aa5350"
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+
+he@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+
+minimatch@3.0.4, minimatch@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+
+mkdirp@0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ dependencies:
+ minimist "0.0.8"
+
+mocha@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.2.0.tgz#6d8ae508f59167f940f2b5b3c4a612ae50c90ae6"
+ dependencies:
+ browser-stdout "1.3.1"
+ commander "2.15.1"
+ debug "3.1.0"
+ diff "3.5.0"
+ escape-string-regexp "1.0.5"
+ glob "7.1.2"
+ growl "1.10.5"
+ he "1.1.1"
+ minimatch "3.0.4"
+ mkdirp "0.5.1"
+ supports-color "5.4.0"
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+
+once@^1.3.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ dependencies:
+ wrappy "1"
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+
+semver@^5.5.0:
+ version "5.5.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477"
+
+supports-color@5.4.0:
+ version "5.4.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54"
+ dependencies:
+ has-flag "^3.0.0"
+
+vscode-jsonrpc@^3.7.0-next.1:
+ version "3.7.0-next.1"
+ resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-3.7.0-next.1.tgz#e7521cd8135006ba8bf57ebcedbf5b03ce17b23e"
+
+vscode-languageclient@^5.1.0-next.9:
+ version "5.1.0-next.9"
+ resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-5.1.0-next.9.tgz#fe56c523637c118f7b262952b889f760223ab75a"
+ dependencies:
+ semver "^5.5.0"
+ vscode-languageserver-protocol "^3.13.0-next.2"
+
+vscode-languageserver-protocol@^3.13.0-next.2:
+ version "3.13.0-next.2"
+ resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.13.0-next.2.tgz#7083e50d0d2096ba52de448082445b9c39081fdb"
+ dependencies:
+ vscode-jsonrpc "^3.7.0-next.1"
+ vscode-languageserver-types "^3.13.0-next.1"
+
+vscode-languageserver-types@^3.13.0-next.1:
+ version "3.13.0-next.1"
+ resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.13.0-next.1.tgz#dd91b78b13a2a6c7131e8291e3db3183cf566280"
+
+vscode-nls@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-4.0.0.tgz#4001c8a6caba5cedb23a9c5ce1090395c0e44002"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
diff --git a/extensions/css/.vscode/launch.json b/extensions/css/.vscode/launch.json
new file mode 100644
index 00000000000..2217bbd0770
--- /dev/null
+++ b/extensions/css/.vscode/launch.json
@@ -0,0 +1,14 @@
+{
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "name": "Launch Grammar",
+ "type": "extensionHost",
+ "request": "launch",
+ "runtimeExecutable": "${execPath}",
+ "args": [
+ "--extensionDevelopmentPath=${workspaceRoot}"
+ ]
+ }
+ ]
+}
diff --git a/extensions/css/package.json b/extensions/css/package.json
index 9517029a69f..13f737e92fc 100644
--- a/extensions/css/package.json
+++ b/extensions/css/package.json
@@ -8,7 +8,7 @@
"vscode": "0.10.x"
},
"scripts": {
- "update-grammar": "node ../../build/npm/update-grammar.js atom/language-css grammars/css.cson ./syntaxes/css.tmLanguage.json"
+ "update-grammar": "node ../../build/npm/update-grammar.js octref/language-css grammars/css.cson ./syntaxes/css.tmLanguage.json"
},
"contributes": {
"languages": [
diff --git a/extensions/css/syntaxes/css.tmLanguage.json b/extensions/css/syntaxes/css.tmLanguage.json
index a8fc2fe565e..e0721094a00 100644
--- a/extensions/css/syntaxes/css.tmLanguage.json
+++ b/extensions/css/syntaxes/css.tmLanguage.json
@@ -1,10 +1,10 @@
{
"information_for_contributors": [
- "This file has been converted from https://github.com/atom/language-css/blob/master/grammars/css.cson",
+ "This file has been converted from https://github.com/octref/language-css/blob/master/grammars/css.cson",
"If you want to provide a fix or improvement, please create a pull request against the original repository.",
"Once accepted there, we are happy to receive an update request."
],
- "version": "https://github.com/atom/language-css/commit/2bc1e294e2440ad91197263cd9f95dc4b00bab2f",
+ "version": "https://github.com/octref/language-css/commit/c2c3933bbd62f867acf68042f9e82fa1041c4101",
"name": "CSS",
"scopeName": "source.css",
"patterns": [
@@ -508,7 +508,7 @@
]
},
{
- "begin": "(?i)((@)viewport)(?=[\\s'\"{;]|/\\*|$)",
+ "begin": "(?i)((@)(-ms-|-o-)?viewport)(?=[\\s'\"{;]|/\\*|$)",
"beginCaptures": {
"1": {
"name": "keyword.control.at-rule.viewport.css"
@@ -604,6 +604,45 @@
"include": "#string"
}
]
+ },
+ {
+ "begin": "(?i)(?=@[\\w-]+(\\s|\\(|{|;|/\\*|$))",
+ "end": "(?<=}|;)(?!\\G)",
+ "patterns": [
+ {
+ "begin": "(?i)\\G(@)[\\w-]+",
+ "beginCaptures": {
+ "0": {
+ "name": "keyword.control.at-rule.css"
+ },
+ "1": {
+ "name": "punctuation.definition.keyword.css"
+ }
+ },
+ "end": "(?=\\s*[{;])",
+ "name": "meta.at-rule.header.css"
+ },
+ {
+ "begin": "{",
+ "beginCaptures": {
+ "0": {
+ "name": "punctuation.section.begin.bracket.curly.css"
+ }
+ },
+ "end": "}",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.section.end.bracket.curly.css"
+ }
+ },
+ "name": "meta.at-rule.body.css",
+ "patterns": [
+ {
+ "include": "$self"
+ }
+ ]
+ }
+ ]
}
]
},
@@ -1338,7 +1377,7 @@
"property-keywords": {
"patterns": [
{
- "match": "(?xi) (? {
+ if (e.affectsConfiguration(DEBUG_SETTINGS + '.' + AUTO_ATTACH_SETTING)) {
+ updateAutoAttach(context);
+ }
+ }));
+
+ updateAutoAttach(context);
+}
+
+export function deactivate(): void {
+}
+
+
+function toggleAutoAttachSetting(context: vscode.ExtensionContext) {
+
+ const conf = vscode.workspace.getConfiguration(DEBUG_SETTINGS);
+ if (conf) {
+ let value = conf.get(AUTO_ATTACH_SETTING);
+ if (value === 'on') {
+ value = 'off';
+ } else {
+ value = 'on';
+ }
+
+ const info = conf.inspect(AUTO_ATTACH_SETTING);
+ let target: vscode.ConfigurationTarget = vscode.ConfigurationTarget.Global;
+ if (info) {
+ if (info.workspaceFolderValue) {
+ target = vscode.ConfigurationTarget.WorkspaceFolder;
+ } else if (info.workspaceValue) {
+ target = vscode.ConfigurationTarget.Workspace;
+ } else if (info.globalValue) {
+ target = vscode.ConfigurationTarget.Global;
+ } else if (info.defaultValue) {
+ // setting not yet used: store setting in workspace
+ if (vscode.workspace.workspaceFolders) {
+ target = vscode.ConfigurationTarget.Workspace;
+ }
+ }
+ }
+ conf.update(AUTO_ATTACH_SETTING, value, target);
+ }
+}
+
+/**
+ * Updates the auto attach feature based on the user or workspace setting
+ */
+function updateAutoAttach(context: vscode.ExtensionContext) {
+
+ const newState = vscode.workspace.getConfiguration(DEBUG_SETTINGS).get(AUTO_ATTACH_SETTING);
+
+ if (newState !== currentState) {
+
+ if (newState === 'disabled') {
+
+ // turn everything off
+ if (statusItem) {
+ statusItem.hide();
+ statusItem.text = OFF_TEXT;
+ }
+ if (autoAttachStarted) {
+ vscode.commands.executeCommand('extension.node-debug.stopAutoAttach').then(_ => {
+ currentState = newState;
+ autoAttachStarted = false;
+ });
+ }
+
+ } else { // 'on' or 'off'
+
+ // make sure status bar item exists and is visible
+ if (!statusItem) {
+ statusItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left);
+ statusItem.command = TOGGLE_COMMAND;
+ statusItem.tooltip = localize('status.tooltip.auto.attach', "Automatically attach to node.js processes in debug mode");
+ statusItem.show();
+ context.subscriptions.push(statusItem);
+ } else {
+ statusItem.show();
+ }
+
+ if (newState === 'off') {
+ if (autoAttachStarted) {
+ vscode.commands.executeCommand('extension.node-debug.stopAutoAttach').then(_ => {
+ currentState = newState;
+ if (statusItem) {
+ statusItem.text = OFF_TEXT;
+ }
+ autoAttachStarted = false;
+ });
+ }
+
+ } else if (newState === 'on') {
+
+ const vscode_pid = process.env['VSCODE_PID'];
+ const rootPid = vscode_pid ? parseInt(vscode_pid) : 0;
+ vscode.commands.executeCommand('extension.node-debug.startAutoAttach', rootPid).then(_ => {
+ if (statusItem) {
+ statusItem.text = ON_TEXT;
+ }
+ currentState = newState;
+ autoAttachStarted = true;
+ });
+ }
+ }
+ }
+}
diff --git a/extensions/debug-auto-launch/src/typings/ref.d.ts b/extensions/debug-auto-launch/src/typings/ref.d.ts
new file mode 100644
index 00000000000..bc057c55878
--- /dev/null
+++ b/extensions/debug-auto-launch/src/typings/ref.d.ts
@@ -0,0 +1,7 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+///
+///
diff --git a/extensions/debug-auto-launch/tsconfig.json b/extensions/debug-auto-launch/tsconfig.json
new file mode 100644
index 00000000000..2a5517b5543
--- /dev/null
+++ b/extensions/debug-auto-launch/tsconfig.json
@@ -0,0 +1,16 @@
+{
+ "compilerOptions": {
+ "target": "es5",
+ "module": "commonjs",
+ "outDir": "./out",
+ "lib": [
+ "es2015"
+ ],
+ "strict": true,
+ "noUnusedLocals": true,
+ "downlevelIteration": true
+ },
+ "include": [
+ "src/**/*"
+ ]
+}
\ No newline at end of file
diff --git a/extensions/debug-auto-launch/yarn.lock b/extensions/debug-auto-launch/yarn.lock
new file mode 100644
index 00000000000..888e8da826d
--- /dev/null
+++ b/extensions/debug-auto-launch/yarn.lock
@@ -0,0 +1,11 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@types/node@8.0.33":
+ version "8.0.33"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.33.tgz#1126e94374014e54478092830704f6ea89df04cd"
+
+vscode-nls@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-4.0.0.tgz#4001c8a6caba5cedb23a9c5ce1090395c0e44002"
diff --git a/extensions/docker/test/colorize-results/Dockerfile.json b/extensions/docker/test/colorize-results/Dockerfile.json
index a18ec445c04..fcb2e004c16 100644
--- a/extensions/docker/test/colorize-results/Dockerfile.json
+++ b/extensions/docker/test/colorize-results/Dockerfile.json
@@ -179,9 +179,9 @@
"c": "#",
"t": "source.dockerfile comment.line.number-sign.dockerfile punctuation.definition.comment.dockerfile",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -190,9 +190,9 @@
"c": "RUN apt-get install -y nodejs=0.6.12~dfsg1-1ubuntu1",
"t": "source.dockerfile comment.line.number-sign.dockerfile",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
diff --git a/extensions/emmet/.vscodeignore b/extensions/emmet/.vscodeignore
index ebab1d50b9b..729e3f56400 100644
--- a/extensions/emmet/.vscodeignore
+++ b/extensions/emmet/.vscodeignore
@@ -1,3 +1,6 @@
test/**
src/**
-tsconfig.json
\ No newline at end of file
+out/**
+tsconfig.json
+extension.webpack.config.js
+
diff --git a/extensions/emmet/CONTRIBUTING.md b/extensions/emmet/CONTRIBUTING.md
new file mode 100644
index 00000000000..c6c334828c3
--- /dev/null
+++ b/extensions/emmet/CONTRIBUTING.md
@@ -0,0 +1,14 @@
+## How to build and run from source?
+
+Read the basics about extension authoring from [Extending Visual Studio Code](https://code.visualstudio.com/docs/extensions/overview)
+
+- Read [Build and Run VS Code from Source](https://github.com/Microsoft/vscode/wiki/How-to-Contribute#build-and-run-from-source) to get a local dev set up running for VS Code
+- Open the `extensions/emmet` folder in the vscode repo in VS Code
+- Press F5 to start debugging
+
+## Running tests
+
+Tests for Emmet extension are run as integration tests as part of VS Code.
+
+- Read [Build and Run VS Code from Source](https://github.com/Microsoft/vscode/wiki/How-to-Contribute#build-and-run-from-source) to get a local dev set up running for VS Code
+- Run `./scripts/test-integration.sh` to run all the integrations tests that include the Emmet tests.
\ No newline at end of file
diff --git a/extensions/emmet/README.md b/extensions/emmet/README.md
index a2720bbd541..b755345f787 100644
--- a/extensions/emmet/README.md
+++ b/extensions/emmet/README.md
@@ -1,25 +1,9 @@
# Emmet integration in Visual Studio Code
+**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.
+
## Features
-See [Emmet in Visual Studio Code](https://code.visualstudio.com/docs/editor/emmet)
-
-## How to build and run from source?
-
-Read the basics about extension authoring from [Extending Visual Studio Code](https://code.visualstudio.com/docs/extensions/overview)
-
-- Read [Build and Run VS Code from Source](https://github.com/Microsoft/vscode/wiki/How-to-Contribute#build-and-run-from-source) to get a local dev set up running for VS Code
-- Open the `extensions/emmet` folder in the vscode repo in VS Code
-- Press F5 to start debugging
-
-## Running tests
-
-Tests for Emmet extension are run as integration tests as part of VS Code.
-
-- Read [Build and Run VS Code from Source](https://github.com/Microsoft/vscode/wiki/How-to-Contribute#build-and-run-from-source) to get a local dev set up running for VS Code
-- Run `./scripts/test-integration.sh` to run all the integrations tests that include the Emmet tests.
-
-
-
-
+See [Emmet in Visual Studio Code](https://code.visualstudio.com/docs/editor/emmet) to learn about the features of this extension.
+Please read the [CONTRIBUTING.md](https://github.com/Microsoft/vscode/blob/master/extensions/emmet/CONTRIBUTING.md) file to learn how to contribute to this extension.
\ No newline at end of file
diff --git a/extensions/emmet/extension.webpack.config.js b/extensions/emmet/extension.webpack.config.js
new file mode 100644
index 00000000000..d5064ef4517
--- /dev/null
+++ b/extensions/emmet/extension.webpack.config.js
@@ -0,0 +1,20 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+//@ts-check
+
+'use strict';
+
+const withDefaults = require('../shared.webpack.config');
+
+module.exports = withDefaults({
+ context: __dirname,
+ entry: {
+ extension: './src/extension.ts',
+ },
+ externals: {
+ 'vscode-emmet-helper': 'commonjs vscode-emmet-helper',
+ },
+});
diff --git a/extensions/emmet/package.json b/extensions/emmet/package.json
index a8d65da831f..d9be62f74d1 100644
--- a/extensions/emmet/package.json
+++ b/extensions/emmet/package.json
@@ -39,17 +39,17 @@
"inMarkupAndStylesheetFilesOnly"
],
"default": "always",
- "description": "%emmetShowExpandedAbbreviation%"
+ "markdownDescription": "%emmetShowExpandedAbbreviation%"
},
"emmet.showAbbreviationSuggestions": {
"type": "boolean",
"default": true,
- "description": "%emmetShowAbbreviationSuggestions%"
+ "markdownDescription": "%emmetShowAbbreviationSuggestions%"
},
"emmet.includeLanguages": {
"type": "object",
"default": {},
- "description": "%emmetIncludeLanguages%"
+ "markdownDescription": "%emmetIncludeLanguages%"
},
"emmet.variables": {
"type": "object",
@@ -183,22 +183,22 @@
"css.webkitProperties": {
"type": "string",
"default": null,
- "description": "%emmetPreferencesCssWebkitProperties%"
+ "markdownDescription": "%emmetPreferencesCssWebkitProperties%"
},
"css.mozProperties": {
"type": "string",
"default": null,
- "description": "%emmetPreferencesCssMozProperties%"
+ "markdownDescription": "%emmetPreferencesCssMozProperties%"
},
"css.oProperties": {
"type": "string",
"default": null,
- "description": "%emmetPreferencesCssOProperties%"
+ "markdownDescription": "%emmetPreferencesCssOProperties%"
},
"css.msProperties": {
"type": "string",
"default": null,
- "description": "%emmetPreferencesCssMsProperties%"
+ "markdownDescription": "%emmetPreferencesCssMsProperties%"
},
"css.fuzzySearchMinScore": {
"type": "number",
@@ -210,12 +210,12 @@
"emmet.showSuggestionsAsSnippets": {
"type": "boolean",
"default": false,
- "description": "%emmetShowSuggestionsAsSnippets%"
+ "markdownDescription": "%emmetShowSuggestionsAsSnippets%"
},
"emmet.optimizeStylesheetParsing": {
"type": "boolean",
"default": true,
- "description": "%emmetOptimizeStylesheetParsing%"
+ "markdownDescription": "%emmetOptimizeStylesheetParsing%"
}
}
},
@@ -438,15 +438,15 @@
},
"devDependencies": {
"@types/node": "8.0.33",
+ "mocha-junit-reporter": "^1.17.0",
+ "mocha-multi-reporters": "^1.1.7",
"vscode": "1.0.1"
},
"dependencies": {
- "@emmetio/html-matcher": "^0.3.3",
"@emmetio/css-parser": "ramya-rao-a/css-parser#vscode",
+ "@emmetio/html-matcher": "^0.3.3",
"@emmetio/math-expression": "^0.1.1",
- "vscode-emmet-helper": "^1.2.9",
- "vscode-languageserver-types": "^3.5.0",
"image-size": "^0.5.2",
- "vscode-nls": "3.2.1"
+ "vscode-emmet-helper": "^1.2.11"
}
-}
\ No newline at end of file
+}
diff --git a/extensions/emmet/package.nls.json b/extensions/emmet/package.nls.json
index d43ba09bc46..3f3bf912fd8 100644
--- a/extensions/emmet/package.nls.json
+++ b/extensions/emmet/package.nls.json
@@ -25,10 +25,10 @@
"command.decrementNumberByTen": "Decrement by 10",
"emmetSyntaxProfiles": "Define profile for specified syntax or use your own profile with specific rules.",
"emmetExclude": "An array of languages where Emmet abbreviations should not be expanded.",
- "emmetExtensionsPath": "Path to a folder containing Emmet profiles and snippets.'",
- "emmetShowExpandedAbbreviation": "Shows expanded Emmet abbreviations as suggestions.\nThe option \"inMarkupAndStylesheetFilesOnly\" applies to html, haml, jade, slim, xml, xsl, css, scss, sass, less and stylus.\nThe option \"always\" applies to all parts of the file regardless of markup/css.",
- "emmetShowAbbreviationSuggestions": "Shows possible Emmet abbreviations as suggestions. Not applicable in stylesheets or when emmet.showExpandedAbbreviation is set to \"never\".",
- "emmetIncludeLanguages": "Enable Emmet abbreviations in languages that are not supported by default. Add a mapping here between the language and emmet supported language.\n E.g.: {\"vue-html\": \"html\", \"javascript\": \"javascriptreact\"}",
+ "emmetExtensionsPath": "Path to a folder containing Emmet profiles and snippets.",
+ "emmetShowExpandedAbbreviation": "Shows expanded Emmet abbreviations as suggestions.\nThe option `\"inMarkupAndStylesheetFilesOnly\"` applies to html, haml, jade, slim, xml, xsl, css, scss, sass, less and stylus.\nThe option `\"always\"` applies to all parts of the file regardless of markup/css.",
+ "emmetShowAbbreviationSuggestions": "Shows possible Emmet abbreviations as suggestions. Not applicable in stylesheets or when emmet.showExpandedAbbreviation is set to `\"never\"`.",
+ "emmetIncludeLanguages": "Enable Emmet abbreviations in languages that are not supported by default. Add a mapping here between the language and emmet supported language.\n E.g.: `{\"vue-html\": \"html\", \"javascript\": \"javascriptreact\"}`",
"emmetVariables": "Variables to be used in Emmet snippets",
"emmetTriggerExpansionOnTab": "When enabled, Emmet abbreviations are expanded when pressing TAB.",
"emmetPreferences": "Preferences used to modify behavior of some actions and resolvers of Emmet.",
@@ -40,7 +40,7 @@
"emmetPreferencesCssBetween": "Symbol to be placed at the between CSS property and value when expanding CSS abbreviations",
"emmetPreferencesSassBetween": "Symbol to be placed at the between CSS property and value when expanding CSS abbreviations in Sass files",
"emmetPreferencesStylusBetween": "Symbol to be placed at the between CSS property and value when expanding CSS abbreviations in Stylus files",
- "emmetShowSuggestionsAsSnippets": "If true, then Emmet suggestions will show up as snippets allowing you to order them as per editor.snippetSuggestions setting.",
+ "emmetShowSuggestionsAsSnippets": "If `true`, then Emmet suggestions will show up as snippets allowing you to order them as per `#editor.snippetSuggestions#` setting.",
"emmetPreferencesBemElementSeparator": "Element separator used for classes when using the BEM filter",
"emmetPreferencesBemModifierSeparator": "Modifier separator used for classes when using the BEM filter",
"emmetPreferencesFilterCommentBefore": "A definition of comment that should be placed before matched element when comment filter is applied.",
@@ -54,5 +54,5 @@
"emmetPreferencesCssOProperties": "Comma separated CSS properties that get the 'o' vendor prefix when used in Emmet abbreviation that starts with `-`. Set to empty string to always avoid the 'o' prefix.",
"emmetPreferencesCssMsProperties": "Comma separated CSS properties that get the 'ms' vendor prefix when used in Emmet abbreviation that starts with `-`. Set to empty string to always avoid the 'ms' prefix.",
"emmetPreferencesCssFuzzySearchMinScore": "The minimum score (from 0 to 1) that fuzzy-matched abbreviation should achieve. Lower values may produce many false-positive matches, higher values may reduce possible matches.",
- "emmetOptimizeStylesheetParsing": "When set to false, the whole file is parsed to determine if current position is valid for expanding Emmet abbreviations. When set to true, only the content around the current position in css/scss/less files is parsed."
+ "emmetOptimizeStylesheetParsing": "When set to `false`, the whole file is parsed to determine if current position is valid for expanding Emmet abbreviations. When set to `true`, only the content around the current position in css/scss/less files is parsed."
}
diff --git a/extensions/emmet/src/abbreviationActions.ts b/extensions/emmet/src/abbreviationActions.ts
index 55f1c1ac986..26444af31e5 100644
--- a/extensions/emmet/src/abbreviationActions.ts
+++ b/extensions/emmet/src/abbreviationActions.ts
@@ -96,6 +96,7 @@ function doWrapping(individualLines: boolean, args: any) {
const preceedingWhiteSpace = otherMatches ? otherMatches[1] : '';
textToWrapInPreview = rangeToReplace.isSingleLine ? [textToReplace] : ['\n\t' + textToReplace.split('\n' + preceedingWhiteSpace).join('\n\t') + '\n'];
}
+ textToWrapInPreview = textToWrapInPreview.map(e => e.replace(/(\$\d)/g, '\\$1'));
return {
previewRange: rangeToReplace,
@@ -497,6 +498,12 @@ export function isValidLocationForEmmetAbbreviation(document: vscode.TextDocumen
i--;
continue;
}
+ // Fix for https://github.com/Microsoft/vscode/issues/55411
+ // A space is not a valid character right after < in a tag name.
+ if (/\s/.test(char) && textToBackTrack[i] === startAngle) {
+ i--;
+ continue;
+ }
if (char !== startAngle && char !== endAngle) {
continue;
}
diff --git a/extensions/emmet/src/balance.ts b/extensions/emmet/src/balance.ts
index 5e323f29e22..4687b734524 100644
--- a/extensions/emmet/src/balance.ts
+++ b/extensions/emmet/src/balance.ts
@@ -61,7 +61,7 @@ function balance(out: boolean) {
}
function getRangeToBalanceOut(document: vscode.TextDocument, selection: vscode.Selection, rootNode: HtmlNode): vscode.Selection {
- let nodeToBalance = getHtmlNode(document, rootNode, selection.start);
+ let nodeToBalance = getHtmlNode(document, rootNode, selection.start, false);
if (!nodeToBalance) {
return selection;
}
diff --git a/extensions/emmet/src/locateFile.ts b/extensions/emmet/src/locateFile.ts
index f3fd2146a11..0ef2ad697ca 100644
--- a/extensions/emmet/src/locateFile.ts
+++ b/extensions/emmet/src/locateFile.ts
@@ -10,7 +10,9 @@
import * as path from 'path';
import * as fs from 'fs';
-const reAbsolute = /^\/+/;
+const reAbsolutePosix = /^\/+/;
+const reAbsoluteWin32 = /^\\+/;
+const reAbsolute = path.sep === '/' ? reAbsolutePosix : reAbsoluteWin32;
/**
* Locates given `filePath` on user’s file system and returns absolute path to it.
diff --git a/extensions/emmet/src/mergeLines.ts b/extensions/emmet/src/mergeLines.ts
index 848966de4d1..cebcea3010f 100644
--- a/extensions/emmet/src/mergeLines.ts
+++ b/extensions/emmet/src/mergeLines.ts
@@ -34,7 +34,7 @@ function getRangesToReplace(document: vscode.TextDocument, selection: vscode.Sel
let endNodeToUpdate: Node | null;
if (selection.isEmpty) {
- startNodeToUpdate = endNodeToUpdate = getNode(rootNode, selection.start);
+ startNodeToUpdate = endNodeToUpdate = getNode(rootNode, selection.start, true);
} else {
startNodeToUpdate = getNode(rootNode, selection.start, true);
endNodeToUpdate = getNode(rootNode, selection.end, true);
diff --git a/extensions/emmet/src/removeTag.ts b/extensions/emmet/src/removeTag.ts
index 0ea6e4dde96..9209a6d75e8 100644
--- a/extensions/emmet/src/removeTag.ts
+++ b/extensions/emmet/src/removeTag.ts
@@ -38,7 +38,7 @@ export function removeTag() {
function getRangeToRemove(editor: vscode.TextEditor, rootNode: HtmlNode, selection: vscode.Selection, indentInSpaces: string): vscode.Range[] {
- let nodeToUpdate = getHtmlNode(editor.document, rootNode, selection.start);
+ let nodeToUpdate = getHtmlNode(editor.document, rootNode, selection.start, true);
if (!nodeToUpdate) {
return [];
}
diff --git a/extensions/emmet/src/selectItemHTML.ts b/extensions/emmet/src/selectItemHTML.ts
index d5dbbf33d05..6fe1825fd87 100644
--- a/extensions/emmet/src/selectItemHTML.ts
+++ b/extensions/emmet/src/selectItemHTML.ts
@@ -8,7 +8,7 @@ import { getDeepestNode, findNextWord, findPrevWord, getHtmlNode } from './util'
import { HtmlNode } from 'EmmetNode';
export function nextItemHTML(selectionStart: vscode.Position, selectionEnd: vscode.Position, editor: vscode.TextEditor, rootNode: HtmlNode): vscode.Selection | undefined {
- let currentNode = getHtmlNode(editor.document, rootNode, selectionEnd);
+ let currentNode = getHtmlNode(editor.document, rootNode, selectionEnd, false);
let nextNode: HtmlNode | undefined = undefined;
if (!currentNode) {
@@ -31,7 +31,7 @@ export function nextItemHTML(selectionStart: vscode.Position, selectionEnd: vsco
// Get the first child of current node which is right after the cursor and is not a comment
nextNode = currentNode.firstChild;
- while (nextNode && (selectionEnd.isAfterOrEqual(nextNode.start) || nextNode.type === 'comment')) {
+ while (nextNode && (selectionEnd.isAfterOrEqual(nextNode.end) || nextNode.type === 'comment')) {
nextNode = nextNode.nextSibling;
}
}
@@ -54,7 +54,7 @@ export function nextItemHTML(selectionStart: vscode.Position, selectionEnd: vsco
}
export function prevItemHTML(selectionStart: vscode.Position, selectionEnd: vscode.Position, editor: vscode.TextEditor, rootNode: HtmlNode): vscode.Selection | undefined {
- let currentNode = getHtmlNode(editor.document, rootNode, selectionStart);
+ let currentNode = getHtmlNode(editor.document, rootNode, selectionStart, false);
let prevNode: HtmlNode | undefined = undefined;
if (!currentNode) {
@@ -63,7 +63,7 @@ export function prevItemHTML(selectionStart: vscode.Position, selectionEnd: vsco
if (currentNode.type !== 'comment' && selectionStart.translate(0, -1).isAfter(currentNode.open.start)) {
- if (selectionStart.isBefore(currentNode.open.end) || !currentNode.firstChild) {
+ if (selectionStart.isBefore(currentNode.open.end) || !currentNode.firstChild || selectionEnd.isBeforeOrEqual(currentNode.firstChild.start)) {
prevNode = currentNode;
} else {
// Select the child that appears just before the cursor and is not a comment
diff --git a/extensions/emmet/src/selectItemStylesheet.ts b/extensions/emmet/src/selectItemStylesheet.ts
index 3a63a8cb79f..29df659c564 100644
--- a/extensions/emmet/src/selectItemStylesheet.ts
+++ b/extensions/emmet/src/selectItemStylesheet.ts
@@ -51,7 +51,7 @@ export function nextItemStylesheet(startOffset: vscode.Position, endOffset: vsco
}
export function prevItemStylesheet(startOffset: vscode.Position, endOffset: vscode.Position, editor: vscode.TextEditor, rootNode: CssNode): vscode.Selection | undefined {
- let currentNode = getNode(rootNode, startOffset);
+ let currentNode = getNode(rootNode, startOffset, false);
if (!currentNode) {
currentNode = rootNode;
}
diff --git a/extensions/emmet/src/splitJoinTag.ts b/extensions/emmet/src/splitJoinTag.ts
index c437d5d14f3..a5f1d255c85 100644
--- a/extensions/emmet/src/splitJoinTag.ts
+++ b/extensions/emmet/src/splitJoinTag.ts
@@ -20,7 +20,7 @@ export function splitJoinTag() {
return editor.edit(editBuilder => {
editor.selections.reverse().forEach(selection => {
- let nodeToUpdate = getHtmlNode(editor.document, rootNode, selection.start);
+ let nodeToUpdate = getHtmlNode(editor.document, rootNode, selection.start, true);
if (nodeToUpdate) {
let textEdit = getRangesToReplace(editor.document, nodeToUpdate);
editBuilder.replace(textEdit.range, textEdit.newText);
diff --git a/extensions/emmet/src/test/abbreviationAction.test.ts b/extensions/emmet/src/test/abbreviationAction.test.ts
index 14286654d05..b5fb87d8b07 100644
--- a/extensions/emmet/src/test/abbreviationAction.test.ts
+++ b/extensions/emmet/src/test/abbreviationAction.test.ts
@@ -466,6 +466,16 @@ suite('Tests for jsx, xml and xsl', () => {
});
});
+ test('Expand abbreviation with condition containing less than sign for jsx', () => {
+ return withRandomFileEditor('if (foo < 10) { span.bar', 'javascriptreact', (editor, doc) => {
+ editor.selection = new Selection(0, 27, 0, 27);
+ return expandEmmetAbbreviation({ language: 'javascriptreact' }).then(() => {
+ assert.equal(editor.document.getText(), 'if (foo < 10) { ');
+ return Promise.resolve();
+ });
+ });
+ });
+
test('No expanding text inside open tag in completion list (jsx)', () => {
return testNoCompletion('jsx', htmlContents, new Selection(2, 4, 2, 4));
});
diff --git a/extensions/emmet/src/test/editPointSelectItemBalance.test.ts b/extensions/emmet/src/test/editPointSelectItemBalance.test.ts
index a9f25685b91..f05469ab440 100644
--- a/extensions/emmet/src/test/editPointSelectItemBalance.test.ts
+++ b/extensions/emmet/src/test/editPointSelectItemBalance.test.ts
@@ -113,6 +113,22 @@ suite('Tests for Next/Previous Select/Edit point and Balance actions', () => {
});
});
+ test('Emmet Select Next/Prev item at boundary', function(): any {
+ return withRandomFileEditor(htmlContents, '.html', (editor, doc) => {
+ editor.selections = [new Selection(4, 1, 4, 1)];
+
+ fetchSelectItem('next');
+ testSelection(editor.selection, 2, 4, 6);
+
+ editor.selections = [new Selection(4, 1, 4, 1)];
+
+ fetchSelectItem('prev');
+ testSelection(editor.selection, 1, 3, 5);
+
+ return Promise.resolve();
+ });
+ });
+
test('Emmet Next/Prev Item in html template', function (): any {
const templateContents = `
|type(?=[\\s=])(?!\\s*=\\s*('|\"|)(text/(javascript|ecmascript|babel)|application/((x-)?javascript|ecmascript|babel)|module)[\\s\"'>])))",
- "name": "meta.tag.metadata.script.html",
- "patterns": [
- {
- "include": "#tag-stuff"
- }
- ]
- },
- {
- "begin": "(?=(?i:type\\s*=\\s*('|\"|)(text/(x-handlebars|(x-(handlebars-)?|ng-)?template|html)[\\s\"'>])))",
- "end": "((<))(?=/(?i:script))",
- "endCaptures": {
- "0": {
- "name": "meta.tag.metadata.script.html"
- },
- "1": {
- "name": "punctuation.definition.tag.begin.html"
- },
- "2": {
- "name": "text.html.basic"
- }
- },
- "patterns": [
- {
- "begin": "\\G",
- "end": "(>)|(?=/>)",
- "endCaptures": {
- "1": {
- "name": "punctuation.definition.tag.end.html"
- }
- },
- "name": "meta.tag.metadata.script.html",
- "patterns": [
- {
- "include": "#tag-stuff"
- }
- ]
- },
- {
- "begin": "(?!\\G)",
- "end": "(?=(?i:script))",
- "name": "text.html.basic",
- "patterns": [
- {
- "include": "text.html.basic"
- }
- ]
- }
- ]
- },
- {
- "begin": "(?=(?i:type))",
- "end": "(<)(?=/(?i:script))",
- "endCaptures": {
- "0": {
- "name": "meta.tag.metadata.script.html"
- },
- "1": {
- "name": "punctuation.definition.tag.begin.html"
- }
- },
- "patterns": [
- {
- "begin": "\\G",
- "end": "(>)|(?=/>)",
- "endCaptures": {
- "1": {
- "name": "punctuation.definition.tag.end.html"
- }
- },
- "name": "meta.tag.metadata.script.html",
- "patterns": [
- {
- "include": "#tag-stuff"
- }
- ]
- },
- {
- "begin": "(?!\\G)",
- "end": "(?=(?i:script))",
- "name": "source.unknown"
- }
- ]
- }
- ]
- }
- ]
- }
- ]
- },
- {
- "begin": "(?)((?i:body|head|html)\\b)",
- "captures": {
- "1": {
- "name": "punctuation.definition.tag.html"
- },
- "2": {
- "name": "entity.name.tag.structure.any.html"
- }
- },
- "end": "(>)",
- "name": "meta.tag.structure.any.html",
- "patterns": [
- {
- "include": "#tag-stuff"
- }
- ]
- },
- {
- "begin": "(?)((?i:address|blockquote|dd|div|section|article|aside|header|footer|nav|menu|dl|dt|fieldset|form|frame|frameset|h1|h2|h3|h4|h5|h6|iframe|noframes|object|ol|p|ul|applet|center|dir|hr|pre)\\b)",
- "beginCaptures": {
- "1": {
- "name": "punctuation.definition.tag.begin.html"
- },
- "2": {
- "name": "entity.name.tag.block.any.html"
- }
- },
- "end": "(>)",
- "endCaptures": {
- "1": {
- "name": "punctuation.definition.tag.end.html"
- }
- },
- "name": "meta.tag.block.any.html",
- "patterns": [
- {
- "include": "#tag-stuff"
- }
- ]
- },
- {
- "begin": "(?)((?i:a|abbr|acronym|area|b|base|basefont|bdo|big|br|button|caption|cite|code|col|colgroup|del|dfn|em|font|head|html|i|img|input|ins|isindex|kbd|label|legend|li|link|map|meta|noscript|optgroup|option|param|q|s|samp|script|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|title|tr|tt|u|var)\\b(?!-))",
- "beginCaptures": {
- "1": {
- "name": "punctuation.definition.tag.begin.html"
- },
- "2": {
- "name": "entity.name.tag.inline.any.html"
- }
- },
- "end": "((?: ?/)?>)",
- "endCaptures": {
- "1": {
- "name": "punctuation.definition.tag.end.html"
- }
- },
- "name": "meta.tag.inline.any.html",
- "patterns": [
- {
- "include": "#tag-stuff"
- }
- ]
- },
- {
- "begin": "(?)([a-zA-Z][a-zA-Z0-9:-]*)",
- "beginCaptures": {
- "1": {
- "name": "punctuation.definition.tag.begin.html"
- },
- "2": {
- "name": "entity.name.tag.other.html"
- }
- },
- "end": "(/?>)",
- "endCaptures": {
- "1": {
- "name": "punctuation.definition.tag.end.html"
- }
- },
- "name": "meta.tag.other.html",
- "patterns": [
- {
- "include": "#tag-stuff"
- }
- ]
- },
- {
- "include": "#entities"
- },
- {
- "match": "<>",
- "name": "invalid.illegal.incomplete.html"
- }
- ],
- "repository": {
- "embedded-code": {
- "patterns": [
- {
- "include": "#smarty"
- },
- {
- "include": "#python"
+ "match": "--!>",
+ "name": "invalid.illegal.characters-not-allowed-here.html"
}
]
},
"entities": {
"patterns": [
+ {
+ "captures": {
+ "1": {
+ "name": "punctuation.definition.entity.html"
+ },
+ "912": {
+ "name": "punctuation.definition.entity.html"
+ }
+ },
+ "comment": "Yes this is a bit ridiculous, there are quite a lot of these",
+ "match": "(?x)\n\t\t\t\t\t\t(&)\t(?=[a-zA-Z])\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\t(a(s(ymp(eq)?|cr|t)|n(d(slope|d|v|and)?|g(s(t|ph)|zarr|e|le|rt(vb(d)?)?|msd(a(h|c|d|e|f|a|g|b))?)?)|c(y|irc|d|ute|E)?|tilde|o(pf|gon)|uml|p(id|os|prox(eq)?|e|E|acir)?|elig|f(r)?|w(conint|int)|l(pha|e(ph|fsym))|acute|ring|grave|m(p|a(cr|lg))|breve)|A(s(sign|cr)|nd|MP|c(y|irc)|tilde|o(pf|gon)|uml|pplyFunction|fr|Elig|lpha|acute|ring|grave|macr|breve))\n\t\t\t\t\t\t | (B(scr|cy|opf|umpeq|e(cause|ta|rnoullis)|fr|a(ckslash|r(v|wed))|reve)|b(s(cr|im(e)?|ol(hsub|b)?|emi)|n(ot|e(quiv)?)|c(y|ong)|ig(s(tar|qcup)|c(irc|up|ap)|triangle(down|up)|o(times|dot|plus)|uplus|vee|wedge)|o(t(tom)?|pf|wtie|x(h(d|u|D|U)?|times|H(d|u|D|U)?|d(R|l|r|L)|u(R|l|r|L)|plus|D(R|l|r|L)|v(R|h|H|l|r|L)?|U(R|l|r|L)|V(R|h|H|l|r|L)?|minus|box))|Not|dquo|u(ll(et)?|mp(e(q)?|E)?)|prime|e(caus(e)?|t(h|ween|a)|psi|rnou|mptyv)|karow|fr|l(ock|k(1(2|4)|34)|a(nk|ck(square|triangle(down|left|right)?|lozenge)))|a(ck(sim(eq)?|cong|prime|epsilon)|r(vee|wed(ge)?))|r(eve|vbar)|brk(tbrk)?))\n\t\t\t\t\t\t | (c(s(cr|u(p(e)?|b(e)?))|h(cy|i|eck(mark)?)|ylcty|c(irc|ups(sm)?|edil|a(ps|ron))|tdot|ir(scir|c(eq|le(d(R|circ|S|dash|ast)|arrow(left|right)))?|e|fnint|E|mid)?|o(n(int|g(dot)?)|p(y(sr)?|f|rod)|lon(e(q)?)?|m(p(fn|le(xes|ment))?|ma(t)?))|dot|u(darr(l|r)|p(s|c(up|ap)|or|dot|brcap)?|e(sc|pr)|vee|wed|larr(p)?|r(vearrow(left|right)|ly(eq(succ|prec)|vee|wedge)|arr(m)?|ren))|e(nt(erdot)?|dil|mptyv)|fr|w(conint|int)|lubs(uit)?|a(cute|p(s|c(up|ap)|dot|and|brcup)?|r(on|et))|r(oss|arr))|C(scr|hi|c(irc|onint|edil|aron)|ircle(Minus|Times|Dot|Plus)|Hcy|o(n(tourIntegral|int|gruent)|unterClockwiseContourIntegral|p(f|roduct)|lon(e)?)|dot|up(Cap)?|OPY|e(nterDot|dilla)|fr|lo(seCurly(DoubleQuote|Quote)|ckwiseContourIntegral)|a(yleys|cute|p(italDifferentialD)?)|ross))\n\t\t\t\t\t\t | (d(s(c(y|r)|trok|ol)|har(l|r)|c(y|aron)|t(dot|ri(f)?)|i(sin|e|v(ide(ontimes)?|onx)?|am(s|ond(suit)?)?|gamma)|Har|z(cy|igrarr)|o(t(square|plus|eq(dot)?|minus)?|ublebarwedge|pf|wn(harpoon(left|right)|downarrows|arrow)|llar)|d(otseq|a(rr|gger))?|u(har|arr)|jcy|e(lta|g|mptyv)|f(isht|r)|wangle|lc(orn|rop)|a(sh(v)?|leth|rr|gger)|r(c(orn|rop)|bkarow)|b(karow|lac)|Arr)|D(s(cr|trok)|c(y|aron)|Scy|i(fferentialD|a(critical(Grave|Tilde|Do(t|ubleAcute)|Acute)|mond))|o(t(Dot|Equal)?|uble(Right(Tee|Arrow)|ContourIntegral|Do(t|wnArrow)|Up(DownArrow|Arrow)|VerticalBar|L(ong(RightArrow|Left(RightArrow|Arrow))|eft(RightArrow|Tee|Arrow)))|pf|wn(Right(TeeVector|Vector(Bar)?)|Breve|Tee(Arrow)?|arrow|Left(RightVector|TeeVector|Vector(Bar)?)|Arrow(Bar|UpArrow)?))|Zcy|el(ta)?|D(otrahd)?|Jcy|fr|a(shv|rr|gger)))\n\t\t\t\t\t\t | (e(s(cr|im|dot)|n(sp|g)|c(y|ir(c)?|olon|aron)|t(h|a)|o(pf|gon)|dot|u(ro|ml)|p(si(v|lon)?|lus|ar(sl)?)|e|D(ot|Dot)|q(s(im|lant(less|gtr))|c(irc|olon)|u(iv(DD)?|est|als)|vparsl)|f(Dot|r)|l(s(dot)?|inters|l)?|a(ster|cute)|r(Dot|arr)|g(s(dot)?|rave)?|x(cl|ist|p(onentiale|ectation))|m(sp(1(3|4))?|pty(set|v)?|acr))|E(s(cr|im)|c(y|irc|aron)|ta|o(pf|gon)|NG|dot|uml|TH|psilon|qu(ilibrium|al(Tilde)?)|fr|lement|acute|grave|x(ists|ponentialE)|m(pty(SmallSquare|VerySmallSquare)|acr)))\n\t\t\t\t\t\t | (f(scr|nof|cy|ilig|o(pf|r(k(v)?|all))|jlig|partint|emale|f(ilig|l(ig|lig)|r)|l(tns|lig|at)|allingdotseq|r(own|a(sl|c(1(2|8|3|4|5|6)|78|2(3|5)|3(8|4|5)|45|5(8|6)))))|F(scr|cy|illed(SmallSquare|VerySmallSquare)|o(uriertrf|pf|rAll)|fr))\n\t\t\t\t\t\t | (G(scr|c(y|irc|edil)|t|opf|dot|T|Jcy|fr|amma(d)?|reater(Greater|SlantEqual|Tilde|Equal(Less)?|FullEqual|Less)|g|breve)|g(s(cr|im(e|l)?)|n(sim|e(q(q)?)?|E|ap(prox)?)|c(y|irc)|t(c(c|ir)|dot|quest|lPar|r(sim|dot|eq(qless|less)|less|a(pprox|rr)))?|imel|opf|dot|jcy|e(s(cc|dot(o(l)?)?|l(es)?)?|q(slant|q)?|l)?|v(nE|ertneqq)|fr|E(l)?|l(j|E|a)?|a(cute|p|mma(d)?)|rave|g(g)?|breve))\n\t\t\t\t\t\t | (h(s(cr|trok|lash)|y(phen|bull)|circ|o(ok(leftarrow|rightarrow)|pf|arr|rbar|mtht)|e(llip|arts(uit)?|rcon)|ks(earow|warow)|fr|a(irsp|lf|r(dcy|r(cir|w)?)|milt)|bar|Arr)|H(s(cr|trok)|circ|ilbertSpace|o(pf|rizontalLine)|ump(DownHump|Equal)|fr|a(cek|t)|ARDcy))\n\t\t\t\t\t\t | (i(s(cr|in(s(v)?|dot|v|E)?)|n(care|t(cal|prod|e(rcal|gers)|larhk)?|odot|fin(tie)?)?|c(y|irc)?|t(ilde)?|i(nfin|i(nt|int)|ota)?|o(cy|ta|pf|gon)|u(kcy|ml)|jlig|prod|e(cy|xcl)|quest|f(f|r)|acute|grave|m(of|ped|a(cr|th|g(part|e|line))))|I(scr|n(t(e(rsection|gral))?|visible(Comma|Times))|c(y|irc)|tilde|o(ta|pf|gon)|dot|u(kcy|ml)|Ocy|Jlig|fr|Ecy|acute|grave|m(plies|a(cr|ginaryI))?))\n\t\t\t\t\t\t | (j(s(cr|ercy)|c(y|irc)|opf|ukcy|fr|math)|J(s(cr|ercy)|c(y|irc)|opf|ukcy|fr))\n\t\t\t\t\t\t | (k(scr|hcy|c(y|edil)|opf|jcy|fr|appa(v)?|green)|K(scr|c(y|edil)|Hcy|opf|Jcy|fr|appa))\n\t\t\t\t\t\t | (l(s(h|cr|trok|im(e|g)?|q(uo(r)?|b)|aquo)|h(ar(d|u(l)?)|blk)|n(sim|e(q(q)?)?|E|ap(prox)?)|c(y|ub|e(il|dil)|aron)|Barr|t(hree|c(c|ir)|imes|dot|quest|larr|r(i(e|f)?|Par))?|Har|o(ng(left(arrow|rightarrow)|rightarrow|mapsto)|times|z(enge|f)?|oparrow(left|right)|p(f|lus|ar)|w(ast|bar)|a(ng|rr)|brk)|d(sh|ca|quo(r)?|r(dhar|ushar))|ur(dshar|uhar)|jcy|par(lt)?|e(s(s(sim|dot|eq(qgtr|gtr)|approx|gtr)|cc|dot(o(r)?)?|g(es)?)?|q(slant|q)?|ft(harpoon(down|up)|threetimes|leftarrows|arrow(tail)?|right(squigarrow|harpoons|arrow(s)?))|g)?|v(nE|ertneqq)|f(isht|loor|r)|E(g)?|l(hard|corner|tri|arr)?|a(ng(d|le)?|cute|t(e(s)?|ail)?|p|emptyv|quo|rr(sim|hk|tl|pl|fs|lp|b(fs)?)?|gran|mbda)|r(har(d)?|corner|tri|arr|m)|g(E)?|m(idot|oust(ache)?)|b(arr|r(k(sl(d|u)|e)|ac(e|k))|brk)|A(tail|arr|rr))|L(s(h|cr|trok)|c(y|edil|aron)|t|o(ng(RightArrow|left(arrow|rightarrow)|rightarrow|Left(RightArrow|Arrow))|pf|wer(RightArrow|LeftArrow))|T|e(ss(Greater|SlantEqual|Tilde|EqualGreater|FullEqual|Less)|ft(Right(Vector|Arrow)|Ceiling|T(ee(Vector|Arrow)?|riangle(Bar|Equal)?)|Do(ubleBracket|wn(TeeVector|Vector(Bar)?))|Up(TeeVector|DownVector|Vector(Bar)?)|Vector(Bar)?|arrow|rightarrow|Floor|A(ngleBracket|rrow(RightArrow|Bar)?)))|Jcy|fr|l(eftarrow)?|a(ng|cute|placetrf|rr|mbda)|midot))\n\t\t\t\t\t\t | (M(scr|cy|inusPlus|opf|u|e(diumSpace|llintrf)|fr|ap)|m(s(cr|tpos)|ho|nplus|c(y|omma)|i(nus(d(u)?|b)?|cro|d(cir|dot|ast)?)|o(dels|pf)|dash|u(ltimap|map)?|p|easuredangle|DDot|fr|l(cp|dr)|a(cr|p(sto(down|up|left)?)?|l(t(ese)?|e)|rker)))\n\t\t\t\t\t\t | (n(s(hort(parallel|mid)|c(cue|e|r)?|im(e(q)?)?|u(cc(eq)?|p(set(eq(q)?)?|e|E)?|b(set(eq(q)?)?|e|E)?)|par|qsu(pe|be)|mid)|Rightarrow|h(par|arr|Arr)|G(t(v)?|g)|c(y|ong(dot)?|up|edil|a(p|ron))|t(ilde|lg|riangle(left(eq)?|right(eq)?)|gl)|i(s(d)?|v)?|o(t(ni(v(c|a|b))?|in(dot|v(c|a|b)|E)?)?|pf)|dash|u(m(sp|ero)?)?|jcy|p(olint|ar(sl|t|allel)?|r(cue|e(c(eq)?)?)?)|e(s(im|ear)|dot|quiv|ar(hk|r(ow)?)|xist(s)?|Arr)?|v(sim|infin|Harr|dash|Dash|l(t(rie)?|e|Arr)|ap|r(trie|Arr)|g(t|e))|fr|w(near|ar(hk|r(ow)?)|Arr)|V(dash|Dash)|l(sim|t(ri(e)?)?|dr|e(s(s)?|q(slant|q)?|ft(arrow|rightarrow))?|E|arr|Arr)|a(ng|cute|tur(al(s)?)?|p(id|os|prox|E)?|bla)|r(tri(e)?|ightarrow|arr(c|w)?|Arr)|g(sim|t(r)?|e(s|q(slant|q)?)?|E)|mid|L(t(v)?|eft(arrow|rightarrow)|l)|b(sp|ump(e)?))|N(scr|c(y|edil|aron)|tilde|o(nBreakingSpace|Break|t(R(ightTriangle(Bar|Equal)?|everseElement)|Greater(Greater|SlantEqual|Tilde|Equal|FullEqual|Less)?|S(u(cceeds(SlantEqual|Tilde|Equal)?|perset(Equal)?|bset(Equal)?)|quareSu(perset(Equal)?|bset(Equal)?))|Hump(DownHump|Equal)|Nested(GreaterGreater|LessLess)|C(ongruent|upCap)|Tilde(Tilde|Equal|FullEqual)?|DoubleVerticalBar|Precedes(SlantEqual|Equal)?|E(qual(Tilde)?|lement|xists)|VerticalBar|Le(ss(Greater|SlantEqual|Tilde|Equal|Less)?|ftTriangle(Bar|Equal)?))?|pf)|u|e(sted(GreaterGreater|LessLess)|wLine|gative(MediumSpace|Thi(nSpace|ckSpace)|VeryThinSpace))|Jcy|fr|acute))\n\t\t\t\t\t\t | (o(s(cr|ol|lash)|h(m|bar)|c(y|ir(c)?)|ti(lde|mes(as)?)|S|int|opf|d(sold|iv|ot|ash|blac)|uml|p(erp|lus|ar)|elig|vbar|f(cir|r)|l(c(ir|ross)|t|ine|arr)|a(st|cute)|r(slope|igof|or|d(er(of)?|f|m)?|v|arr)?|g(t|on|rave)|m(i(nus|cron|d)|ega|acr))|O(s(cr|lash)|c(y|irc)|ti(lde|mes)|opf|dblac|uml|penCurly(DoubleQuote|Quote)|ver(B(ar|rac(e|ket))|Parenthesis)|fr|Elig|acute|r|grave|m(icron|ega|acr)))\n\t\t\t\t\t\t | (p(s(cr|i)|h(i(v)?|one|mmat)|cy|i(tchfork|v)?|o(intint|und|pf)|uncsp|er(cnt|tenk|iod|p|mil)|fr|l(us(sim|cir|two|d(o|u)|e|acir|mn|b)?|an(ck(h)?|kv))|ar(s(im|l)|t|a(llel)?)?|r(sim|n(sim|E|ap)|cue|ime(s)?|o(d|p(to)?|f(surf|line|alar))|urel|e(c(sim|n(sim|eqq|approx)|curlyeq|eq|approx)?)?|E|ap)?|m)|P(s(cr|i)|hi|cy|i|o(incareplane|pf)|fr|lusMinus|artialD|r(ime|o(duct|portion(al)?)|ecedes(SlantEqual|Tilde|Equal)?)?))\n\t\t\t\t\t\t | (q(scr|int|opf|u(ot|est(eq)?|at(int|ernions))|prime|fr)|Q(scr|opf|UOT|fr))\n\t\t\t\t\t\t | (R(s(h|cr)|ho|c(y|edil|aron)|Barr|ight(Ceiling|T(ee(Vector|Arrow)?|riangle(Bar|Equal)?)|Do(ubleBracket|wn(TeeVector|Vector(Bar)?))|Up(TeeVector|DownVector|Vector(Bar)?)|Vector(Bar)?|arrow|Floor|A(ngleBracket|rrow(Bar|LeftArrow)?))|o(undImplies|pf)|uleDelayed|e(verse(UpEquilibrium|E(quilibrium|lement)))?|fr|EG|a(ng|cute|rr(tl)?)|rightarrow)|r(s(h|cr|q(uo(r)?|b)|aquo)|h(o(v)?|ar(d|u(l)?))|nmid|c(y|ub|e(il|dil)|aron)|Barr|t(hree|imes|ri(e|f|ltri)?)|i(singdotseq|ng|ght(squigarrow|harpoon(down|up)|threetimes|left(harpoons|arrows)|arrow(tail)?|rightarrows))|Har|o(times|p(f|lus|ar)|a(ng|rr)|brk)|d(sh|ca|quo(r)?|ldhar)|uluhar|p(polint|ar(gt)?)|e(ct|al(s|ine|part)?|g)|f(isht|loor|r)|l(har|arr|m)|a(ng(d|e|le)?|c(ute|e)|t(io(nals)?|ail)|dic|emptyv|quo|rr(sim|hk|c|tl|pl|fs|w|lp|ap|b(fs)?)?)|rarr|x|moust(ache)?|b(arr|r(k(sl(d|u)|e)|ac(e|k))|brk)|A(tail|arr|rr)))\n\t\t\t\t\t\t | (s(s(cr|tarf|etmn|mile)|h(y|c(hcy|y)|ort(parallel|mid)|arp)|c(sim|y|n(sim|E|ap)|cue|irc|polint|e(dil)?|E|a(p|ron))?|t(ar(f)?|r(ns|aight(phi|epsilon)))|i(gma(v|f)?|m(ne|dot|plus|e(q)?|l(E)?|rarr|g(E)?)?)|zlig|o(pf|ftcy|l(b(ar)?)?)|dot(e|b)?|u(ng|cc(sim|n(sim|eqq|approx)|curlyeq|eq|approx)?|p(s(im|u(p|b)|et(neq(q)?|eq(q)?)?)|hs(ol|ub)|1|n(e|E)|2|d(sub|ot)|3|plus|e(dot)?|E|larr|mult)?|m|b(s(im|u(p|b)|et(neq(q)?|eq(q)?)?)|n(e|E)|dot|plus|e(dot)?|E|rarr|mult)?)|pa(des(uit)?|r)|e(swar|ct|tm(n|inus)|ar(hk|r(ow)?)|xt|mi|Arr)|q(su(p(set(eq)?|e)?|b(set(eq)?|e)?)|c(up(s)?|ap(s)?)|u(f|ar(e|f))?)|fr(own)?|w(nwar|ar(hk|r(ow)?)|Arr)|larr|acute|rarr|m(t(e(s)?)?|i(d|le)|eparsl|a(shp|llsetminus))|bquo)|S(scr|hort(RightArrow|DownArrow|UpArrow|LeftArrow)|c(y|irc|edil|aron)?|tar|igma|H(cy|CHcy)|opf|u(c(hThat|ceeds(SlantEqual|Tilde|Equal)?)|p(set|erset(Equal)?)?|m|b(set(Equal)?)?)|OFTcy|q(uare(Su(perset(Equal)?|bset(Equal)?)|Intersection|Union)?|rt)|fr|acute|mallCircle))\n\t\t\t\t\t\t | (t(s(hcy|c(y|r)|trok)|h(i(nsp|ck(sim|approx))|orn|e(ta(sym|v)?|re(4|fore))|k(sim|ap))|c(y|edil|aron)|i(nt|lde|mes(d|b(ar)?)?)|o(sa|p(cir|f(ork)?|bot)?|ea)|dot|prime|elrec|fr|w(ixt|ohead(leftarrow|rightarrow))|a(u|rget)|r(i(sb|time|dot|plus|e|angle(down|q|left(eq)?|right(eq)?)?|minus)|pezium|ade)|brk)|T(s(cr|trok)|RADE|h(i(nSpace|ckSpace)|e(ta|refore))|c(y|edil|aron)|S(cy|Hcy)|ilde(Tilde|Equal|FullEqual)?|HORN|opf|fr|a(u|b)|ripleDot))\n\t\t\t\t\t\t | (u(scr|h(ar(l|r)|blk)|c(y|irc)|t(ilde|dot|ri(f)?)|Har|o(pf|gon)|d(har|arr|blac)|u(arr|ml)|p(si(h|lon)?|harpoon(left|right)|downarrow|uparrows|lus|arrow)|f(isht|r)|wangle|l(c(orn(er)?|rop)|tri)|a(cute|rr)|r(c(orn(er)?|rop)|tri|ing)|grave|m(l|acr)|br(cy|eve)|Arr)|U(scr|n(ion(Plus)?|der(B(ar|rac(e|ket))|Parenthesis))|c(y|irc)|tilde|o(pf|gon)|dblac|uml|p(si(lon)?|downarrow|Tee(Arrow)?|per(RightArrow|LeftArrow)|DownArrow|Equilibrium|arrow|Arrow(Bar|DownArrow)?)|fr|a(cute|rr(ocir)?)|ring|grave|macr|br(cy|eve)))\n\t\t\t\t\t\t | (v(s(cr|u(pn(e|E)|bn(e|E)))|nsu(p|b)|cy|Bar(v)?|zigzag|opf|dash|prop|e(e(eq|bar)?|llip|r(t|bar))|Dash|fr|ltri|a(ngrt|r(s(igma|u(psetneq(q)?|bsetneq(q)?))|nothing|t(heta|riangle(left|right))|p(hi|i|ropto)|epsilon|kappa|r(ho)?))|rtri|Arr)|V(scr|cy|opf|dash(l)?|e(e|r(yThinSpace|t(ical(Bar|Separator|Tilde|Line))?|bar))|Dash|vdash|fr|bar))\n\t\t\t\t\t\t | (w(scr|circ|opf|p|e(ierp|d(ge(q)?|bar))|fr|r(eath)?)|W(scr|circ|opf|edge|fr))\n\t\t\t\t\t\t | (X(scr|i|opf|fr)|x(s(cr|qcup)|h(arr|Arr)|nis|c(irc|up|ap)|i|o(time|dot|p(f|lus))|dtri|u(tri|plus)|vee|fr|wedge|l(arr|Arr)|r(arr|Arr)|map))\n\t\t\t\t\t\t | (y(scr|c(y|irc)|icy|opf|u(cy|ml)|en|fr|ac(y|ute))|Y(scr|c(y|irc)|opf|uml|Icy|Ucy|fr|acute|Acy))\n\t\t\t\t\t\t | (z(scr|hcy|c(y|aron)|igrarr|opf|dot|e(ta|etrf)|fr|w(nj|j)|acute)|Z(scr|c(y|aron)|Hcy|opf|dot|e(ta|roWidthSpace)|fr|acute))\n\t\t\t\t\t\t)\n\t\t\t\t\t\t(;)\n\t\t\t\t\t",
+ "name": "constant.character.entity.named.$2.html"
+ },
{
"captures": {
"1": {
@@ -542,199 +492,2073 @@
"name": "punctuation.definition.entity.html"
}
},
- "match": "(&)([a-zA-Z0-9]+|#[0-9]+|#[xX][0-9a-fA-F]+)(;)",
- "name": "constant.character.entity.html"
+ "match": "(&)#[0-9]+(;)",
+ "name": "constant.character.entity.numeric.decimal.html"
},
{
- "match": "&",
- "name": "invalid.illegal.bad-ampersand.html"
- }
- ]
- },
- "python": {
- "begin": "(?:^\\s*)<\\?python(?!.*\\?>)",
- "end": "\\?>(?:\\s*$\\n)?",
- "name": "source.python.embedded.html",
- "patterns": [
- {
- "include": "source.python"
- }
- ]
- },
- "smarty": {
- "patterns": [
- {
- "begin": "(\\{(literal)\\})",
"captures": {
"1": {
- "name": "source.smarty.embedded.html"
+ "name": "punctuation.definition.entity.html"
+ },
+ "3": {
+ "name": "punctuation.definition.entity.html"
+ }
+ },
+ "match": "(&)#[xX][0-9a-fA-F]+(;)",
+ "name": "constant.character.entity.numeric.hexadecimal.html"
+ },
+ {
+ "match": "&(?=[a-zA-Z0-9]+;)",
+ "name": "invalid.illegal.ambiguous-ampersand.html"
+ }
+ ]
+ },
+ "math": {
+ "patterns": [
+ {
+ "begin": "(?i)(<)(math)(?=\\s|/?>)(?:(([^\"'>]|\"[^\"]*\"|'[^']*')*)(>))?",
+ "beginCaptures": {
+ "0": {
+ "name": "meta.tag.structure.$2.start.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
},
"2": {
- "name": "support.function.built-in.smarty"
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ "5": {
+ "name": "punctuation.definition.tag.end.html"
}
},
- "end": "(\\{/(literal)\\})"
- },
- {
- "begin": "{{|{",
- "disabled": 1,
- "end": "}}|}",
- "name": "source.smarty.embedded.html",
- "patterns": [
- {
- "include": "source.smarty"
- }
- ]
- }
- ]
- },
- "string-double-quoted": {
- "begin": "\"",
- "beginCaptures": {
- "0": {
- "name": "punctuation.definition.string.begin.html"
- }
- },
- "end": "\"",
- "endCaptures": {
- "0": {
- "name": "punctuation.definition.string.end.html"
- }
- },
- "name": "string.quoted.double.html",
- "patterns": [
- {
- "include": "#embedded-code"
- },
- {
- "include": "#entities"
- }
- ]
- },
- "string-single-quoted": {
- "begin": "'",
- "beginCaptures": {
- "0": {
- "name": "punctuation.definition.string.begin.html"
- }
- },
- "end": "'",
- "endCaptures": {
- "0": {
- "name": "punctuation.definition.string.end.html"
- }
- },
- "name": "string.quoted.single.html",
- "patterns": [
- {
- "include": "#embedded-code"
- },
- {
- "include": "#entities"
- }
- ]
- },
- "tag-generic-attribute": {
- "match": "(?<=[^=])\\b([a-zA-Z0-9:-]+)",
- "name": "entity.other.attribute-name.html"
- },
- "tag-id-attribute": {
- "begin": "\\b(id)\\b\\s*(=)",
- "captures": {
- "1": {
- "name": "entity.other.attribute-name.id.html"
- },
- "2": {
- "name": "punctuation.separator.key-value.html"
- }
- },
- "end": "(?!\\G)(?<='|\"|[^\\s<>/])",
- "name": "meta.attribute-with-value.id.html",
- "patterns": [
- {
- "begin": "\"",
- "beginCaptures": {
- "0": {
- "name": "punctuation.definition.string.begin.html"
- }
- },
- "contentName": "meta.toc-list.id.html",
- "end": "\"",
+ "end": "(?i)()(\\2)\\s*(>)",
"endCaptures": {
"0": {
- "name": "punctuation.definition.string.end.html"
+ "name": "meta.tag.structure.$2.end.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "name": "punctuation.definition.tag.end.html"
}
},
- "name": "string.quoted.double.html",
+ "name": "meta.element.structure.$2.html",
"patterns": [
{
- "include": "#embedded-code"
+ "begin": "(?)\\G",
+ "end": ">",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.structure.start.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
},
{
- "include": "#entities"
+ "include": "#tags"
}
]
- },
- {
- "begin": "'",
- "beginCaptures": {
- "0": {
- "name": "punctuation.definition.string.begin.html"
- }
- },
- "contentName": "meta.toc-list.id.html",
- "end": "'",
- "endCaptures": {
- "0": {
- "name": "punctuation.definition.string.end.html"
- }
- },
- "name": "string.quoted.single.html",
- "patterns": [
- {
- "include": "#embedded-code"
- },
- {
- "include": "#entities"
- }
- ]
- },
- {
- "captures": {
- "0": {
- "name": "meta.toc-list.id.html"
- }
- },
- "match": "(?<==)(?:[^\\s<>/'\"]|/(?!>))+",
- "name": "string.unquoted.html"
}
- ]
+ ],
+ "repository": {
+ "attribute": {
+ "patterns": [
+ {
+ "begin": "(s(hift|ymmetric|cript(sizemultiplier|level|minsize)|t(ackalign|retchy)|ide|u(pscriptshift|bscriptshift)|e(parator(s)?|lection)|rc)|h(eight|ref)|n(otation|umalign)|c(haralign|olumn(spa(n|cing)|width|lines|align)|lose|rossout)|i(n(dent(shift(first|last)?|target|align(first|last)?)|fixlinebreakstyle)|d)|o(pen|verflow)|d(i(splay(style)?|r)|e(nomalign|cimalpoint|pth))|position|e(dge|qual(columns|rows))|voffset|f(orm|ence|rame(spacing)?)|width|l(space|ine(thickness|leading|break(style|multchar)?)|o(ngdivstyle|cation)|ength|quote|argeop)|a(c(cent(under)?|tiontype)|l(t(text|img(-(height|valign|width))?)|ign(mentscope)?))|r(space|ow(spa(n|cing)|lines|align)|quote)|groupalign|x(link:href|mlns)|m(in(size|labelspacing)|ovablelimits|a(th(size|color|variant|background)|xsize))|bevelled)(?![\\w:-])",
+ "beginCaptures": {
+ "0": {
+ "name": "entity.other.attribute-name.html"
+ }
+ },
+ "end": "(?=\\s*+[^=\\s])",
+ "name": "meta.attribute.$1.html",
+ "patterns": [
+ {
+ "include": "#attribute-interior"
+ }
+ ]
+ },
+ {
+ "begin": "([^\\x{0020}\"'<>/=\\x{0000}-\\x{001F}\\x{007F}-\\x{009F}\\x{FDD0}-\\x{FDEF}\\x{FFFE}\\x{FFFF}\\x{1FFFE}\\x{1FFFF}\\x{2FFFE}\\x{2FFFF}\\x{3FFFE}\\x{3FFFF}\\x{4FFFE}\\x{4FFFF}\\x{5FFFE}\\x{5FFFF}\\x{6FFFE}\\x{6FFFF}\\x{7FFFE}\\x{7FFFF}\\x{8FFFE}\\x{8FFFF}\\x{9FFFE}\\x{9FFFF}\\x{AFFFE}\\x{AFFFF}\\x{BFFFE}\\x{BFFFF}\\x{CFFFE}\\x{CFFFF}\\x{DFFFE}\\x{DFFFF}\\x{EFFFE}\\x{EFFFF}\\x{FFFFE}\\x{FFFFF}\\x{10FFFE}\\x{10FFFF}]+)",
+ "beginCaptures": {
+ "0": {
+ "name": "entity.other.attribute-name.html"
+ }
+ },
+ "comment": "Anything else that is valid",
+ "end": "(?=\\s*+[^=\\s])",
+ "name": "meta.attribute.unrecognized.$1.html",
+ "patterns": [
+ {
+ "include": "#attribute-interior"
+ }
+ ]
+ },
+ {
+ "match": "[^\\s>]+",
+ "name": "invalid.illegal.character-not-allowed-here.html"
+ }
+ ]
+ },
+ "tags": {
+ "patterns": [
+ {
+ "include": "#comment"
+ },
+ {
+ "include": "#cdata"
+ },
+ {
+ "captures": {
+ "0": {
+ "name": "meta.tag.structure.math.$2.void.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ "5": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "match": "(?i)(<)(annotation|annotation-xml|semantics|menclose|merror|mfenced|mfrac|mpadded|mphantom|mroot|mrow|msqrt|mstyle|mmultiscripts|mover|mprescripts|msub|msubsup|msup|munder|munderover|none|mlabeledtr|mtable|mtd|mtr|mlongdiv|mscarries|mscarry|msgroup|msline|msrow|mstack|maction)(?=\\s|/?>)(?:(([^\"'>]|\"[^\"]*\"|'[^']*')*)(/>))",
+ "name": "meta.element.structure.math.$2.html"
+ },
+ {
+ "begin": "(?i)(<)(annotation|annotation-xml|semantics|menclose|merror|mfenced|mfrac|mpadded|mphantom|mroot|mrow|msqrt|mstyle|mmultiscripts|mover|mprescripts|msub|msubsup|msup|munder|munderover|none|mlabeledtr|mtable|mtd|mtr|mlongdiv|mscarries|mscarry|msgroup|msline|msrow|mstack|maction)(?=\\s|/?>)(?:(([^\"'>]|\"[^\"]*\"|'[^']*')*)(>))?",
+ "beginCaptures": {
+ "0": {
+ "name": "meta.tag.structure.math.$2.start.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ "5": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "end": "(?i)()(\\2)\\s*(>)|(/>)|(?=\\w+)",
+ "endCaptures": {
+ "0": {
+ "name": "meta.tag.structure.math.$2.end.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "name": "punctuation.definition.tag.end.html"
+ },
+ "4": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.element.structure.math.$2.html",
+ "patterns": [
+ {
+ "begin": "(?)\\G",
+ "end": "(?=/>)|>",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.structure.start.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "include": "#tags"
+ }
+ ]
+ },
+ {
+ "captures": {
+ "0": {
+ "name": "meta.tag.inline.math.$2.void.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ "5": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "match": "(?i)(<)(mi|mn|mo|ms|mspace|mtext|maligngroup|malignmark)(?=\\s|/?>)(?:(([^\"'>]|\"[^\"]*\"|'[^']*')*)(/>))",
+ "name": "meta.element.inline.math.$2.html"
+ },
+ {
+ "begin": "(?i)(<)(mi|mn|mo|ms|mspace|mtext|maligngroup|malignmark)(?=\\s|/?>)(?:(([^\"'>]|\"[^\"]*\"|'[^']*')*)(>))?",
+ "beginCaptures": {
+ "0": {
+ "name": "meta.tag.inline.math.$2.start.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ "5": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "end": "(?i)()(\\2)\\s*(>)|(/>)|(?=\\w+)",
+ "endCaptures": {
+ "0": {
+ "name": "meta.tag.inline.math.$2.end.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "name": "punctuation.definition.tag.end.html"
+ },
+ "4": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.element.inline.math.$2.html",
+ "patterns": [
+ {
+ "begin": "(?)\\G",
+ "end": "(?=/>)|>",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.inline.start.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "include": "#tags"
+ }
+ ]
+ },
+ {
+ "captures": {
+ "0": {
+ "name": "meta.tag.object.math.$2.void.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ "5": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "match": "(?i)(<)(mglyph)(?=\\s|/?>)(?:(([^\"'>]|\"[^\"]*\"|'[^']*')*)(/>))",
+ "name": "meta.element.object.math.$2.html"
+ },
+ {
+ "begin": "(?i)(<)(mglyph)(?=\\s|/?>)(?:(([^\"'>]|\"[^\"]*\"|'[^']*')*)(>))?",
+ "beginCaptures": {
+ "0": {
+ "name": "meta.tag.object.math.$2.start.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ "5": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "end": "(?i)()(\\2)\\s*(>)|(/>)|(?=\\w+)",
+ "endCaptures": {
+ "0": {
+ "name": "meta.tag.object.math.$2.end.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "name": "punctuation.definition.tag.end.html"
+ },
+ "4": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.element.object.math.$2.html",
+ "patterns": [
+ {
+ "begin": "(?)\\G",
+ "end": "(?=/>)|>",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.object.start.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "include": "#tags"
+ }
+ ]
+ },
+ {
+ "captures": {
+ "0": {
+ "name": "meta.tag.other.invalid.void.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "name": "invalid.illegal.unrecognized-tag.html"
+ },
+ "4": {
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ "6": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "match": "(?i)(<)(([\\w:]+))(?=\\s|/?>)(?:(([^\"'>]|\"[^\"]*\"|'[^']*')*)(/>))",
+ "name": "meta.element.other.invalid.html"
+ },
+ {
+ "begin": "(?i)(<)((\\w[^\\s>]*))(?=\\s|/?>)(?:(([^\"'>]|\"[^\"]*\"|'[^']*')*)(>))?",
+ "beginCaptures": {
+ "0": {
+ "name": "meta.tag.other.invalid.start.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "name": "invalid.illegal.unrecognized-tag.html"
+ },
+ "4": {
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ "6": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "end": "(?i)()((\\2))\\s*(>)|(/>)|(?=\\w+)",
+ "endCaptures": {
+ "0": {
+ "name": "meta.tag.other.invalid.end.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "name": "invalid.illegal.unrecognized-tag.html"
+ },
+ "4": {
+ "name": "punctuation.definition.tag.end.html"
+ },
+ "5": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.element.other.invalid.html",
+ "patterns": [
+ {
+ "begin": "(?)\\G",
+ "end": "(?=/>)|>",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.other.invalid.start.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "include": "#tags"
+ }
+ ]
+ },
+ {
+ "include": "#tags-invalid"
+ }
+ ]
+ }
+ }
},
- "tag-stuff": {
+ "svg": {
"patterns": [
{
- "include": "#tag-id-attribute"
+ "begin": "(?i)(<)(svg)(?=\\s|/?>)(?:(([^\"'>]|\"[^\"]*\"|'[^']*')*)(>))?",
+ "beginCaptures": {
+ "0": {
+ "name": "meta.tag.structure.$2.start.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ "5": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "end": "(?i)()(\\2)\\s*(>)",
+ "endCaptures": {
+ "0": {
+ "name": "meta.tag.structure.$2.end.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.element.structure.$2.html",
+ "patterns": [
+ {
+ "begin": "(?)\\G",
+ "end": ">",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.structure.start.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "include": "#tags"
+ }
+ ]
+ }
+ ],
+ "repository": {
+ "attribute": {
+ "patterns": [
+ {
+ "begin": "(s(hape-rendering|ystemLanguage|cale|t(yle|itchTiles|op-(color|opacity)|dDeviation|em(h|v)|artOffset|r(i(ng|kethrough-(thickness|position))|oke(-(opacity|dash(offset|array)|width|line(cap|join)|miterlimit))?))|urfaceScale|p(e(cular(Constant|Exponent)|ed)|acing|readMethod)|eed|lope)|h(oriz-(origin-x|adv-x)|eight|anging|ref(lang)?)|y(1|2|ChannelSelector)?|n(umOctaves|ame)|c(y|o(ntentS(criptType|tyleType)|lor(-(interpolation(-filters)?|profile|rendering))?)|ursor|l(ip(-(path|rule)|PathUnits)?|ass)|a(p-height|lcMode)|x)|t(ype|o|ext(-(decoration|anchor|rendering)|Length)|a(rget(X|Y)?|b(index|leValues))|ransform)|i(n(tercept|2)?|d(eographic)?|mage-rendering)|z(oomAndPan)?|o(p(erator|acity)|ver(flow|line-(thickness|position))|ffset|r(i(ent(ation)?|gin)|der))|d(y|i(splay|visor|ffuseConstant|rection)|ominant-baseline|ur|e(scent|celerate)|x)?|u(1|n(i(code(-(range|bidi))?|ts-per-em)|derline-(thickness|position))|2)|p(ing|oint(s(At(X|Y|Z))?|er-events)|a(nose-1|t(h(Length)?|tern(ContentUnits|Transform|Units))|int-order)|r(imitiveUnits|eserveA(spectRatio|lpha)))|e(n(d|able-background)|dgeMode|levation|x(ternalResourcesRequired|ponent))|v(i(sibility|ew(Box|Target))|-(hanging|ideographic|alphabetic|mathematical)|e(ctor-effect|r(sion|t-(origin-(y|x)|adv-y)))|alues)|k(1|2|3|e(y(Splines|Times|Points)|rn(ing|el(Matrix|UnitLength)))|4)?|f(y|il(ter(Res|Units)?|l(-(opacity|rule))?)|o(nt-(s(t(yle|retch)|ize(-adjust)?)|variant|family|weight)|rmat)|lood-(color|opacity)|r(om)?|x)|w(idth(s)?|ord-spacing|riting-mode)|l(i(ghting-color|mitingConeAngle)|ocal|e(ngthAdjust|tter-spacing)|ang)|a(scent|cc(umulate|ent-height)|ttribute(Name|Type)|zimuth|dditive|utoReverse|l(ignment-baseline|phabetic|lowReorder)|rabic-form|mplitude)|r(y|otate|e(s(tart|ult)|ndering-intent|peat(Count|Dur)|quired(Extensions|Features)|f(X|Y|errerPolicy)|l)|adius|x)?|g(1|2|lyph(Ref|-(name|orientation-(horizontal|vertical)))|radient(Transform|Units))|x(1|2|ChannelSelector|-height|link:(show|href|t(ype|itle)|a(ctuate|rcrole)|role)|ml:(space|lang|base))?|m(in|ode|e(thod|dia)|a(sk(ContentUnits|Units)?|thematical|rker(Height|-(start|end|mid)|Units|Width)|x))|b(y|ias|egin|ase(Profile|line-shift|Frequency)|box))(?![\\w:-])",
+ "beginCaptures": {
+ "0": {
+ "name": "entity.other.attribute-name.html"
+ }
+ },
+ "end": "(?=\\s*+[^=\\s])",
+ "name": "meta.attribute.$1.html",
+ "patterns": [
+ {
+ "include": "#attribute-interior"
+ }
+ ]
+ },
+ {
+ "begin": "([^\\x{0020}\"'<>/=\\x{0000}-\\x{001F}\\x{007F}-\\x{009F}\\x{FDD0}-\\x{FDEF}\\x{FFFE}\\x{FFFF}\\x{1FFFE}\\x{1FFFF}\\x{2FFFE}\\x{2FFFF}\\x{3FFFE}\\x{3FFFF}\\x{4FFFE}\\x{4FFFF}\\x{5FFFE}\\x{5FFFF}\\x{6FFFE}\\x{6FFFF}\\x{7FFFE}\\x{7FFFF}\\x{8FFFE}\\x{8FFFF}\\x{9FFFE}\\x{9FFFF}\\x{AFFFE}\\x{AFFFF}\\x{BFFFE}\\x{BFFFF}\\x{CFFFE}\\x{CFFFF}\\x{DFFFE}\\x{DFFFF}\\x{EFFFE}\\x{EFFFF}\\x{FFFFE}\\x{FFFFF}\\x{10FFFE}\\x{10FFFF}]+)",
+ "beginCaptures": {
+ "0": {
+ "name": "entity.other.attribute-name.html"
+ }
+ },
+ "comment": "Anything else that is valid",
+ "end": "(?=\\s*+[^=\\s])",
+ "name": "meta.attribute.unrecognized.$1.html",
+ "patterns": [
+ {
+ "include": "#attribute-interior"
+ }
+ ]
+ },
+ {
+ "match": "[^\\s>]+",
+ "name": "invalid.illegal.character-not-allowed-here.html"
+ }
+ ]
},
+ "tags": {
+ "patterns": [
+ {
+ "include": "#comment"
+ },
+ {
+ "include": "#cdata"
+ },
+ {
+ "captures": {
+ "0": {
+ "name": "meta.tag.metadata.svg.$2.void.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ "5": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "match": "(?i)(<)(color-profile|desc|metadata|script|style|title)(?=\\s|/?>)(?:(([^\"'>]|\"[^\"]*\"|'[^']*')*)(/>))",
+ "name": "meta.element.metadata.svg.$2.html"
+ },
+ {
+ "begin": "(?i)(<)(color-profile|desc|metadata|script|style|title)(?=\\s|/?>)(?:(([^\"'>]|\"[^\"]*\"|'[^']*')*)(>))?",
+ "beginCaptures": {
+ "0": {
+ "name": "meta.tag.metadata.svg.$2.start.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ "5": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "end": "(?i)()(\\2)\\s*(>)|(/>)|(?=\\w+)",
+ "endCaptures": {
+ "0": {
+ "name": "meta.tag.metadata.svg.$2.end.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "name": "punctuation.definition.tag.end.html"
+ },
+ "4": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.element.metadata.svg.$2.html",
+ "patterns": [
+ {
+ "begin": "(?)\\G",
+ "end": "(?=/>)|>",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.metadata.start.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "include": "#tags"
+ }
+ ]
+ },
+ {
+ "captures": {
+ "0": {
+ "name": "meta.tag.structure.svg.$2.void.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ "5": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "match": "(?i)(<)(animateMotion|clipPath|defs|feComponentTransfer|feDiffuseLighting|feMerge|feSpecularLighting|filter|g|hatch|linearGradient|marker|mask|mesh|meshgradient|meshpatch|meshrow|pattern|radialGradient|switch|text|textPath)(?=\\s|/?>)(?:(([^\"'>]|\"[^\"]*\"|'[^']*')*)(/>))",
+ "name": "meta.element.structure.svg.$2.html"
+ },
+ {
+ "begin": "(?i)(<)(animateMotion|clipPath|defs|feComponentTransfer|feDiffuseLighting|feMerge|feSpecularLighting|filter|g|hatch|linearGradient|marker|mask|mesh|meshgradient|meshpatch|meshrow|pattern|radialGradient|switch|text|textPath)(?=\\s|/?>)(?:(([^\"'>]|\"[^\"]*\"|'[^']*')*)(>))?",
+ "beginCaptures": {
+ "0": {
+ "name": "meta.tag.structure.svg.$2.start.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ "5": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "end": "(?i)()(\\2)\\s*(>)|(/>)|(?=\\w+)",
+ "endCaptures": {
+ "0": {
+ "name": "meta.tag.structure.svg.$2.end.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "name": "punctuation.definition.tag.end.html"
+ },
+ "4": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.element.structure.svg.$2.html",
+ "patterns": [
+ {
+ "begin": "(?)\\G",
+ "end": "(?=/>)|>",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.structure.start.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "include": "#tags"
+ }
+ ]
+ },
+ {
+ "captures": {
+ "0": {
+ "name": "meta.tag.inline.svg.$2.void.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ "5": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "match": "(?i)(<)(a|animate|discard|feBlend|feColorMatrix|feComposite|feConvolveMatrix|feDisplacementMap|feDistantLight|feDropShadow|feFlood|feFuncA|feFuncB|feFuncG|feFuncR|feGaussianBlur|feMergeNode|feMorphology|feOffset|fePointLight|feSpotLight|feTile|feTurbulence|hatchPath|mpath|set|solidcolor|stop|tspan)(?=\\s|/?>)(?:(([^\"'>]|\"[^\"]*\"|'[^']*')*)(/>))",
+ "name": "meta.element.inline.svg.$2.html"
+ },
+ {
+ "begin": "(?i)(<)(a|animate|discard|feBlend|feColorMatrix|feComposite|feConvolveMatrix|feDisplacementMap|feDistantLight|feDropShadow|feFlood|feFuncA|feFuncB|feFuncG|feFuncR|feGaussianBlur|feMergeNode|feMorphology|feOffset|fePointLight|feSpotLight|feTile|feTurbulence|hatchPath|mpath|set|solidcolor|stop|tspan)(?=\\s|/?>)(?:(([^\"'>]|\"[^\"]*\"|'[^']*')*)(>))?",
+ "beginCaptures": {
+ "0": {
+ "name": "meta.tag.inline.svg.$2.start.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ "5": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "end": "(?i)()(\\2)\\s*(>)|(/>)|(?=\\w+)",
+ "endCaptures": {
+ "0": {
+ "name": "meta.tag.inline.svg.$2.end.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "name": "punctuation.definition.tag.end.html"
+ },
+ "4": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.element.inline.svg.$2.html",
+ "patterns": [
+ {
+ "begin": "(?)\\G",
+ "end": "(?=/>)|>",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.inline.start.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "include": "#tags"
+ }
+ ]
+ },
+ {
+ "captures": {
+ "0": {
+ "name": "meta.tag.object.svg.$2.void.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ "5": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "match": "(?i)(<)(circle|ellipse|feImage|foreignObject|image|line|path|polygon|polyline|rect|symbol|use|view)(?=\\s|/?>)(?:(([^\"'>]|\"[^\"]*\"|'[^']*')*)(/>))",
+ "name": "meta.element.object.svg.$2.html"
+ },
+ {
+ "begin": "(?i)(<)(a|circle|ellipse|feImage|foreignObject|image|line|path|polygon|polyline|rect|symbol|use|view)(?=\\s|/?>)(?:(([^\"'>]|\"[^\"]*\"|'[^']*')*)(>))?",
+ "beginCaptures": {
+ "0": {
+ "name": "meta.tag.object.svg.$2.start.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ "5": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "end": "(?i)()(\\2)\\s*(>)|(/>)|(?=\\w+)",
+ "endCaptures": {
+ "0": {
+ "name": "meta.tag.object.svg.$2.end.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "name": "punctuation.definition.tag.end.html"
+ },
+ "4": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.element.object.svg.$2.html",
+ "patterns": [
+ {
+ "begin": "(?)\\G",
+ "end": "(?=/>)|>",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.object.start.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "include": "#tags"
+ }
+ ]
+ },
+ {
+ "captures": {
+ "0": {
+ "name": "meta.tag.other.svg.$2.void.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "name": "invalid.deprecated.html"
+ },
+ "4": {
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ "6": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "match": "(?i)(<)((altGlyph|altGlyphDef|altGlyphItem|animateColor|animateTransform|cursor|font|font-face|font-face-format|font-face-name|font-face-src|font-face-uri|glyph|glyphRef|hkern|missing-glyph|tref|vkern))(?=\\s|/?>)(?:(([^\"'>]|\"[^\"]*\"|'[^']*')*)(/>))",
+ "name": "meta.element.other.svg.$2.html"
+ },
+ {
+ "begin": "(?i)(<)((altGlyph|altGlyphDef|altGlyphItem|animateColor|animateTransform|cursor|font|font-face|font-face-format|font-face-name|font-face-src|font-face-uri|glyph|glyphRef|hkern|missing-glyph|tref|vkern))(?=\\s|/?>)(?:(([^\"'>]|\"[^\"]*\"|'[^']*')*)(>))?",
+ "beginCaptures": {
+ "0": {
+ "name": "meta.tag.other.svg.$2.start.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "name": "invalid.deprecated.html"
+ },
+ "4": {
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ "6": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "end": "(?i)()((\\2))\\s*(>)|(/>)|(?=\\w+)",
+ "endCaptures": {
+ "0": {
+ "name": "meta.tag.other.svg.$2.end.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "name": "invalid.deprecated.html"
+ },
+ "4": {
+ "name": "punctuation.definition.tag.end.html"
+ },
+ "5": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.element.other.svg.$2.html",
+ "patterns": [
+ {
+ "begin": "(?)\\G",
+ "end": "(?=/>)|>",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.other.start.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "include": "#tags"
+ }
+ ]
+ },
+ {
+ "captures": {
+ "0": {
+ "name": "meta.tag.other.invalid.void.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "name": "invalid.illegal.unrecognized-tag.html"
+ },
+ "4": {
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ "6": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "match": "(?i)(<)(([\\w:]+))(?=\\s|/?>)(?:(([^\"'>]|\"[^\"]*\"|'[^']*')*)(/>))",
+ "name": "meta.element.other.invalid.html"
+ },
+ {
+ "begin": "(?i)(<)((\\w[^\\s>]*))(?=\\s|/?>)(?:(([^\"'>]|\"[^\"]*\"|'[^']*')*)(>))?",
+ "beginCaptures": {
+ "0": {
+ "name": "meta.tag.other.invalid.start.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "name": "invalid.illegal.unrecognized-tag.html"
+ },
+ "4": {
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ "6": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "end": "(?i)()((\\2))\\s*(>)|(/>)|(?=\\w+)",
+ "endCaptures": {
+ "0": {
+ "name": "meta.tag.other.invalid.end.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "name": "invalid.illegal.unrecognized-tag.html"
+ },
+ "4": {
+ "name": "punctuation.definition.tag.end.html"
+ },
+ "5": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.element.other.invalid.html",
+ "patterns": [
+ {
+ "begin": "(?)\\G",
+ "end": "(?=/>)|>",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.other.invalid.start.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "include": "#tags"
+ }
+ ]
+ },
+ {
+ "include": "#tags-invalid"
+ }
+ ]
+ }
+ }
+ },
+ "tags-invalid": {
+ "patterns": [
{
- "include": "#tag-generic-attribute"
- },
- {
- "include": "#string-double-quoted"
- },
- {
- "include": "#string-single-quoted"
- },
- {
- "include": "#embedded-code"
- },
- {
- "include": "#unquoted-attribute"
+ "begin": "(?)((\\w[^\\s>]*))(?)",
+ "endCaptures": {
+ "1": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.other.$2.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
}
]
},
- "unquoted-attribute": {
- "match": "(?<==)(?:[^\\s<>/'\"]|/(?!>))+",
- "name": "string.unquoted.html"
+ "tags-valid": {
+ "patterns": [
+ {
+ "begin": "(^[ \\t]+)?(?=<(?i:style)\\b(?!-))",
+ "beginCaptures": {
+ "1": {
+ "name": "punctuation.whitespace.embedded.leading.html"
+ }
+ },
+ "end": "(?!\\G)([ \\t]*$\\n?)?",
+ "endCaptures": {
+ "1": {
+ "name": "punctuation.whitespace.embedded.trailing.html"
+ }
+ },
+ "patterns": [
+ {
+ "begin": "(?i)(<)(style)(?=\\s|/?>)",
+ "beginCaptures": {
+ "0": {
+ "name": "meta.tag.metadata.style.start.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ }
+ },
+ "end": "(?i)((<)/)(style)\\s*(>)",
+ "endCaptures": {
+ "0": {
+ "name": "meta.tag.metadata.style.end.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "source.css"
+ },
+ "3": {
+ "name": "entity.name.tag.html"
+ },
+ "4": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.embedded.block.html",
+ "patterns": [
+ {
+ "begin": "\\G",
+ "captures": {
+ "1": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "end": "(>)",
+ "name": "meta.tag.metadata.style.start.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "begin": "(?!\\G)",
+ "end": "(?=(?i:style))",
+ "name": "source.css",
+ "patterns": [
+ {
+ "include": "source.css"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "begin": "(^[ \\t]+)?(?=<(?i:script)\\b(?!-))",
+ "beginCaptures": {
+ "1": {
+ "name": "punctuation.whitespace.embedded.leading.html"
+ }
+ },
+ "end": "(?!\\G)([ \\t]*$\\n?)?",
+ "endCaptures": {
+ "1": {
+ "name": "punctuation.whitespace.embedded.trailing.html"
+ }
+ },
+ "patterns": [
+ {
+ "begin": "(<)((?i:script))\\b",
+ "beginCaptures": {
+ "0": {
+ "name": "meta.tag.metadata.script.start.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ }
+ },
+ "end": "(/)((?i:script))(>)",
+ "endCaptures": {
+ "0": {
+ "name": "meta.tag.metadata.script.end.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.embedded.block.html",
+ "patterns": [
+ {
+ "begin": "\\G",
+ "end": "(?=/)",
+ "patterns": [
+ {
+ "begin": "(>)",
+ "beginCaptures": {
+ "0": {
+ "name": "meta.tag.metadata.script.start.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "end": "((<))(?=/(?i:script))",
+ "endCaptures": {
+ "0": {
+ "name": "meta.tag.metadata.script.end.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "source.js"
+ }
+ },
+ "patterns": [
+ {
+ "begin": "\\G",
+ "end": "(?=(?i:script))",
+ "name": "source.js",
+ "patterns": [
+ {
+ "begin": "(^[ \\t]+)?(?=//)",
+ "beginCaptures": {
+ "1": {
+ "name": "punctuation.whitespace.comment.leading.js"
+ }
+ },
+ "end": "(?!\\G)",
+ "patterns": [
+ {
+ "begin": "//",
+ "beginCaptures": {
+ "0": {
+ "name": "punctuation.definition.comment.js"
+ }
+ },
+ "end": "(?=\t\t\t\t\t\t\t\t\t\t\t# Tag without type attribute\n\t\t\t\t\t\t\t\t\t\t\t\t | type(?=[\\s=])\n\t\t\t\t\t\t\t\t\t\t\t\t \t(?!\\s*=\\s*\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''\t\t\t\t\t\t\t\t# Empty\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t | \"\"\t\t\t\t\t\t\t\t\t# Values\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t | ('|\"|)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttext/\t\t\t\t\t\t\t# Text mime-types\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tjavascript(1\\.[0-5])?\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t | x-javascript\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t | jscript\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t | livescript\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t | (x-)?ecmascript\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t | babel\t\t\t\t\t\t# Javascript variant currently\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t \t\t\t\t\t\t\t\t# recognized as such\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t \t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t | application/\t\t\t\t\t# Application mime-types\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t \t(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(x-)?javascript\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t | (x-)?ecmascript\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t | module\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t \t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[\\s\"'>]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)",
+ "name": "meta.tag.metadata.script.start.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "begin": "(?ix:\n\t\t\t\t\t\t\t\t\t\t\t\t(?=\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype\\s*=\\s*\n\t\t\t\t\t\t\t\t\t\t\t\t\t('|\"|)\n\t\t\t\t\t\t\t\t\t\t\t\t\ttext/\n\t\t\t\t\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tx-handlebars\n\t\t\t\t\t\t\t\t\t\t\t\t\t | (x-(handlebars-)?|ng-)?template\n\t\t\t\t\t\t\t\t\t\t\t\t\t | html\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t[\\s\"'>]\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)",
+ "end": "((<))(?=/(?i:script))",
+ "endCaptures": {
+ "0": {
+ "name": "meta.tag.metadata.script.end.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "text.html.basic"
+ }
+ },
+ "patterns": [
+ {
+ "begin": "\\G",
+ "end": "(>)",
+ "endCaptures": {
+ "1": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.metadata.script.start.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "begin": "(?!\\G)",
+ "end": "(?=(?i:script))",
+ "name": "text.html.basic",
+ "patterns": [
+ {
+ "include": "text.html.basic"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "begin": "(?=(?i:type))",
+ "end": "(<)(?=/(?i:script))",
+ "endCaptures": {
+ "0": {
+ "name": "meta.tag.metadata.script.end.html"
+ },
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ }
+ },
+ "patterns": [
+ {
+ "begin": "\\G",
+ "end": "(>)",
+ "endCaptures": {
+ "1": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.metadata.script.start.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "begin": "(?!\\G)",
+ "end": "(?=(?i:script))",
+ "name": "source.unknown"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "begin": "(?i)(<)(base|link|meta)(?=\\s|/?>)",
+ "beginCaptures": {
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ }
+ },
+ "end": "/?>",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.metadata.$2.void.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "begin": "(?i)(<)(noscript|title)(?=\\s|/?>)",
+ "beginCaptures": {
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ }
+ },
+ "end": ">",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.metadata.$2.start.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "begin": "(?i)()(noscript|title)(?=\\s|/?>)",
+ "beginCaptures": {
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ }
+ },
+ "end": ">",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.metadata.$2.end.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "begin": "(?i)(<)(col|hr|input)(?=\\s|/?>)",
+ "beginCaptures": {
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ }
+ },
+ "end": "/?>",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.structure.$2.void.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "begin": "(?i)(<)(address|article|aside|blockquote|body|button|caption|colgroup|datalist|dd|details|dialog|div|dl|dt|fieldset|figcaption|figure|footer|form|head|header|hgroup|html|h[1-6]|label|legend|li|main|map|menu|meter|nav|ol|optgroup|option|output|p|pre|progress|section|select|slot|summary|table|tbody|td|template|textarea|tfoot|th|thead|tr|ul)(?=\\s|/?>)",
+ "beginCaptures": {
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ }
+ },
+ "end": ">",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.structure.$2.start.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "begin": "(?i)()(address|article|aside|blockquote|body|button|caption|colgroup|datalist|dd|details|dialog|div|dl|dt|fieldset|figcaption|figure|footer|form|head|header|hgroup|html|h[1-6]|label|legend|li|main|map|menu|meter|nav|ol|optgroup|option|output|p|pre|progress|section|select|slot|summary|table|tbody|td|template|textarea|tfoot|th|thead|tr|ul)(?=\\s|/?>)",
+ "beginCaptures": {
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ }
+ },
+ "end": ">",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.structure.$2.end.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "begin": "(?i)(<)(area|br|wbr)(?=\\s|/?>)",
+ "beginCaptures": {
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ }
+ },
+ "end": "/?>",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.inline.$2.void.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "begin": "(?i)(<)(a|abbr|b|bdi|bdo|cite|code|data|del|dfn|em|i|ins|kbd|mark|q|rp|rt|ruby|s|samp|small|span|strong|sub|sup|time|u|var)(?=\\s|/?>)",
+ "beginCaptures": {
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ }
+ },
+ "end": ">",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.inline.$2.start.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "begin": "(?i)()(a|abbr|b|bdi|bdo|cite|code|data|del|dfn|em|i|ins|kbd|mark|q|rp|rt|ruby|s|samp|small|span|strong|sub|sup|time|u|var)(?=\\s|/?>)",
+ "beginCaptures": {
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ }
+ },
+ "end": ">",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.inline.$2.end.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "begin": "(?i)(<)(embed|img|param|source|track)(?=\\s|/?>)",
+ "beginCaptures": {
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ }
+ },
+ "end": "/?>",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.object.$2.void.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "begin": "(?i)(<)(audio|canvas|iframe|object|picture|video)(?=\\s|/?>)",
+ "beginCaptures": {
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ }
+ },
+ "end": ">",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.object.$2.start.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "begin": "(?i)()(audio|canvas|iframe|object|picture|video)(?=\\s|/?>)",
+ "beginCaptures": {
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ }
+ },
+ "end": ">",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.object.$2.end.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "begin": "(?i)(<)((basefont|isindex))(?=\\s|/?>)",
+ "beginCaptures": {
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "name": "invalid.deprecated.html"
+ }
+ },
+ "end": "/?>",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.metadata.$2.void.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "begin": "(?i)(<)((center|frameset|noembed|noframes))(?=\\s|/?>)",
+ "beginCaptures": {
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "name": "invalid.deprecated.html"
+ }
+ },
+ "end": ">",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.structure.$2.start.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "begin": "(?i)()((center|frameset|noembed|noframes))(?=\\s|/?>)",
+ "beginCaptures": {
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "name": "invalid.deprecated.html"
+ }
+ },
+ "end": ">",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.structure.$2.end.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "begin": "(?i)(<)((acronym|big|blink|font|strike|tt|xmp))(?=\\s|/?>)",
+ "beginCaptures": {
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "name": "invalid.deprecated.html"
+ }
+ },
+ "end": ">",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.inline.$2.start.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "begin": "(?i)()((acronym|big|blink|font|strike|tt|xmp))(?=\\s|/?>)",
+ "beginCaptures": {
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "name": "invalid.deprecated.html"
+ }
+ },
+ "end": ">",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.inline.$2.end.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "begin": "(?i)(<)((frame))(?=\\s|/?>)",
+ "beginCaptures": {
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "name": "invalid.deprecated.html"
+ }
+ },
+ "end": "/?>",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.object.$2.void.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "begin": "(?i)(<)((applet))(?=\\s|/?>)",
+ "beginCaptures": {
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "name": "invalid.deprecated.html"
+ }
+ },
+ "end": ">",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.object.$2.start.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "begin": "(?i)()((applet))(?=\\s|/?>)",
+ "beginCaptures": {
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "name": "invalid.deprecated.html"
+ }
+ },
+ "end": ">",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.object.$2.end.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "begin": "(?i)(<)((dir|keygen|listing|menuitem|plaintext|spacer))(?=\\s|/?>)",
+ "beginCaptures": {
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "name": "invalid.illegal.no-longer-supported.html"
+ }
+ },
+ "end": ">",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.other.$2.start.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "begin": "(?i)()((dir|keygen|listing|menuitem|plaintext|spacer))(?=\\s|/?>)",
+ "beginCaptures": {
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ },
+ "3": {
+ "name": "invalid.illegal.no-longer-supported.html"
+ }
+ },
+ "end": ">",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.other.$2.end.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "include": "#math"
+ },
+ {
+ "include": "#svg"
+ },
+ {
+ "begin": "(<)([a-zA-Z][.0-9_a-zA-Z\\x{00B7}\\x{00C0}-\\x{00D6}\\x{00D8}-\\x{00F6}\\x{00F8}-\\x{037D}\\x{037F}-\\x{1FFF}\\x{200C}-\\x{200D}\\x{203F}-\\x{2040}\\x{2070}-\\x{218F}\\x{2C00}-\\x{2FEF}\\x{3001}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFFD}\\x{10000}-\\x{EFFFF}]*-[\\-.0-9_a-zA-Z\\x{00B7}\\x{00C0}-\\x{00D6}\\x{00D8}-\\x{00F6}\\x{00F8}-\\x{037D}\\x{037F}-\\x{1FFF}\\x{200C}-\\x{200D}\\x{203F}-\\x{2040}\\x{2070}-\\x{218F}\\x{2C00}-\\x{2FEF}\\x{3001}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFFD}\\x{10000}-\\x{EFFFF}]*)(?=\\s|/?>)",
+ "beginCaptures": {
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ }
+ },
+ "end": "/?>",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.custom.start.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ },
+ {
+ "begin": "()([a-zA-Z][.0-9_a-zA-Z\\x{00B7}\\x{00C0}-\\x{00D6}\\x{00D8}-\\x{00F6}\\x{00F8}-\\x{037D}\\x{037F}-\\x{1FFF}\\x{200C}-\\x{200D}\\x{203F}-\\x{2040}\\x{2070}-\\x{218F}\\x{2C00}-\\x{2FEF}\\x{3001}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFFD}\\x{10000}-\\x{EFFFF}]*-[\\-.0-9_a-zA-Z\\x{00B7}\\x{00C0}-\\x{00D6}\\x{00D8}-\\x{00F6}\\x{00F8}-\\x{037D}\\x{037F}-\\x{1FFF}\\x{200C}-\\x{200D}\\x{203F}-\\x{2040}\\x{2070}-\\x{218F}\\x{2C00}-\\x{2FEF}\\x{3001}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFFD}\\x{10000}-\\x{EFFFF}]*)(?=\\s|/?>)",
+ "beginCaptures": {
+ "1": {
+ "name": "punctuation.definition.tag.begin.html"
+ },
+ "2": {
+ "name": "entity.name.tag.html"
+ }
+ },
+ "end": ">",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.tag.end.html"
+ }
+ },
+ "name": "meta.tag.custom.end.html",
+ "patterns": [
+ {
+ "include": "#attribute"
+ }
+ ]
+ }
+ ]
}
}
}
\ No newline at end of file
diff --git a/extensions/html/test/colorize-results/12750_html.json b/extensions/html/test/colorize-results/12750_html.json
index a89b03aa84f..389ca104ac5 100644
--- a/extensions/html/test/colorize-results/12750_html.json
+++ b/extensions/html/test/colorize-results/12750_html.json
@@ -1,7 +1,7 @@
[
{
"c": "<",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -12,7 +12,7 @@
},
{
"c": "script",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html entity.name.tag.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -23,7 +23,7 @@
},
{
"c": " ",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html",
"r": {
"dark_plus": "meta.embedded: #D4D4D4",
"light_plus": "meta.embedded: #000000",
@@ -34,7 +34,7 @@
},
{
"c": "type",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html entity.other.attribute-name.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.type.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -45,7 +45,7 @@
},
{
"c": "=",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.type.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "meta.embedded: #D4D4D4",
"light_plus": "meta.embedded: #000000",
@@ -56,7 +56,7 @@
},
{
"c": "\"",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html string.quoted.double.html punctuation.definition.string.begin.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.type.html string.quoted.double.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -67,7 +67,7 @@
},
{
"c": "text/javascript",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html string.quoted.double.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.type.html string.quoted.double.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -78,7 +78,7 @@
},
{
"c": "\"",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html string.quoted.double.html punctuation.definition.string.end.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.type.html string.quoted.double.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -89,7 +89,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -210,7 +210,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.begin.html source.js",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.begin.html source.js",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -221,7 +221,7 @@
},
{
"c": "/",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -232,7 +232,7 @@
},
{
"c": "script",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html entity.name.tag.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -243,7 +243,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -254,7 +254,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -265,7 +265,7 @@
},
{
"c": "script",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html entity.name.tag.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -276,7 +276,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -397,7 +397,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.begin.html source.js",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.begin.html source.js",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -408,7 +408,7 @@
},
{
"c": "/",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -419,7 +419,7 @@
},
{
"c": "script",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html entity.name.tag.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -430,7 +430,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
diff --git a/extensions/html/test/colorize-results/13448_html.json b/extensions/html/test/colorize-results/13448_html.json
index 1a442d66c0b..2be7fc0e698 100644
--- a/extensions/html/test/colorize-results/13448_html.json
+++ b/extensions/html/test/colorize-results/13448_html.json
@@ -1,7 +1,7 @@
[
{
"c": "<",
- "t": "text.html.basic meta.tag.other.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.tag.custom.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -12,7 +12,7 @@
},
{
"c": "ion-view",
- "t": "text.html.basic meta.tag.other.html entity.name.tag.other.html",
+ "t": "text.html.basic meta.tag.custom.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -23,7 +23,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.tag.other.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.tag.custom.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -34,7 +34,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.tag.other.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.tag.custom.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -45,7 +45,7 @@
},
{
"c": "button-view",
- "t": "text.html.basic meta.tag.other.html entity.name.tag.other.html",
+ "t": "text.html.basic meta.tag.custom.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -56,7 +56,7 @@
},
{
"c": "/>",
- "t": "text.html.basic meta.tag.other.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.tag.custom.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -67,7 +67,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.tag.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.tag.custom.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -78,7 +78,7 @@
},
{
"c": "font-face",
- "t": "text.html.basic meta.tag.any.html entity.name.tag.html",
+ "t": "text.html.basic meta.tag.custom.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -89,51 +89,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.tag.any.html punctuation.definition.tag.html",
- "r": {
- "dark_plus": "punctuation.definition.tag: #808080",
- "light_plus": "punctuation.definition.tag: #800000",
- "dark_vs": "punctuation.definition.tag: #808080",
- "light_vs": "punctuation.definition.tag: #800000",
- "hc_black": "punctuation.definition.tag: #808080"
- }
- },
- {
- "c": "<",
- "t": "text.html.basic meta.tag.any.html punctuation.definition.tag.html meta.scope.between-tag-pair.html",
- "r": {
- "dark_plus": "punctuation.definition.tag: #808080",
- "light_plus": "punctuation.definition.tag: #800000",
- "dark_vs": "punctuation.definition.tag: #808080",
- "light_vs": "punctuation.definition.tag: #800000",
- "hc_black": "punctuation.definition.tag: #808080"
- }
- },
- {
- "c": "/",
- "t": "text.html.basic meta.tag.any.html punctuation.definition.tag.html",
- "r": {
- "dark_plus": "punctuation.definition.tag: #808080",
- "light_plus": "punctuation.definition.tag: #800000",
- "dark_vs": "punctuation.definition.tag: #808080",
- "light_vs": "punctuation.definition.tag: #800000",
- "hc_black": "punctuation.definition.tag: #808080"
- }
- },
- {
- "c": "font-face",
- "t": "text.html.basic meta.tag.any.html entity.name.tag.html",
- "r": {
- "dark_plus": "entity.name.tag: #569CD6",
- "light_plus": "entity.name.tag: #800000",
- "dark_vs": "entity.name.tag: #569CD6",
- "light_vs": "entity.name.tag: #800000",
- "hc_black": "entity.name.tag: #569CD6"
- }
- },
- {
- "c": ">",
- "t": "text.html.basic meta.tag.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.tag.custom.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -144,7 +100,7 @@
},
{
"c": "",
- "t": "text.html.basic meta.tag.other.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.tag.custom.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -154,8 +110,8 @@
}
},
{
- "c": "ion-view",
- "t": "text.html.basic meta.tag.other.html entity.name.tag.other.html",
+ "c": "font-face",
+ "t": "text.html.basic meta.tag.custom.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -166,7 +122,40 @@
},
{
"c": ">",
- "t": "text.html.basic meta.tag.other.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.tag.custom.end.html punctuation.definition.tag.end.html",
+ "r": {
+ "dark_plus": "punctuation.definition.tag: #808080",
+ "light_plus": "punctuation.definition.tag: #800000",
+ "dark_vs": "punctuation.definition.tag: #808080",
+ "light_vs": "punctuation.definition.tag: #800000",
+ "hc_black": "punctuation.definition.tag: #808080"
+ }
+ },
+ {
+ "c": "",
+ "t": "text.html.basic meta.tag.custom.end.html punctuation.definition.tag.begin.html",
+ "r": {
+ "dark_plus": "punctuation.definition.tag: #808080",
+ "light_plus": "punctuation.definition.tag: #800000",
+ "dark_vs": "punctuation.definition.tag: #808080",
+ "light_vs": "punctuation.definition.tag: #800000",
+ "hc_black": "punctuation.definition.tag: #808080"
+ }
+ },
+ {
+ "c": "ion-view",
+ "t": "text.html.basic meta.tag.custom.end.html entity.name.tag.html",
+ "r": {
+ "dark_plus": "entity.name.tag: #569CD6",
+ "light_plus": "entity.name.tag: #800000",
+ "dark_vs": "entity.name.tag: #569CD6",
+ "light_vs": "entity.name.tag: #800000",
+ "hc_black": "entity.name.tag: #569CD6"
+ }
+ },
+ {
+ "c": ">",
+ "t": "text.html.basic meta.tag.custom.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
diff --git a/extensions/html/test/colorize-results/25920_html.json b/extensions/html/test/colorize-results/25920_html.json
index 16b71acbe88..81f4d3c143b 100644
--- a/extensions/html/test/colorize-results/25920_html.json
+++ b/extensions/html/test/colorize-results/25920_html.json
@@ -1,7 +1,7 @@
[
{
"c": "<",
- "t": "text.html.basic meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.tag.structure.html.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -12,7 +12,7 @@
},
{
"c": "html",
- "t": "text.html.basic meta.tag.structure.any.html entity.name.tag.structure.any.html",
+ "t": "text.html.basic meta.tag.structure.html.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -23,7 +23,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.tag.structure.html.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -34,7 +34,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -45,7 +45,7 @@
},
{
"c": "script",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html entity.name.tag.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -56,7 +56,7 @@
},
{
"c": " ",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html",
"r": {
"dark_plus": "meta.embedded: #D4D4D4",
"light_plus": "meta.embedded: #000000",
@@ -67,7 +67,7 @@
},
{
"c": "type",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html entity.other.attribute-name.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.type.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -78,7 +78,7 @@
},
{
"c": "=",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.type.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "meta.embedded: #D4D4D4",
"light_plus": "meta.embedded: #000000",
@@ -89,7 +89,7 @@
},
{
"c": "'",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html string.quoted.single.html punctuation.definition.string.begin.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.type.html string.quoted.single.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.single.html: #0000FF",
@@ -100,7 +100,7 @@
},
{
"c": "text/html",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html string.quoted.single.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.type.html string.quoted.single.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.single.html: #0000FF",
@@ -111,7 +111,7 @@
},
{
"c": "'",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html string.quoted.single.html punctuation.definition.string.end.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.type.html string.quoted.single.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.single.html: #0000FF",
@@ -122,7 +122,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -144,7 +144,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.structure.div.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -155,7 +155,7 @@
},
{
"c": "div",
- "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.any.html entity.name.tag.html",
+ "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.structure.div.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -166,7 +166,7 @@
},
{
"c": " ",
- "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.any.html",
+ "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.structure.div.start.html",
"r": {
"dark_plus": "meta.embedded: #D4D4D4",
"light_plus": "meta.embedded: #000000",
@@ -177,7 +177,7 @@
},
{
"c": "class",
- "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.any.html entity.other.attribute-name.html",
+ "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.structure.div.start.html meta.attribute.class.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -188,7 +188,7 @@
},
{
"c": "=",
- "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.any.html",
+ "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.structure.div.start.html meta.attribute.class.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "meta.embedded: #D4D4D4",
"light_plus": "meta.embedded: #000000",
@@ -199,7 +199,7 @@
},
{
"c": "'",
- "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.any.html string.quoted.single.html punctuation.definition.string.begin.html",
+ "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.structure.div.start.html meta.attribute.class.html string.quoted.single.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.single.html: #0000FF",
@@ -210,7 +210,7 @@
},
{
"c": "foo",
- "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.any.html string.quoted.single.html",
+ "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.structure.div.start.html meta.attribute.class.html string.quoted.single.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.single.html: #0000FF",
@@ -221,7 +221,7 @@
},
{
"c": "'",
- "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.any.html string.quoted.single.html punctuation.definition.string.end.html",
+ "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.structure.div.start.html meta.attribute.class.html string.quoted.single.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.single.html: #0000FF",
@@ -232,7 +232,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.structure.div.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -242,19 +242,8 @@
}
},
{
- "c": "<",
- "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.any.html punctuation.definition.tag.html meta.scope.between-tag-pair.html",
- "r": {
- "dark_plus": "punctuation.definition.tag: #808080",
- "light_plus": "punctuation.definition.tag: #800000",
- "dark_vs": "punctuation.definition.tag: #808080",
- "light_vs": "punctuation.definition.tag: #800000",
- "hc_black": "punctuation.definition.tag: #808080"
- }
- },
- {
- "c": "/",
- "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.any.html punctuation.definition.tag.html",
+ "c": "",
+ "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.structure.div.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -265,7 +254,7 @@
},
{
"c": "div",
- "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.any.html entity.name.tag.html",
+ "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.structure.div.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -276,7 +265,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.structure.div.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -287,7 +276,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.begin.html text.html.basic",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.begin.html text.html.basic",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -298,7 +287,7 @@
},
{
"c": "/",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -309,7 +298,7 @@
},
{
"c": "script",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html entity.name.tag.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -320,7 +309,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -331,7 +320,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -342,7 +331,7 @@
},
{
"c": "script",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html entity.name.tag.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -353,7 +342,7 @@
},
{
"c": " ",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html",
"r": {
"dark_plus": "meta.embedded: #D4D4D4",
"light_plus": "meta.embedded: #000000",
@@ -364,7 +353,7 @@
},
{
"c": "type",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html entity.other.attribute-name.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.type.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -375,7 +364,7 @@
},
{
"c": "=",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.type.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "meta.embedded: #D4D4D4",
"light_plus": "meta.embedded: #000000",
@@ -386,7 +375,7 @@
},
{
"c": "'",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html string.quoted.single.html punctuation.definition.string.begin.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.type.html string.quoted.single.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.single.html: #0000FF",
@@ -397,7 +386,7 @@
},
{
"c": "module",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html string.quoted.single.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.type.html string.quoted.single.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.single.html: #0000FF",
@@ -408,7 +397,7 @@
},
{
"c": "'",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html string.quoted.single.html punctuation.definition.string.end.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.type.html string.quoted.single.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.single.html: #0000FF",
@@ -419,7 +408,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -529,7 +518,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.begin.html source.js",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.begin.html source.js",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -540,7 +529,7 @@
},
{
"c": "/",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -551,7 +540,7 @@
},
{
"c": "script",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html entity.name.tag.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -562,7 +551,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -573,7 +562,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -584,7 +573,7 @@
},
{
"c": "script",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html entity.name.tag.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -595,7 +584,7 @@
},
{
"c": " ",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html",
"r": {
"dark_plus": "meta.embedded: #D4D4D4",
"light_plus": "meta.embedded: #000000",
@@ -606,7 +595,7 @@
},
{
"c": "type",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html entity.other.attribute-name.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.type.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -617,7 +606,7 @@
},
{
"c": "=",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.type.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "meta.embedded: #D4D4D4",
"light_plus": "meta.embedded: #000000",
@@ -628,7 +617,7 @@
},
{
"c": "'",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html string.quoted.single.html punctuation.definition.string.begin.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.type.html string.quoted.single.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.single.html: #0000FF",
@@ -639,7 +628,7 @@
},
{
"c": "text/ng-template",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html string.quoted.single.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.type.html string.quoted.single.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.single.html: #0000FF",
@@ -650,7 +639,7 @@
},
{
"c": "'",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html string.quoted.single.html punctuation.definition.string.end.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.type.html string.quoted.single.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.single.html: #0000FF",
@@ -661,7 +650,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -683,7 +672,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.structure.div.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -694,7 +683,7 @@
},
{
"c": "div",
- "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.any.html entity.name.tag.html",
+ "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.structure.div.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -705,7 +694,7 @@
},
{
"c": " ",
- "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.any.html",
+ "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.structure.div.start.html",
"r": {
"dark_plus": "meta.embedded: #D4D4D4",
"light_plus": "meta.embedded: #000000",
@@ -716,7 +705,7 @@
},
{
"c": "class",
- "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.any.html entity.other.attribute-name.html",
+ "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.structure.div.start.html meta.attribute.class.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -727,7 +716,7 @@
},
{
"c": "=",
- "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.any.html",
+ "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.structure.div.start.html meta.attribute.class.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "meta.embedded: #D4D4D4",
"light_plus": "meta.embedded: #000000",
@@ -738,7 +727,7 @@
},
{
"c": "'",
- "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.any.html string.quoted.single.html punctuation.definition.string.begin.html",
+ "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.structure.div.start.html meta.attribute.class.html string.quoted.single.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.single.html: #0000FF",
@@ -749,7 +738,7 @@
},
{
"c": "foo",
- "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.any.html string.quoted.single.html",
+ "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.structure.div.start.html meta.attribute.class.html string.quoted.single.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.single.html: #0000FF",
@@ -760,7 +749,7 @@
},
{
"c": "'",
- "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.any.html string.quoted.single.html punctuation.definition.string.end.html",
+ "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.structure.div.start.html meta.attribute.class.html string.quoted.single.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.single.html: #0000FF",
@@ -771,7 +760,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.structure.div.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -781,19 +770,8 @@
}
},
{
- "c": "<",
- "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.any.html punctuation.definition.tag.html meta.scope.between-tag-pair.html",
- "r": {
- "dark_plus": "punctuation.definition.tag: #808080",
- "light_plus": "punctuation.definition.tag: #800000",
- "dark_vs": "punctuation.definition.tag: #808080",
- "light_vs": "punctuation.definition.tag: #800000",
- "hc_black": "punctuation.definition.tag: #808080"
- }
- },
- {
- "c": "/",
- "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.any.html punctuation.definition.tag.html",
+ "c": "",
+ "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.structure.div.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -804,7 +782,7 @@
},
{
"c": "div",
- "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.any.html entity.name.tag.html",
+ "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.structure.div.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -815,7 +793,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.embedded.block.html text.html.basic meta.tag.structure.div.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -826,7 +804,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.begin.html text.html.basic",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.begin.html text.html.basic",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -837,7 +815,7 @@
},
{
"c": "/",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -848,7 +826,7 @@
},
{
"c": "script",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html entity.name.tag.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -859,7 +837,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -870,7 +848,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.tag.structure.body.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -881,7 +859,7 @@
},
{
"c": "body",
- "t": "text.html.basic meta.tag.structure.any.html entity.name.tag.structure.any.html",
+ "t": "text.html.basic meta.tag.structure.body.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -892,7 +870,7 @@
},
{
"c": " ",
- "t": "text.html.basic meta.tag.structure.any.html",
+ "t": "text.html.basic meta.tag.structure.body.start.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -903,7 +881,7 @@
},
{
"c": "class",
- "t": "text.html.basic meta.tag.structure.any.html entity.other.attribute-name.html",
+ "t": "text.html.basic meta.tag.structure.body.start.html meta.attribute.class.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -914,7 +892,7 @@
},
{
"c": "=",
- "t": "text.html.basic meta.tag.structure.any.html",
+ "t": "text.html.basic meta.tag.structure.body.start.html meta.attribute.class.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -925,7 +903,7 @@
},
{
"c": "'",
- "t": "text.html.basic meta.tag.structure.any.html string.quoted.single.html punctuation.definition.string.begin.html",
+ "t": "text.html.basic meta.tag.structure.body.start.html meta.attribute.class.html string.quoted.single.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.single.html: #0000FF",
@@ -936,7 +914,7 @@
},
{
"c": "bar",
- "t": "text.html.basic meta.tag.structure.any.html string.quoted.single.html",
+ "t": "text.html.basic meta.tag.structure.body.start.html meta.attribute.class.html string.quoted.single.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.single.html: #0000FF",
@@ -947,7 +925,7 @@
},
{
"c": "'",
- "t": "text.html.basic meta.tag.structure.any.html string.quoted.single.html punctuation.definition.string.end.html",
+ "t": "text.html.basic meta.tag.structure.body.start.html meta.attribute.class.html string.quoted.single.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.single.html: #0000FF",
@@ -958,7 +936,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.tag.structure.body.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -969,7 +947,7 @@
},
{
"c": "",
- "t": "text.html.basic meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.tag.structure.body.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -980,7 +958,7 @@
},
{
"c": "body",
- "t": "text.html.basic meta.tag.structure.any.html entity.name.tag.structure.any.html",
+ "t": "text.html.basic meta.tag.structure.body.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -991,7 +969,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.tag.structure.body.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1002,7 +980,7 @@
},
{
"c": "",
- "t": "text.html.basic meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.tag.structure.html.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1013,7 +991,7 @@
},
{
"c": "html",
- "t": "text.html.basic meta.tag.structure.any.html entity.name.tag.structure.any.html",
+ "t": "text.html.basic meta.tag.structure.html.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -1024,7 +1002,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.tag.structure.html.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
diff --git a/extensions/html/test/colorize-results/test_html.json b/extensions/html/test/colorize-results/test_html.json
index a1da5d2c393..20ca7fac857 100644
--- a/extensions/html/test/colorize-results/test_html.json
+++ b/extensions/html/test/colorize-results/test_html.json
@@ -1,7 +1,7 @@
[
{
"c": "<",
- "t": "text.html.basic meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.tag.structure.html.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -12,7 +12,7 @@
},
{
"c": "html",
- "t": "text.html.basic meta.tag.structure.any.html entity.name.tag.structure.any.html",
+ "t": "text.html.basic meta.tag.structure.html.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -23,7 +23,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.tag.structure.html.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -34,7 +34,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.tag.structure.head.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -45,7 +45,7 @@
},
{
"c": "head",
- "t": "text.html.basic meta.tag.structure.any.html entity.name.tag.structure.any.html",
+ "t": "text.html.basic meta.tag.structure.head.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -56,7 +56,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.tag.structure.head.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -78,7 +78,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.tag.inline.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.tag.metadata.meta.void.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -89,7 +89,7 @@
},
{
"c": "meta",
- "t": "text.html.basic meta.tag.inline.any.html entity.name.tag.inline.any.html",
+ "t": "text.html.basic meta.tag.metadata.meta.void.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -100,7 +100,7 @@
},
{
"c": " ",
- "t": "text.html.basic meta.tag.inline.any.html",
+ "t": "text.html.basic meta.tag.metadata.meta.void.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -111,7 +111,7 @@
},
{
"c": "charset",
- "t": "text.html.basic meta.tag.inline.any.html entity.other.attribute-name.html",
+ "t": "text.html.basic meta.tag.metadata.meta.void.html meta.attribute.charset.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -122,7 +122,7 @@
},
{
"c": "=",
- "t": "text.html.basic meta.tag.inline.any.html",
+ "t": "text.html.basic meta.tag.metadata.meta.void.html meta.attribute.charset.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -133,7 +133,7 @@
},
{
"c": "\"",
- "t": "text.html.basic meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.begin.html",
+ "t": "text.html.basic meta.tag.metadata.meta.void.html meta.attribute.charset.html string.quoted.double.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -144,7 +144,7 @@
},
{
"c": "utf-8",
- "t": "text.html.basic meta.tag.inline.any.html string.quoted.double.html",
+ "t": "text.html.basic meta.tag.metadata.meta.void.html meta.attribute.charset.html string.quoted.double.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -155,7 +155,7 @@
},
{
"c": "\"",
- "t": "text.html.basic meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.end.html",
+ "t": "text.html.basic meta.tag.metadata.meta.void.html meta.attribute.charset.html string.quoted.double.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -166,7 +166,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.tag.inline.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.tag.metadata.meta.void.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -188,7 +188,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.tag.inline.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.tag.metadata.title.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -199,7 +199,7 @@
},
{
"c": "title",
- "t": "text.html.basic meta.tag.inline.any.html entity.name.tag.inline.any.html",
+ "t": "text.html.basic meta.tag.metadata.title.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -210,7 +210,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.tag.inline.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.tag.metadata.title.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -232,7 +232,7 @@
},
{
"c": "",
- "t": "text.html.basic meta.tag.inline.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.tag.metadata.title.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -243,7 +243,7 @@
},
{
"c": "title",
- "t": "text.html.basic meta.tag.inline.any.html entity.name.tag.inline.any.html",
+ "t": "text.html.basic meta.tag.metadata.title.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -254,7 +254,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.tag.inline.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.tag.metadata.title.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -276,7 +276,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.tag.inline.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.tag.metadata.link.void.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -287,7 +287,7 @@
},
{
"c": "link",
- "t": "text.html.basic meta.tag.inline.any.html entity.name.tag.inline.any.html",
+ "t": "text.html.basic meta.tag.metadata.link.void.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -298,7 +298,7 @@
},
{
"c": " ",
- "t": "text.html.basic meta.tag.inline.any.html",
+ "t": "text.html.basic meta.tag.metadata.link.void.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -309,7 +309,7 @@
},
{
"c": "href",
- "t": "text.html.basic meta.tag.inline.any.html entity.other.attribute-name.html",
+ "t": "text.html.basic meta.tag.metadata.link.void.html meta.attribute.href.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -320,7 +320,7 @@
},
{
"c": "=",
- "t": "text.html.basic meta.tag.inline.any.html",
+ "t": "text.html.basic meta.tag.metadata.link.void.html meta.attribute.href.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -331,7 +331,7 @@
},
{
"c": "\"",
- "t": "text.html.basic meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.begin.html",
+ "t": "text.html.basic meta.tag.metadata.link.void.html meta.attribute.href.html string.quoted.double.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -342,7 +342,7 @@
},
{
"c": "https://cdn.rawgit.com/mochajs/mocha/2.2.5/mocha.css",
- "t": "text.html.basic meta.tag.inline.any.html string.quoted.double.html",
+ "t": "text.html.basic meta.tag.metadata.link.void.html meta.attribute.href.html string.quoted.double.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -353,7 +353,7 @@
},
{
"c": "\"",
- "t": "text.html.basic meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.end.html",
+ "t": "text.html.basic meta.tag.metadata.link.void.html meta.attribute.href.html string.quoted.double.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -364,7 +364,7 @@
},
{
"c": " ",
- "t": "text.html.basic meta.tag.inline.any.html",
+ "t": "text.html.basic meta.tag.metadata.link.void.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -375,7 +375,7 @@
},
{
"c": "rel",
- "t": "text.html.basic meta.tag.inline.any.html entity.other.attribute-name.html",
+ "t": "text.html.basic meta.tag.metadata.link.void.html meta.attribute.rel.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -386,7 +386,7 @@
},
{
"c": "=",
- "t": "text.html.basic meta.tag.inline.any.html",
+ "t": "text.html.basic meta.tag.metadata.link.void.html meta.attribute.rel.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -397,7 +397,7 @@
},
{
"c": "\"",
- "t": "text.html.basic meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.begin.html",
+ "t": "text.html.basic meta.tag.metadata.link.void.html meta.attribute.rel.html string.quoted.double.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -408,7 +408,7 @@
},
{
"c": "stylesheet",
- "t": "text.html.basic meta.tag.inline.any.html string.quoted.double.html",
+ "t": "text.html.basic meta.tag.metadata.link.void.html meta.attribute.rel.html string.quoted.double.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -419,7 +419,7 @@
},
{
"c": "\"",
- "t": "text.html.basic meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.end.html",
+ "t": "text.html.basic meta.tag.metadata.link.void.html meta.attribute.rel.html string.quoted.double.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -429,8 +429,19 @@
}
},
{
- "c": " />",
- "t": "text.html.basic meta.tag.inline.any.html punctuation.definition.tag.end.html",
+ "c": " ",
+ "t": "text.html.basic meta.tag.metadata.link.void.html",
+ "r": {
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
+ }
+ },
+ {
+ "c": "/>",
+ "t": "text.html.basic meta.tag.metadata.link.void.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -452,7 +463,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.style.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.style.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -463,7 +474,7 @@
},
{
"c": "style",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.style.html entity.name.tag.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.style.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -474,7 +485,7 @@
},
{
"c": " ",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.style.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.style.start.html",
"r": {
"dark_plus": "meta.embedded: #D4D4D4",
"light_plus": "meta.embedded: #000000",
@@ -485,7 +496,7 @@
},
{
"c": "type",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.style.html entity.other.attribute-name.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.style.start.html meta.attribute.type.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -496,7 +507,7 @@
},
{
"c": "=",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.style.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.style.start.html meta.attribute.type.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "meta.embedded: #D4D4D4",
"light_plus": "meta.embedded: #000000",
@@ -507,7 +518,7 @@
},
{
"c": "\"",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.style.html string.quoted.double.html punctuation.definition.string.begin.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.style.start.html meta.attribute.type.html string.quoted.double.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -518,7 +529,7 @@
},
{
"c": "text/css",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.style.html string.quoted.double.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.style.start.html meta.attribute.type.html string.quoted.double.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -529,7 +540,7 @@
},
{
"c": "\"",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.style.html string.quoted.double.html punctuation.definition.string.end.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.style.start.html meta.attribute.type.html string.quoted.double.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -540,7 +551,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.style.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.style.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -771,7 +782,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.style.html punctuation.definition.tag.begin.html source.css",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.style.end.html punctuation.definition.tag.begin.html source.css",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -782,7 +793,7 @@
},
{
"c": "/",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.style.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.style.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -793,7 +804,7 @@
},
{
"c": "style",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.style.html entity.name.tag.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.style.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -804,7 +815,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.style.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.style.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -815,7 +826,7 @@
},
{
"c": "",
- "t": "text.html.basic meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.tag.structure.head.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -826,7 +837,7 @@
},
{
"c": "head",
- "t": "text.html.basic meta.tag.structure.any.html entity.name.tag.structure.any.html",
+ "t": "text.html.basic meta.tag.structure.head.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -837,7 +848,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.tag.structure.head.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -848,7 +859,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.tag.structure.body.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -859,7 +870,7 @@
},
{
"c": "body",
- "t": "text.html.basic meta.tag.structure.any.html entity.name.tag.structure.any.html",
+ "t": "text.html.basic meta.tag.structure.body.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -870,7 +881,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.tag.structure.body.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -892,7 +903,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.tag.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.tag.structure.div.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -903,7 +914,7 @@
},
{
"c": "div",
- "t": "text.html.basic meta.tag.any.html entity.name.tag.html",
+ "t": "text.html.basic meta.tag.structure.div.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -914,7 +925,7 @@
},
{
"c": " ",
- "t": "text.html.basic meta.tag.any.html",
+ "t": "text.html.basic meta.tag.structure.div.start.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -925,7 +936,7 @@
},
{
"c": "id",
- "t": "text.html.basic meta.tag.any.html meta.attribute-with-value.id.html entity.other.attribute-name.id.html",
+ "t": "text.html.basic meta.tag.structure.div.start.html meta.attribute.id.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -936,7 +947,7 @@
},
{
"c": "=",
- "t": "text.html.basic meta.tag.any.html meta.attribute-with-value.id.html punctuation.separator.key-value.html",
+ "t": "text.html.basic meta.tag.structure.div.start.html meta.attribute.id.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -947,7 +958,7 @@
},
{
"c": "\"",
- "t": "text.html.basic meta.tag.any.html meta.attribute-with-value.id.html string.quoted.double.html punctuation.definition.string.begin.html",
+ "t": "text.html.basic meta.tag.structure.div.start.html meta.attribute.id.html string.quoted.double.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -958,7 +969,7 @@
},
{
"c": "mocha",
- "t": "text.html.basic meta.tag.any.html meta.attribute-with-value.id.html string.quoted.double.html meta.toc-list.id.html",
+ "t": "text.html.basic meta.tag.structure.div.start.html meta.attribute.id.html string.quoted.double.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -969,7 +980,7 @@
},
{
"c": "\"",
- "t": "text.html.basic meta.tag.any.html meta.attribute-with-value.id.html string.quoted.double.html punctuation.definition.string.end.html",
+ "t": "text.html.basic meta.tag.structure.div.start.html meta.attribute.id.html string.quoted.double.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -980,7 +991,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.tag.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.tag.structure.div.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -990,19 +1001,8 @@
}
},
{
- "c": "<",
- "t": "text.html.basic meta.tag.any.html punctuation.definition.tag.html meta.scope.between-tag-pair.html",
- "r": {
- "dark_plus": "punctuation.definition.tag: #808080",
- "light_plus": "punctuation.definition.tag: #800000",
- "dark_vs": "punctuation.definition.tag: #808080",
- "light_vs": "punctuation.definition.tag: #800000",
- "hc_black": "punctuation.definition.tag: #808080"
- }
- },
- {
- "c": "/",
- "t": "text.html.basic meta.tag.any.html punctuation.definition.tag.html",
+ "c": "",
+ "t": "text.html.basic meta.tag.structure.div.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1013,7 +1013,7 @@
},
{
"c": "div",
- "t": "text.html.basic meta.tag.any.html entity.name.tag.html",
+ "t": "text.html.basic meta.tag.structure.div.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -1024,7 +1024,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.tag.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.tag.structure.div.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1048,9 +1048,9 @@
"c": "",
"t": "text.html.basic comment.block.html punctuation.definition.comment.html",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1101,7 +1101,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1112,7 +1112,7 @@
},
{
"c": "script",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html entity.name.tag.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -1123,7 +1123,7 @@
},
{
"c": " ",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html",
"r": {
"dark_plus": "meta.embedded: #D4D4D4",
"light_plus": "meta.embedded: #000000",
@@ -1134,7 +1134,7 @@
},
{
"c": "src",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html entity.other.attribute-name.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.src.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -1145,7 +1145,7 @@
},
{
"c": "=",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.src.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "meta.embedded: #D4D4D4",
"light_plus": "meta.embedded: #000000",
@@ -1156,7 +1156,7 @@
},
{
"c": "\"",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html string.quoted.double.html punctuation.definition.string.begin.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.src.html string.quoted.double.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -1167,7 +1167,7 @@
},
{
"c": "/out/vs/loader.js",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html string.quoted.double.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.src.html string.quoted.double.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -1178,7 +1178,7 @@
},
{
"c": "\"",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html string.quoted.double.html punctuation.definition.string.end.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.src.html string.quoted.double.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -1189,7 +1189,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1200,7 +1200,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.begin.html source.js",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.begin.html source.js",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1211,7 +1211,7 @@
},
{
"c": "/",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1222,7 +1222,7 @@
},
{
"c": "script",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html entity.name.tag.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -1233,7 +1233,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1255,7 +1255,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1266,7 +1266,7 @@
},
{
"c": "script",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html entity.name.tag.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -1277,7 +1277,7 @@
},
{
"c": " ",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html",
"r": {
"dark_plus": "meta.embedded: #D4D4D4",
"light_plus": "meta.embedded: #000000",
@@ -1288,7 +1288,7 @@
},
{
"c": "src",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html entity.other.attribute-name.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.src.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -1299,7 +1299,7 @@
},
{
"c": "=",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.src.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "meta.embedded: #D4D4D4",
"light_plus": "meta.embedded: #000000",
@@ -1310,7 +1310,7 @@
},
{
"c": "\"",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html string.quoted.double.html punctuation.definition.string.begin.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.src.html string.quoted.double.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -1321,7 +1321,7 @@
},
{
"c": "https://cdn.rawgit.com/mochajs/mocha/2.2.5/mocha.js",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html string.quoted.double.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.src.html string.quoted.double.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -1332,7 +1332,7 @@
},
{
"c": "\"",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html string.quoted.double.html punctuation.definition.string.end.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.src.html string.quoted.double.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -1343,7 +1343,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1354,7 +1354,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.begin.html source.js",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.begin.html source.js",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1365,7 +1365,7 @@
},
{
"c": "/",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1376,7 +1376,7 @@
},
{
"c": "script",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html entity.name.tag.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -1387,7 +1387,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1409,7 +1409,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1420,7 +1420,7 @@
},
{
"c": "script",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html entity.name.tag.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -1431,7 +1431,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2212,7 +2212,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.begin.html source.js",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.begin.html source.js",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2223,7 +2223,7 @@
},
{
"c": "/",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2234,7 +2234,7 @@
},
{
"c": "script",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html entity.name.tag.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -2245,7 +2245,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2267,7 +2267,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.tag.block.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.tag.structure.div.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2278,7 +2278,7 @@
},
{
"c": "div",
- "t": "text.html.basic meta.tag.block.any.html entity.name.tag.block.any.html",
+ "t": "text.html.basic meta.tag.structure.div.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -2289,7 +2289,7 @@
},
{
"c": " ",
- "t": "text.html.basic meta.tag.block.any.html",
+ "t": "text.html.basic meta.tag.structure.div.start.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2300,7 +2300,7 @@
},
{
"c": "class",
- "t": "text.html.basic meta.tag.block.any.html entity.other.attribute-name.html",
+ "t": "text.html.basic meta.tag.structure.div.start.html meta.attribute.class.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -2311,7 +2311,7 @@
},
{
"c": "=",
- "t": "text.html.basic meta.tag.block.any.html",
+ "t": "text.html.basic meta.tag.structure.div.start.html meta.attribute.class.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2322,7 +2322,7 @@
},
{
"c": "\"",
- "t": "text.html.basic meta.tag.block.any.html string.quoted.double.html punctuation.definition.string.begin.html",
+ "t": "text.html.basic meta.tag.structure.div.start.html meta.attribute.class.html string.quoted.double.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2333,7 +2333,7 @@
},
{
"c": "js-stale-session-flash stale-session-flash flash flash-warn flash-banner hidden",
- "t": "text.html.basic meta.tag.block.any.html string.quoted.double.html",
+ "t": "text.html.basic meta.tag.structure.div.start.html meta.attribute.class.html string.quoted.double.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2344,7 +2344,7 @@
},
{
"c": "\"",
- "t": "text.html.basic meta.tag.block.any.html string.quoted.double.html punctuation.definition.string.end.html",
+ "t": "text.html.basic meta.tag.structure.div.start.html meta.attribute.class.html string.quoted.double.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2355,7 +2355,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.tag.block.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.tag.structure.div.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2377,7 +2377,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.tag.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.tag.inline.span.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2388,7 +2388,7 @@
},
{
"c": "span",
- "t": "text.html.basic meta.tag.any.html entity.name.tag.html",
+ "t": "text.html.basic meta.tag.inline.span.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -2399,7 +2399,7 @@
},
{
"c": " ",
- "t": "text.html.basic meta.tag.any.html",
+ "t": "text.html.basic meta.tag.inline.span.start.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2410,7 +2410,7 @@
},
{
"c": "class",
- "t": "text.html.basic meta.tag.any.html entity.other.attribute-name.html",
+ "t": "text.html.basic meta.tag.inline.span.start.html meta.attribute.class.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -2421,7 +2421,7 @@
},
{
"c": "=",
- "t": "text.html.basic meta.tag.any.html",
+ "t": "text.html.basic meta.tag.inline.span.start.html meta.attribute.class.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2432,7 +2432,7 @@
},
{
"c": "octicon",
- "t": "text.html.basic meta.tag.any.html string.unquoted.html",
+ "t": "text.html.basic meta.tag.inline.span.start.html meta.attribute.class.html string.unquoted.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.unquoted.html: #0000FF",
@@ -2443,7 +2443,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.tag.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.tag.inline.span.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2453,19 +2453,8 @@
}
},
{
- "c": "<",
- "t": "text.html.basic meta.tag.any.html punctuation.definition.tag.html meta.scope.between-tag-pair.html",
- "r": {
- "dark_plus": "punctuation.definition.tag: #808080",
- "light_plus": "punctuation.definition.tag: #800000",
- "dark_vs": "punctuation.definition.tag: #808080",
- "light_vs": "punctuation.definition.tag: #800000",
- "hc_black": "punctuation.definition.tag: #808080"
- }
- },
- {
- "c": "/",
- "t": "text.html.basic meta.tag.any.html punctuation.definition.tag.html",
+ "c": "",
+ "t": "text.html.basic meta.tag.inline.span.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2476,7 +2465,7 @@
},
{
"c": "span",
- "t": "text.html.basic meta.tag.any.html entity.name.tag.html",
+ "t": "text.html.basic meta.tag.inline.span.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -2487,7 +2476,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.tag.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.tag.inline.span.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2509,7 +2498,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.tag.inline.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.tag.inline.span.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2520,7 +2509,7 @@
},
{
"c": "span",
- "t": "text.html.basic meta.tag.inline.any.html entity.name.tag.inline.any.html",
+ "t": "text.html.basic meta.tag.inline.span.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -2531,7 +2520,7 @@
},
{
"c": " ",
- "t": "text.html.basic meta.tag.inline.any.html",
+ "t": "text.html.basic meta.tag.inline.span.start.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2542,7 +2531,7 @@
},
{
"c": "class",
- "t": "text.html.basic meta.tag.inline.any.html entity.other.attribute-name.html",
+ "t": "text.html.basic meta.tag.inline.span.start.html meta.attribute.class.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -2553,7 +2542,7 @@
},
{
"c": "=",
- "t": "text.html.basic meta.tag.inline.any.html",
+ "t": "text.html.basic meta.tag.inline.span.start.html meta.attribute.class.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2564,7 +2553,7 @@
},
{
"c": "\"",
- "t": "text.html.basic meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.begin.html",
+ "t": "text.html.basic meta.tag.inline.span.start.html meta.attribute.class.html string.quoted.double.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2575,7 +2564,7 @@
},
{
"c": "signed-in-tab-flash",
- "t": "text.html.basic meta.tag.inline.any.html string.quoted.double.html",
+ "t": "text.html.basic meta.tag.inline.span.start.html meta.attribute.class.html string.quoted.double.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2586,7 +2575,7 @@
},
{
"c": "\"",
- "t": "text.html.basic meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.end.html",
+ "t": "text.html.basic meta.tag.inline.span.start.html meta.attribute.class.html string.quoted.double.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2597,7 +2586,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.tag.inline.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.tag.inline.span.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2619,7 +2608,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.tag.inline.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.tag.inline.a.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2630,7 +2619,7 @@
},
{
"c": "a",
- "t": "text.html.basic meta.tag.inline.any.html entity.name.tag.inline.any.html",
+ "t": "text.html.basic meta.tag.inline.a.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -2641,7 +2630,7 @@
},
{
"c": " ",
- "t": "text.html.basic meta.tag.inline.any.html",
+ "t": "text.html.basic meta.tag.inline.a.start.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2652,7 +2641,7 @@
},
{
"c": "href",
- "t": "text.html.basic meta.tag.inline.any.html entity.other.attribute-name.html",
+ "t": "text.html.basic meta.tag.inline.a.start.html meta.attribute.href.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -2663,7 +2652,7 @@
},
{
"c": "=",
- "t": "text.html.basic meta.tag.inline.any.html",
+ "t": "text.html.basic meta.tag.inline.a.start.html meta.attribute.href.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2674,7 +2663,7 @@
},
{
"c": "\"",
- "t": "text.html.basic meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.begin.html",
+ "t": "text.html.basic meta.tag.inline.a.start.html meta.attribute.href.html string.quoted.double.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2685,7 +2674,7 @@
},
{
"c": "\"",
- "t": "text.html.basic meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.end.html",
+ "t": "text.html.basic meta.tag.inline.a.start.html meta.attribute.href.html string.quoted.double.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2696,7 +2685,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.tag.inline.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.tag.inline.a.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2718,7 +2707,7 @@
},
{
"c": "",
- "t": "text.html.basic meta.tag.inline.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.tag.inline.a.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2729,7 +2718,7 @@
},
{
"c": "a",
- "t": "text.html.basic meta.tag.inline.any.html entity.name.tag.inline.any.html",
+ "t": "text.html.basic meta.tag.inline.a.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -2740,7 +2729,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.tag.inline.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.tag.inline.a.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2762,7 +2751,7 @@
},
{
"c": "",
- "t": "text.html.basic meta.tag.inline.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.tag.inline.span.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2773,7 +2762,7 @@
},
{
"c": "span",
- "t": "text.html.basic meta.tag.inline.any.html entity.name.tag.inline.any.html",
+ "t": "text.html.basic meta.tag.inline.span.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -2784,7 +2773,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.tag.inline.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.tag.inline.span.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2806,7 +2795,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.tag.inline.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.tag.inline.span.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2817,7 +2806,7 @@
},
{
"c": "span",
- "t": "text.html.basic meta.tag.inline.any.html entity.name.tag.inline.any.html",
+ "t": "text.html.basic meta.tag.inline.span.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -2828,7 +2817,7 @@
},
{
"c": " ",
- "t": "text.html.basic meta.tag.inline.any.html",
+ "t": "text.html.basic meta.tag.inline.span.start.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2839,7 +2828,7 @@
},
{
"c": "class",
- "t": "text.html.basic meta.tag.inline.any.html entity.other.attribute-name.html",
+ "t": "text.html.basic meta.tag.inline.span.start.html meta.attribute.class.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -2850,7 +2839,7 @@
},
{
"c": "=",
- "t": "text.html.basic meta.tag.inline.any.html",
+ "t": "text.html.basic meta.tag.inline.span.start.html meta.attribute.class.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2861,7 +2850,7 @@
},
{
"c": "\"",
- "t": "text.html.basic meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.begin.html",
+ "t": "text.html.basic meta.tag.inline.span.start.html meta.attribute.class.html string.quoted.double.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2872,7 +2861,7 @@
},
{
"c": "signed-out-tab-flash",
- "t": "text.html.basic meta.tag.inline.any.html string.quoted.double.html",
+ "t": "text.html.basic meta.tag.inline.span.start.html meta.attribute.class.html string.quoted.double.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2883,7 +2872,7 @@
},
{
"c": "\"",
- "t": "text.html.basic meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.end.html",
+ "t": "text.html.basic meta.tag.inline.span.start.html meta.attribute.class.html string.quoted.double.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2894,7 +2883,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.tag.inline.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.tag.inline.span.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2916,7 +2905,7 @@
},
{
"c": "<",
- "t": "text.html.basic meta.tag.inline.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.tag.inline.a.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2927,7 +2916,7 @@
},
{
"c": "a",
- "t": "text.html.basic meta.tag.inline.any.html entity.name.tag.inline.any.html",
+ "t": "text.html.basic meta.tag.inline.a.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -2938,7 +2927,7 @@
},
{
"c": " ",
- "t": "text.html.basic meta.tag.inline.any.html",
+ "t": "text.html.basic meta.tag.inline.a.start.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2949,7 +2938,7 @@
},
{
"c": "href",
- "t": "text.html.basic meta.tag.inline.any.html entity.other.attribute-name.html",
+ "t": "text.html.basic meta.tag.inline.a.start.html meta.attribute.href.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -2960,7 +2949,7 @@
},
{
"c": "=",
- "t": "text.html.basic meta.tag.inline.any.html",
+ "t": "text.html.basic meta.tag.inline.a.start.html meta.attribute.href.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2971,7 +2960,7 @@
},
{
"c": "\"",
- "t": "text.html.basic meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.begin.html",
+ "t": "text.html.basic meta.tag.inline.a.start.html meta.attribute.href.html string.quoted.double.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2982,7 +2971,7 @@
},
{
"c": "\"",
- "t": "text.html.basic meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.end.html",
+ "t": "text.html.basic meta.tag.inline.a.start.html meta.attribute.href.html string.quoted.double.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2993,7 +2982,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.tag.inline.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.tag.inline.a.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -3015,7 +3004,7 @@
},
{
"c": "",
- "t": "text.html.basic meta.tag.inline.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.tag.inline.a.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -3026,7 +3015,7 @@
},
{
"c": "a",
- "t": "text.html.basic meta.tag.inline.any.html entity.name.tag.inline.any.html",
+ "t": "text.html.basic meta.tag.inline.a.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -3037,7 +3026,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.tag.inline.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.tag.inline.a.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -3059,7 +3048,7 @@
},
{
"c": "",
- "t": "text.html.basic meta.tag.inline.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.tag.inline.span.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -3070,7 +3059,7 @@
},
{
"c": "span",
- "t": "text.html.basic meta.tag.inline.any.html entity.name.tag.inline.any.html",
+ "t": "text.html.basic meta.tag.inline.span.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -3081,7 +3070,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.tag.inline.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.tag.inline.span.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -3103,7 +3092,7 @@
},
{
"c": "",
- "t": "text.html.basic meta.tag.block.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.basic meta.tag.structure.div.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -3114,7 +3103,7 @@
},
{
"c": "div",
- "t": "text.html.basic meta.tag.block.any.html entity.name.tag.block.any.html",
+ "t": "text.html.basic meta.tag.structure.div.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -3125,7 +3114,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.tag.block.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.basic meta.tag.structure.div.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -3136,7 +3125,7 @@
},
{
"c": "",
- "t": "text.html.basic meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.tag.structure.body.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -3147,7 +3136,7 @@
},
{
"c": "body",
- "t": "text.html.basic meta.tag.structure.any.html entity.name.tag.structure.any.html",
+ "t": "text.html.basic meta.tag.structure.body.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -3158,7 +3147,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.tag.structure.body.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -3169,7 +3158,7 @@
},
{
"c": "",
- "t": "text.html.basic meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.tag.structure.html.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -3180,7 +3169,7 @@
},
{
"c": "html",
- "t": "text.html.basic meta.tag.structure.any.html entity.name.tag.structure.any.html",
+ "t": "text.html.basic meta.tag.structure.html.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -3191,7 +3180,7 @@
},
{
"c": ">",
- "t": "text.html.basic meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.basic meta.tag.structure.html.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
diff --git a/extensions/ini/test/colorize-results/test_ini.json b/extensions/ini/test/colorize-results/test_ini.json
index 5b001c68246..39c089f5cef 100644
--- a/extensions/ini/test/colorize-results/test_ini.json
+++ b/extensions/ini/test/colorize-results/test_ini.json
@@ -3,9 +3,9 @@
"c": ";",
"t": "source.ini comment.line.semicolon.ini punctuation.definition.comment.ini",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -14,9 +14,9 @@
"c": " last modified 1 April 2001 by John Doe",
"t": "source.ini comment.line.semicolon.ini",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -157,9 +157,9 @@
"c": ";",
"t": "source.ini comment.line.semicolon.ini punctuation.definition.comment.ini",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -168,9 +168,9 @@
"c": " use IP address in case network name resolution is not working",
"t": "source.ini comment.line.semicolon.ini",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
diff --git a/extensions/jake/README.md b/extensions/jake/README.md
index cbaa043b0a2..969c970def7 100644
--- a/extensions/jake/README.md
+++ b/extensions/jake/README.md
@@ -1,10 +1,13 @@
# Jake - JavaScript build tool
-**Notice** This is a an extension that is bundled with Visual Studio Code.
+**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.
+
+## Features
This extension supports running [Jake](http://jakejs.com/) tasks defined in a `Jakefile.js` file as [VS Code tasks](https://code.visualstudio.com/docs/editor/tasks). Jake tasks with the name 'build', 'compile', or 'watch' are treated as build tasks.
-To run Jake tasks use the `Tasks` menu.
+To run Jake tasks, use the **Tasks** menu.
## Settings
-- `jake.autoDetect` enable detecting tasks from `Jakefile.js` files, the default is `on`.
+
+- `jake.autoDetect` - Enable detecting tasks from `Jakefile.js` files, the default is `on`.
diff --git a/extensions/jake/package.json b/extensions/jake/package.json
index 2330f353026..f35e49fee26 100644
--- a/extensions/jake/package.json
+++ b/extensions/jake/package.json
@@ -16,10 +16,10 @@
"watch": "gulp watch-extension:jake"
},
"dependencies": {
- "vscode-nls": "^3.2.1"
+ "vscode-nls": "^4.0.0"
},
"devDependencies": {
- "@types/node": "7.0.43"
+ "@types/node": "^8.10.25"
},
"main": "./out/main",
"activationEvents": [
@@ -46,7 +46,9 @@
"taskDefinitions": [
{
"type": "jake",
- "required": ["task"],
+ "required": [
+ "task"
+ ],
"properties": {
"task": {
"type": "string",
@@ -60,4 +62,4 @@
}
]
}
-}
\ No newline at end of file
+}
diff --git a/extensions/jake/package.nls.json b/extensions/jake/package.nls.json
index b8cdb170d33..8150f471e6d 100644
--- a/extensions/jake/package.nls.json
+++ b/extensions/jake/package.nls.json
@@ -1,6 +1,6 @@
{
- "description": "Extension to add Jake capabilities to VSCode.",
- "displayName": "Jake support for VSCode",
+ "description": "Extension to add Jake capabilities to VS Code.",
+ "displayName": "Jake support for VS Code",
"jake.taskDefinition.type.description": "The Jake task to customize.",
"jake.taskDefinition.file.description": "The Jake file that provides the task. Can be omitted.",
"config.jake.autoDetect": "Controls whether auto detection of Jake tasks is on or off. Default is on."
diff --git a/extensions/jake/yarn.lock b/extensions/jake/yarn.lock
index 112e5f2ac8d..913d2622d18 100644
--- a/extensions/jake/yarn.lock
+++ b/extensions/jake/yarn.lock
@@ -2,10 +2,10 @@
# yarn lockfile v1
-"@types/node@7.0.43":
- version "7.0.43"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.43.tgz#a187e08495a075f200ca946079c914e1a5fe962c"
+"@types/node@^8.10.25":
+ version "8.10.25"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.25.tgz#801fe4e39372cef18f268db880a5fbfcf71adc7e"
-vscode-nls@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.1.tgz#b1f3e04e8a94a715d5a7bcbc8339c51e6d74ca51"
+vscode-nls@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-4.0.0.tgz#4001c8a6caba5cedb23a9c5ce1090395c0e44002"
diff --git a/extensions/java/syntaxes/java.tmLanguage.json b/extensions/java/syntaxes/java.tmLanguage.json
index f0c867f59c8..d4477107155 100644
--- a/extensions/java/syntaxes/java.tmLanguage.json
+++ b/extensions/java/syntaxes/java.tmLanguage.json
@@ -4,7 +4,7 @@
"If you want to provide a fix or improvement, please create a pull request against the original repository.",
"Once accepted there, we are happy to receive an update request."
],
- "version": "https://github.com/atom/language-java/commit/bbbd3236c0ef9a9cd8c59d6ad4bd6b9b231dc714",
+ "version": "https://github.com/atom/language-java/commit/f213dfac7dc3726170046c8f0c174c9e9f13e4ce",
"name": "Java",
"scopeName": "source.java",
"patterns": [
@@ -102,6 +102,9 @@
},
{
"include": "#code"
+ },
+ {
+ "include": "#module"
}
],
"repository": {
@@ -180,6 +183,25 @@
}
]
},
+ "anonymous-block-and-instance-initializer": {
+ "begin": "{",
+ "beginCaptures": {
+ "0": {
+ "name": "punctuation.section.block.begin.bracket.curly.java"
+ }
+ },
+ "end": "}",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.section.block.end.bracket.curly.java"
+ }
+ },
+ "patterns": [
+ {
+ "include": "#code"
+ }
+ ]
+ },
"anonymous-classes-and-new": {
"begin": "\\bnew\\b",
"beginCaptures": {
@@ -367,36 +389,6 @@
}
]
},
- "anonymous-block-and-instance-initializer": {
- "begin": "{",
- "beginCaptures": {
- "0": {
- "name": "punctuation.section.block.begin.bracket.curly.java"
- }
- },
- "end": "}",
- "endCaptures": {
- "0": {
- "name": "punctuation.section.block.end.bracket.curly.java"
- }
- },
- "patterns": [
- {
- "include": "#code"
- }
- ]
- },
- "static-initializer": {
- "patterns": [
- {
- "include": "#anonymous-block-and-instance-initializer"
- },
- {
- "match": "static",
- "name": "storage.modifier.java"
- }
- ]
- },
"code": {
"patterns": [
{
@@ -447,15 +439,15 @@
{
"include": "#function-call"
},
+ {
+ "include": "#variables"
+ },
{
"include": "#objects"
},
{
"include": "#properties"
},
- {
- "include": "#variables"
- },
{
"include": "#strings"
},
@@ -591,149 +583,6 @@
}
]
},
- "try-catch-finally": {
- "patterns": [
- {
- "begin": "\\btry\\b",
- "beginCaptures": {
- "0": {
- "name": "keyword.control.try.java"
- }
- },
- "end": "}",
- "endCaptures": {
- "0": {
- "name": "punctuation.section.try.end.bracket.curly.java"
- }
- },
- "name": "meta.try.java",
- "patterns": [
- {
- "begin": "\\(",
- "beginCaptures": {
- "0": {
- "name": "punctuation.section.try.resources.begin.bracket.round.java"
- }
- },
- "end": "\\)",
- "endCaptures": {
- "0": {
- "name": "punctuation.section.try.resources.end.bracket.round.java"
- }
- },
- "name": "meta.try.resources.java",
- "patterns": [
- {
- "include": "#code"
- }
- ]
- },
- {
- "begin": "{",
- "beginCaptures": {
- "0": {
- "name": "punctuation.section.try.begin.bracket.curly.java"
- }
- },
- "end": "(?=})",
- "contentName": "meta.try.body.java",
- "patterns": [
- {
- "include": "#code"
- }
- ]
- }
- ]
- },
- {
- "begin": "\\b(catch)\\b\\s*(?=\\(\\s*[^\\s]+\\s*[^)]+\\))",
- "beginCaptures": {
- "1": {
- "name": "keyword.control.catch.java"
- }
- },
- "end": "}",
- "endCaptures": {
- "0": {
- "name": "punctuation.section.catch.end.bracket.curly.java"
- }
- },
- "name": "meta.catch.java",
- "patterns": [
- {
- "begin": "\\(",
- "beginCaptures": {
- "0": {
- "name": "punctuation.definition.parameters.begin.bracket.round.java"
- }
- },
- "end": "\\)",
- "endCaptures": {
- "0": {
- "name": "punctuation.definition.parameters.end.bracket.round.java"
- }
- },
- "contentName": "meta.catch.parameters.java",
- "patterns": [
- {
- "include": "#comments"
- },
- {
- "include": "#parameters"
- }
- ]
- },
- {
- "begin": "{",
- "beginCaptures": {
- "0": {
- "name": "punctuation.section.catch.begin.bracket.curly.java"
- }
- },
- "end": "(?=})",
- "contentName": "meta.catch.body.java",
- "patterns": [
- {
- "include": "#code"
- }
- ]
- }
- ]
- },
- {
- "begin": "\\bfinally\\b",
- "beginCaptures": {
- "0": {
- "name": "keyword.control.finally.java"
- }
- },
- "end": "}",
- "endCaptures": {
- "0": {
- "name": "punctuation.section.finally.end.bracket.curly.java"
- }
- },
- "name": "meta.finally.java",
- "patterns": [
- {
- "begin": "{",
- "beginCaptures": {
- "0": {
- "name": "punctuation.section.finally.begin.bracket.curly.java"
- }
- },
- "end": "(?=})",
- "contentName": "meta.finally.body.java",
- "patterns": [
- {
- "include": "#code"
- }
- ]
- }
- ]
- }
- ]
- },
"constants-and-special-vars": {
"patterns": [
{
@@ -750,66 +599,6 @@
}
]
},
- "generics": {
- "begin": "<",
- "beginCaptures": {
- "0": {
- "name": "punctuation.bracket.angle.java"
- }
- },
- "end": ">",
- "endCaptures": {
- "0": {
- "name": "punctuation.bracket.angle.java"
- }
- },
- "patterns": [
- {
- "match": "\\b(extends|super)\\b",
- "name": "storage.modifier.$1.java"
- },
- {
- "match": "(?",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.bracket.angle.java"
+ }
+ },
+ "patterns": [
+ {
+ "match": "\\b(extends|super)\\b",
+ "name": "storage.modifier.$1.java"
+ },
+ {
+ "match": "(?)|(?!;)",
- "patterns": [
- {
- "include": "#generics"
- }
- ]
- },
- {
- "match": "\\b(?:[A-Z]\\w*\\s*(\\.)\\s*)*[A-Z]\\w*\\b((?=\\s*[A-Za-z$_\\n])|(?=\\s*\\.\\.\\.))",
- "name": "storage.type.java",
+ "match": "\\b((?:[A-Za-z]\\w*\\s*\\.\\s*)*[A-Z]\\w*)\\s*(?=<)",
"captures": {
"1": {
- "name": "punctuation.separator.period.java"
+ "patterns": [
+ {
+ "match": "[A-Za-z]\\w*",
+ "name": "storage.type.java"
+ },
+ {
+ "match": "\\.",
+ "name": "punctuation.separator.period.java"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "match": "\\b((?:[A-Za-z]\\w*\\s*\\.\\s*)*[A-Z]\\w*)\\b((?=\\s*[A-Za-z$_\\n])|(?=\\s*\\.\\.\\.))",
+ "captures": {
+ "1": {
+ "patterns": [
+ {
+ "match": "[A-Za-z]\\w*",
+ "name": "storage.type.java"
+ },
+ {
+ "match": "\\.",
+ "name": "punctuation.separator.period.java"
+ }
+ ]
}
}
}
@@ -1298,6 +1221,17 @@
}
]
},
+ "static-initializer": {
+ "patterns": [
+ {
+ "include": "#anonymous-block-and-instance-initializer"
+ },
+ {
+ "match": "static",
+ "name": "storage.modifier.java"
+ }
+ ]
+ },
"storage-modifiers": {
"match": "\\b(public|private|protected|static|final|native|synchronized|abstract|threadsafe|transient|volatile|default|strictfp)\\b",
"name": "storage.modifier.java"
@@ -1359,13 +1293,173 @@
"name": "meta.throwables.java",
"patterns": [
{
- "include": "#object-types"
+ "match": ",",
+ "name": "punctuation.separator.delimiter.java"
+ },
+ {
+ "match": "[a-zA-Z$_][\\.a-zA-Z0-9$_]*",
+ "name": "storage.type.java"
+ }
+ ]
+ },
+ "try-catch-finally": {
+ "patterns": [
+ {
+ "begin": "\\btry\\b",
+ "beginCaptures": {
+ "0": {
+ "name": "keyword.control.try.java"
+ }
+ },
+ "end": "}",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.section.try.end.bracket.curly.java"
+ }
+ },
+ "name": "meta.try.java",
+ "patterns": [
+ {
+ "begin": "\\(",
+ "beginCaptures": {
+ "0": {
+ "name": "punctuation.section.try.resources.begin.bracket.round.java"
+ }
+ },
+ "end": "\\)",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.section.try.resources.end.bracket.round.java"
+ }
+ },
+ "name": "meta.try.resources.java",
+ "patterns": [
+ {
+ "include": "#code"
+ }
+ ]
+ },
+ {
+ "begin": "{",
+ "beginCaptures": {
+ "0": {
+ "name": "punctuation.section.try.begin.bracket.curly.java"
+ }
+ },
+ "end": "(?=})",
+ "contentName": "meta.try.body.java",
+ "patterns": [
+ {
+ "include": "#code"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "begin": "\\b(catch)\\b\\s*(?=\\(\\s*[^\\s]+\\s*[^)]+\\))",
+ "beginCaptures": {
+ "1": {
+ "name": "keyword.control.catch.java"
+ }
+ },
+ "end": "}",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.section.catch.end.bracket.curly.java"
+ }
+ },
+ "name": "meta.catch.java",
+ "patterns": [
+ {
+ "begin": "\\(",
+ "beginCaptures": {
+ "0": {
+ "name": "punctuation.definition.parameters.begin.bracket.round.java"
+ }
+ },
+ "end": "\\)",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.parameters.end.bracket.round.java"
+ }
+ },
+ "contentName": "meta.catch.parameters.java",
+ "patterns": [
+ {
+ "include": "#comments"
+ },
+ {
+ "match": "\\|",
+ "name": "punctuation.catch.separator.java"
+ },
+ {
+ "match": "([a-zA-Z$_][\\.a-zA-Z0-9$_]*)\\s*(\\w+)?",
+ "captures": {
+ "1": {
+ "name": "storage.type.java"
+ },
+ "2": {
+ "name": "variable.parameter.java"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "begin": "{",
+ "beginCaptures": {
+ "0": {
+ "name": "punctuation.section.catch.begin.bracket.curly.java"
+ }
+ },
+ "end": "(?=})",
+ "contentName": "meta.catch.body.java",
+ "patterns": [
+ {
+ "include": "#code"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "begin": "\\bfinally\\b",
+ "beginCaptures": {
+ "0": {
+ "name": "keyword.control.finally.java"
+ }
+ },
+ "end": "}",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.section.finally.end.bracket.curly.java"
+ }
+ },
+ "name": "meta.finally.java",
+ "patterns": [
+ {
+ "begin": "{",
+ "beginCaptures": {
+ "0": {
+ "name": "punctuation.section.finally.begin.bracket.curly.java"
+ }
+ },
+ "end": "(?=})",
+ "contentName": "meta.finally.body.java",
+ "patterns": [
+ {
+ "include": "#code"
+ }
+ ]
+ }
+ ]
}
]
},
"variables": {
- "begin": "(?x)\n(?=\n (\n (void|boolean|byte|char|short|int|float|long|double)\n |\n (?>(\\w+\\.)*[A-Z]+\\w*) # e.g. `javax.ws.rs.Response`, or `String`\n )\n (\n <[\\w<>,\\.?\\s]*> # e.g. `HashMap`, or `List`\n )?\n (\n (\\[\\])* # int[][]\n )?\n \\s+\n [A-Za-z_$][\\w$]* # At least one identifier after space\n ([\\w\\[\\],$][\\w\\[\\],\\s]*)? # possibly primitive array or additional identifiers\n \\s*(=|;)\n)",
- "end": "(?=;)",
+ "begin": "(?x)\n(?=\n (\n (void|boolean|byte|char|short|int|float|long|double)\n |\n (?>(\\w+\\.)*[A-Z]+\\w*) # e.g. `javax.ws.rs.Response`, or `String`\n )\n (\n <[\\w<>,\\.?\\s\\[\\]]*> # e.g. `HashMap`, or `List`\n )?\n (\n (\\[\\])* # int[][]\n )?\n \\s+\n [A-Za-z_$][\\w$]* # At least one identifier after space\n ([\\w\\[\\],$][\\w\\[\\],\\s]*)? # possibly primitive array or additional identifiers\n \\s*(=|;)\n)",
+ "end": "(?=\\=|;)",
"name": "meta.definition.variable.java",
"patterns": [
{
@@ -1379,42 +1473,10 @@
{
"include": "#all-types"
},
- {
- "begin": "=",
- "beginCaptures": {
- "0": {
- "name": "keyword.operator.assignment.java"
- }
- },
- "end": "(?=;)",
- "patterns": [
- {
- "include": "#code"
- }
- ]
- },
{
"include": "#code"
}
]
- },
- "member-variables": {
- "begin": "(?=private|protected|public|native|synchronized|abstract|threadsafe|transient|static|final)",
- "end": "(?=;)",
- "patterns": [
- {
- "include": "#storage-modifiers"
- },
- {
- "include": "#variables"
- },
- {
- "include": "#primitive-arrays"
- },
- {
- "include": "#object-types"
- }
- ]
}
}
}
\ No newline at end of file
diff --git a/extensions/java/test/colorize-results/basic_java.json b/extensions/java/test/colorize-results/basic_java.json
index 1ef3a8ff324..ce736eb21d2 100644
--- a/extensions/java/test/colorize-results/basic_java.json
+++ b/extensions/java/test/colorize-results/basic_java.json
@@ -245,9 +245,9 @@
"c": "/*",
"t": "source.java comment.block.java punctuation.definition.comment.java",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -256,9 +256,9 @@
"c": " * Multi line comment",
"t": "source.java comment.block.java",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -267,9 +267,9 @@
"c": " ",
"t": "source.java comment.block.java",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -278,9 +278,9 @@
"c": "*/",
"t": "source.java comment.block.java punctuation.definition.comment.java",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -443,9 +443,9 @@
"c": "\t/**",
"t": "source.java meta.class.java meta.class.body.java comment.block.javadoc.java punctuation.definition.comment.java",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -454,9 +454,9 @@
"c": "\t * Note:
Hello",
"t": "source.java meta.class.java meta.class.body.java comment.block.javadoc.java",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -465,9 +465,9 @@
"c": "\t * ",
"t": "source.java meta.class.java meta.class.body.java comment.block.javadoc.java",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -487,9 +487,9 @@
"c": " ",
"t": "source.java meta.class.java meta.class.body.java comment.block.javadoc.java",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -500,7 +500,7 @@
"r": {
"dark_plus": "variable: #9CDCFE",
"light_plus": "variable: #001080",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "variable: #9CDCFE"
}
@@ -509,9 +509,9 @@
"c": "\t ",
"t": "source.java meta.class.java meta.class.body.java comment.block.javadoc.java",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -520,9 +520,9 @@
"c": "*/",
"t": "source.java meta.class.java meta.class.body.java comment.block.javadoc.java punctuation.definition.comment.java",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -727,7 +727,7 @@
},
{
"c": "=",
- "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java meta.definition.variable.java keyword.operator.assignment.java",
+ "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java keyword.operator.assignment.java",
"r": {
"dark_plus": "keyword.operator: #D4D4D4",
"light_plus": "keyword.operator: #000000",
@@ -738,7 +738,7 @@
},
{
"c": " ",
- "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java meta.definition.variable.java",
+ "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -749,7 +749,7 @@
},
{
"c": "0.0",
- "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java meta.definition.variable.java constant.numeric.decimal.java",
+ "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java constant.numeric.decimal.java",
"r": {
"dark_plus": "constant.numeric: #B5CEA8",
"light_plus": "constant.numeric: #09885A",
@@ -826,7 +826,7 @@
},
{
"c": "=",
- "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java meta.definition.variable.java keyword.operator.assignment.java",
+ "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java keyword.operator.assignment.java",
"r": {
"dark_plus": "keyword.operator: #D4D4D4",
"light_plus": "keyword.operator: #000000",
@@ -837,7 +837,7 @@
},
{
"c": " ",
- "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java meta.definition.variable.java",
+ "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -848,7 +848,7 @@
},
{
"c": "10e3",
- "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java meta.definition.variable.java constant.numeric.decimal.java",
+ "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java constant.numeric.decimal.java",
"r": {
"dark_plus": "constant.numeric: #B5CEA8",
"light_plus": "constant.numeric: #09885A",
@@ -925,7 +925,7 @@
},
{
"c": "=",
- "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java meta.definition.variable.java keyword.operator.assignment.java",
+ "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java keyword.operator.assignment.java",
"r": {
"dark_plus": "keyword.operator: #D4D4D4",
"light_plus": "keyword.operator: #000000",
@@ -936,7 +936,7 @@
},
{
"c": " ",
- "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java meta.definition.variable.java",
+ "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -947,7 +947,7 @@
},
{
"c": "134l",
- "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java meta.definition.variable.java constant.numeric.decimal.java",
+ "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java constant.numeric.decimal.java",
"r": {
"dark_plus": "constant.numeric: #B5CEA8",
"light_plus": "constant.numeric: #09885A",
@@ -1004,9 +1004,9 @@
"c": "/*",
"t": "source.java meta.class.java meta.class.body.java comment.block.java punctuation.definition.comment.java",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1015,9 +1015,9 @@
"c": "\t * multiline comment",
"t": "source.java meta.class.java meta.class.body.java comment.block.java",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1026,9 +1026,9 @@
"c": "\t ",
"t": "source.java meta.class.java meta.class.body.java comment.block.java",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1037,9 +1037,9 @@
"c": "*/",
"t": "source.java meta.class.java meta.class.body.java comment.block.java punctuation.definition.comment.java",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1398,7 +1398,7 @@
},
{
"c": "=",
- "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java meta.definition.variable.java keyword.operator.assignment.java",
+ "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java keyword.operator.assignment.java",
"r": {
"dark_plus": "keyword.operator: #D4D4D4",
"light_plus": "keyword.operator: #000000",
@@ -1409,7 +1409,7 @@
},
{
"c": " ",
- "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java meta.definition.variable.java",
+ "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1420,7 +1420,7 @@
},
{
"c": "0",
- "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java meta.definition.variable.java constant.numeric.decimal.java",
+ "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java constant.numeric.decimal.java",
"r": {
"dark_plus": "constant.numeric: #B5CEA8",
"light_plus": "constant.numeric: #09885A",
@@ -1829,9 +1829,9 @@
"c": "//",
"t": "source.java meta.class.java meta.class.body.java comment.line.double-slash.java punctuation.definition.comment.java",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1840,9 +1840,9 @@
"c": "single line comment",
"t": "source.java meta.class.java meta.class.body.java comment.line.double-slash.java",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2047,7 +2047,7 @@
},
{
"c": "=",
- "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java meta.definition.variable.java keyword.operator.assignment.java",
+ "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java keyword.operator.assignment.java",
"r": {
"dark_plus": "keyword.operator: #D4D4D4",
"light_plus": "keyword.operator: #000000",
@@ -2058,7 +2058,7 @@
},
{
"c": " ",
- "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java meta.definition.variable.java",
+ "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2069,7 +2069,7 @@
},
{
"c": "0x5",
- "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java meta.definition.variable.java constant.numeric.hex.java",
+ "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java constant.numeric.hex.java",
"r": {
"dark_plus": "constant.numeric: #B5CEA8",
"light_plus": "constant.numeric: #09885A",
@@ -2179,7 +2179,7 @@
},
{
"c": "=",
- "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java meta.definition.variable.java keyword.operator.assignment.java",
+ "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java keyword.operator.assignment.java",
"r": {
"dark_plus": "keyword.operator: #D4D4D4",
"light_plus": "keyword.operator: #000000",
@@ -2190,7 +2190,7 @@
},
{
"c": " ",
- "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java meta.definition.variable.java",
+ "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2201,7 +2201,7 @@
},
{
"c": "new",
- "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java meta.definition.variable.java keyword.control.new.java",
+ "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java keyword.control.new.java",
"r": {
"dark_plus": "keyword.control: #C586C0",
"light_plus": "keyword.control: #AF00DB",
@@ -2212,7 +2212,7 @@
},
{
"c": " ",
- "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java meta.definition.variable.java",
+ "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2223,7 +2223,7 @@
},
{
"c": "Vector",
- "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java meta.definition.variable.java meta.function-call.java entity.name.function.java",
+ "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java meta.function-call.java entity.name.function.java",
"r": {
"dark_plus": "entity.name.function: #DCDCAA",
"light_plus": "entity.name.function: #795E26",
@@ -2234,7 +2234,7 @@
},
{
"c": "(",
- "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java meta.definition.variable.java meta.function-call.java punctuation.definition.parameters.begin.bracket.round.java",
+ "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java meta.function-call.java punctuation.definition.parameters.begin.bracket.round.java",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2245,7 +2245,7 @@
},
{
"c": ")",
- "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java meta.definition.variable.java meta.function-call.java punctuation.definition.parameters.end.bracket.round.java",
+ "t": "source.java meta.class.java meta.class.body.java meta.method.java meta.method.body.java meta.function-call.java punctuation.definition.parameters.end.bracket.round.java",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
diff --git a/extensions/javascript/javascript-language-configuration.json b/extensions/javascript/javascript-language-configuration.json
index 1e8f440a420..b41053843cf 100644
--- a/extensions/javascript/javascript-language-configuration.json
+++ b/extensions/javascript/javascript-language-configuration.json
@@ -25,6 +25,7 @@
["\"", "\""],
["`", "`"]
],
+ "autoCloseBefore": ";:.,=}])>` \n\t",
"folding": {
"markers": {
"start": "^\\s*//\\s*#?region\\b",
diff --git a/extensions/javascript/syntaxes/JavaScript.tmLanguage.json b/extensions/javascript/syntaxes/JavaScript.tmLanguage.json
index 4589797b3e3..7ea9fe439fb 100644
--- a/extensions/javascript/syntaxes/JavaScript.tmLanguage.json
+++ b/extensions/javascript/syntaxes/JavaScript.tmLanguage.json
@@ -4,7 +4,7 @@
"If you want to provide a fix or improvement, please create a pull request against the original repository.",
"Once accepted there, we are happy to receive an update request."
],
- "version": "https://github.com/Microsoft/TypeScript-TmLanguage/commit/53ce68bc2e8abcfa9bce7fb555ccd60c5bacd11e",
+ "version": "https://github.com/Microsoft/TypeScript-TmLanguage/commit/67d50d27f0c459e6ccc9adc6645454ecb1c2406c",
"name": "JavaScript (with React support)",
"scopeName": "source.js",
"patterns": [
@@ -93,6 +93,10 @@
},
{
"include": "#export-declaration"
+ },
+ {
+ "name": "storage.modifier.js",
+ "match": "(?)\n )) |\n ((async\\s*)?(\n ([\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ([\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
+ "begin": "(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*\n# function assignment |\n(=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$))) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
"beginCaptures": {
"1": {
"name": "meta.definition.variable.js entity.name.function.js"
@@ -382,6 +474,40 @@
}
]
},
+ "var-single-const": {
+ "patterns": [
+ {
+ "name": "meta.var-single-variable.expr.js",
+ "begin": "(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*\n# function assignment |\n(=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$))) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
+ "beginCaptures": {
+ "1": {
+ "name": "meta.definition.variable.js variable.other.constant.js entity.name.function.js"
+ }
+ },
+ "end": "(?=$|^|[;,=}]|(\\s+(of|in)\\s+))",
+ "patterns": [
+ {
+ "include": "#var-single-variable-type-annotation"
+ }
+ ]
+ },
+ {
+ "name": "meta.var-single-variable.expr.js",
+ "begin": "([_$[:alpha:]][_$[:alnum:]]*)",
+ "beginCaptures": {
+ "1": {
+ "name": "meta.definition.variable.js variable.other.constant.js"
+ }
+ },
+ "end": "(?=$|^|[;,=}]|(\\s+(of|in)\\s+))",
+ "patterns": [
+ {
+ "include": "#var-single-variable-type-annotation"
+ }
+ ]
+ }
+ ]
+ },
"var-single-variable-type-annotation": {
"patterns": [
{
@@ -431,6 +557,42 @@
}
]
},
+ "destructuring-const": {
+ "patterns": [
+ {
+ "name": "meta.object-binding-pattern-variable.js",
+ "begin": "(?)\n )) |\n ((async\\s*)?(\n ([\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ([\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
+ "match": "(?x)(?:(?)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$))) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
"captures": {
"1": {
"name": "storage.modifier.js"
@@ -622,9 +895,12 @@
"patterns": [
{
"name": "meta.parameter.object-binding-pattern.js",
- "begin": "(?)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$))) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
+ "captures": {
+ "1": {
+ "name": "meta.definition.property.js entity.name.function.js"
},
- {
- "include": "#string"
- },
- {
- "include": "#array-literal"
- },
- {
- "include": "#numeric-literal"
- },
- {
- "include": "#comment"
- },
- {
- "match": "(?x)([_$[:alpha:]][_$[:alnum:]]*)(\\?)?(?=(\\?\\s*)?\\s*\n# function assignment |\n(=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ([\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ([\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
- "captures": {
- "1": {
- "name": "meta.definition.property.js entity.name.function.js"
- },
- "2": {
- "name": "keyword.operator.optional.js"
- }
- }
- },
- {
- "name": "meta.definition.property.js variable.object.property.js",
- "match": "[_$[:alpha:]][_$[:alnum:]]*"
- },
- {
- "name": "keyword.operator.optional.js",
- "match": "\\?"
+ "2": {
+ "name": "keyword.operator.optional.js"
}
- ]
+ }
+ },
+ {
+ "name": "meta.definition.property.js variable.object.property.js",
+ "match": "[_$[:alpha:]][_$[:alnum:]]*"
+ },
+ {
+ "name": "keyword.operator.optional.js",
+ "match": "\\?"
}
]
},
@@ -865,21 +1138,24 @@
},
"function-declaration": {
"name": "meta.function.js",
- "begin": "(?)\n )) |\n ((async\\s*)?(\n ([\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
+ "match": "(?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=:\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
"captures": {
"0": {
"name": "meta.object-literal.key.js"
@@ -2311,13 +2617,13 @@
]
},
"function-call": {
- "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
- "end": "(?<=\\))(?!(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
+ "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
+ "end": "(?<=\\))(?!(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
"patterns": [
{
"name": "meta.function-call.js",
"begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*))",
- "end": "(?=\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
+ "end": "(?=\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
"patterns": [
{
"include": "#literal"
@@ -2408,7 +2714,7 @@
]
},
{
- "begin": "(?<=[(=,]|=>)\\s*(async)?(?=\\s*((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*))?\\(\\s*$)",
+ "begin": "(?<=[(=,]|=>)\\s*(async)?(?=\\s*((((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*))?\\()|(<))\\s*$)",
"beginCaptures": {
"1": {
"name": "storage.modifier.async.js"
@@ -2536,11 +2842,11 @@
},
{
"name": "keyword.operator.expression.in.js",
- "match": "(?)\n )) |\n ((async\\s*)?(\n ([\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n))",
+ "match": "(?x)(?:(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*)?([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n))",
"captures": {
"1": {
"name": "punctuation.accessor.js"
@@ -3253,6 +3559,10 @@
},
{
"include": "#punctuation-comma"
+ },
+ {
+ "name": "keyword.operator.assignment.js",
+ "match": "(=)(?!>)"
}
]
},
@@ -3327,7 +3637,7 @@
},
"type-primitive": {
"name": "support.type.primitive.js",
- "match": "(?)\n ))\n ))\n)) |\n(:\\s*((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$))))",
+ "captures": {
+ "1": {
+ "name": "storage.modifier.js"
+ },
+ "2": {
+ "name": "keyword.operator.rest.js"
+ },
+ "3": {
+ "name": "entity.name.function.js variable.language.this.js"
+ },
+ "4": {
+ "name": "entity.name.function.js"
+ },
+ "5": {
+ "name": "keyword.operator.optional.js"
+ }
+ }
+ },
+ {
+ "match": "(?x)(?:(?)))(?=\\s*\\{)",
+ "begin": "([&|\\*])(?=\\s*\\{)",
"beginCaptures": {
- "1": {
+ "0": {
"name": "keyword.operator.type.js"
- },
- "2": {
- "name": "keyword.operator.assignment.js"
}
},
"end": "(?<=\\})",
@@ -3591,13 +3945,10 @@
]
},
{
- "begin": "([&|])|(=(?!>))",
+ "begin": "[&|\\*]",
"beginCaptures": {
- "1": {
+ "0": {
"name": "keyword.operator.type.js"
- },
- "2": {
- "name": "keyword.operator.assignment.js"
}
},
"end": "(?=\\S)"
@@ -3729,7 +4080,7 @@
"patterns": [
{
"name": "string.template.js",
- "begin": "([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)`)",
+ "begin": "([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)`)",
"beginCaptures": {
"1": {
"name": "entity.name.function.tagged-template.js"
@@ -3795,7 +4146,7 @@
"patterns": [
{
"name": "string.regexp.js",
- "begin": "(?|&&|\\|\\||\\*\\/)\\s*(\\/)(?![\\/*])(?=(?:[^\\/\\\\\\[]|\\\\.|\\[([^\\]\\\\]|\\\\.)+\\])+\\/(?![\\/*])[gimsuy]*(?!\\s*[a-zA-Z0-9_$]))",
+ "begin": "(?|&&|\\|\\||\\*\\/)\\s*(\\/)(?![\\/*])(?=(?:[^\\/\\\\\\[]|\\\\.|\\[([^\\]\\\\]|\\\\.)+\\])+\\/[gimsuy]*(?!\\s*[a-zA-Z0-9_$]))",
"beginCaptures": {
"1": {
"name": "punctuation.definition.string.begin.js"
@@ -3818,7 +4169,7 @@
},
{
"name": "string.regexp.js",
- "begin": "(?\\s*$)",
+ "begin": "^(///)\\s*(?=<(reference|amd-dependency|amd-module)(\\s+(path|types|no-default-lib|lib|name)\\s*=\\s*((\\'([^\\'\\\\]|\\\\\\'|\\\\)*\\')|(\\\"([^\\\"\\\\]|\\\\\\\"|\\\\)*\\\")))+\\s*/>\\s*$)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.comment.js"
}
},
- "end": "(?=^)",
+ "end": "(?=$)",
"patterns": [
{
"name": "meta.tag.js",
@@ -4096,7 +4469,7 @@
"patterns": [
{
"name": "entity.other.attribute-name.directive.js",
- "match": "path|types|no-default-lib|name"
+ "match": "path|types|no-default-lib|lib|name"
},
{
"name": "keyword.operator.assignment.js",
@@ -4557,8 +4930,8 @@
]
},
"jsx-tag-without-attributes-in-expression": {
- "begin": "(?:*]|&&|\\|\\||\\?|^return|[^\\._$[:alnum:]]return|^default|[^\\._$[:alnum:]]default|^)\\s*(?=(<)\\s*(?:([_$a-zA-Z][-$\\w.]*)(?))",
- "end": "(?!(<)\\s*(?:([_$a-zA-Z][-$\\w.]*)(?))",
+ "begin": "(?:*]|&&|\\|\\||\\?|^await|[^\\._$[:alnum:]]await|^return|[^\\._$[:alnum:]]return|^default|[^\\._$[:alnum:]]default|^yield|[^\\._$[:alnum:]]yield|^)\\s*(?=(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?))",
+ "end": "(?!(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?))",
"patterns": [
{
"include": "#jsx-tag-without-attributes"
@@ -4567,8 +4940,8 @@
},
"jsx-tag-without-attributes": {
"name": "meta.tag.without-attributes.js",
- "begin": "(<)\\s*(?:([_$a-zA-Z][-$\\w.]*)(?)",
- "end": "()\\s*(?:([_$a-zA-Z][-$\\w.]*)(?)",
+ "begin": "(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?)",
+ "end": "()\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.js"
@@ -4617,8 +4990,8 @@
]
},
"jsx-tag-in-expression": {
- "begin": "(?x)\n (?:*]|&&|\\|\\||\\?|^return|[^\\._$[:alnum:]]return|^default|[^\\._$[:alnum:]]default|^)\\s*\n (?!<\\s*[_$[:alpha:]][_$[:alnum:]]*((\\s+extends\\s+[^=>])|,)) # look ahead is not type parameter of arrow\n (?=(<)\\s*(?:([_$a-zA-Z][-$\\w.]*)(?\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)|(\\s+))(?!\\?)|\\/?>))",
- "end": "(?!(<)\\s*(?:([_$a-zA-Z][-$\\w.]*)(?\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)|(\\s+))(?!\\?)|\\/?>))",
+ "begin": "(?x)\n (?:*]|&&|\\|\\||\\?|^await|[^\\._$[:alnum:]]await|^return|[^\\._$[:alnum:]]return|^default|[^\\._$[:alnum:]]default|^yield|[^\\._$[:alnum:]]yield|^)\\s*\n (?!<\\s*[_$[:alpha:]][_$[:alnum:]]*((\\s+extends\\s+[^=>])|,)) # look ahead is not type parameter of arrow\n (?=(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?))",
+ "end": "(?!(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?))",
"patterns": [
{
"include": "#jsx-tag"
@@ -4627,8 +5000,8 @@
},
"jsx-tag": {
"name": "meta.tag.js",
- "begin": "(?=(<)\\s*(?:([_$a-zA-Z][-$\\w.]*)(?\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)|(\\s+))(?!\\?)|\\/?>))",
- "end": "(/>)|(?:()\\s*(?:([_$a-zA-Z][-$\\w.]*)(?))",
+ "begin": "(?=(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?))",
+ "end": "(/>)|(?:()\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?))",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.end.js"
@@ -4654,7 +5027,7 @@
},
"patterns": [
{
- "begin": "(<)\\s*(?:([_$a-zA-Z][-$\\w.]*)(?\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)|(\\s+))(?!\\?)|\\/?>)",
+ "begin": "(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.js"
@@ -4787,7 +5160,7 @@
]
},
"jsx-tag-attribute-name": {
- "match": "(?x)\n \\s*\n (?:([_$a-zA-Z][-$\\w.]*)(:))?\n ([_$a-zA-Z][-$\\w]*)\n (?=\\s|=|/?>|/\\*|//)",
+ "match": "(?x)\n \\s*\n (?:([_$[:alpha:]][-_$[:alnum:].]*)(:))?\n ([_$[:alpha:]][-_$[:alnum:]]*)\n (?=\\s|=|/?>|/\\*|//)",
"captures": {
"1": {
"name": "entity.other.attribute-name.namespace.js"
diff --git a/extensions/javascript/syntaxes/JavaScriptReact.tmLanguage.json b/extensions/javascript/syntaxes/JavaScriptReact.tmLanguage.json
index 7fb037fb111..8cb16316df7 100644
--- a/extensions/javascript/syntaxes/JavaScriptReact.tmLanguage.json
+++ b/extensions/javascript/syntaxes/JavaScriptReact.tmLanguage.json
@@ -4,7 +4,7 @@
"If you want to provide a fix or improvement, please create a pull request against the original repository.",
"Once accepted there, we are happy to receive an update request."
],
- "version": "https://github.com/Microsoft/TypeScript-TmLanguage/commit/53ce68bc2e8abcfa9bce7fb555ccd60c5bacd11e",
+ "version": "https://github.com/Microsoft/TypeScript-TmLanguage/commit/67d50d27f0c459e6ccc9adc6645454ecb1c2406c",
"name": "JavaScript (with React support)",
"scopeName": "source.js.jsx",
"patterns": [
@@ -93,6 +93,10 @@
},
{
"include": "#export-declaration"
+ },
+ {
+ "name": "storage.modifier.js.jsx",
+ "match": "(?)\n )) |\n ((async\\s*)?(\n ([\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ([\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
+ "begin": "(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*\n# function assignment |\n(=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$))) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
"beginCaptures": {
"1": {
"name": "meta.definition.variable.js.jsx entity.name.function.js.jsx"
@@ -382,6 +474,40 @@
}
]
},
+ "var-single-const": {
+ "patterns": [
+ {
+ "name": "meta.var-single-variable.expr.js.jsx",
+ "begin": "(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*\n# function assignment |\n(=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$))) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
+ "beginCaptures": {
+ "1": {
+ "name": "meta.definition.variable.js.jsx variable.other.constant.js.jsx entity.name.function.js.jsx"
+ }
+ },
+ "end": "(?=$|^|[;,=}]|(\\s+(of|in)\\s+))",
+ "patterns": [
+ {
+ "include": "#var-single-variable-type-annotation"
+ }
+ ]
+ },
+ {
+ "name": "meta.var-single-variable.expr.js.jsx",
+ "begin": "([_$[:alpha:]][_$[:alnum:]]*)",
+ "beginCaptures": {
+ "1": {
+ "name": "meta.definition.variable.js.jsx variable.other.constant.js.jsx"
+ }
+ },
+ "end": "(?=$|^|[;,=}]|(\\s+(of|in)\\s+))",
+ "patterns": [
+ {
+ "include": "#var-single-variable-type-annotation"
+ }
+ ]
+ }
+ ]
+ },
"var-single-variable-type-annotation": {
"patterns": [
{
@@ -431,6 +557,42 @@
}
]
},
+ "destructuring-const": {
+ "patterns": [
+ {
+ "name": "meta.object-binding-pattern-variable.js.jsx",
+ "begin": "(?)\n )) |\n ((async\\s*)?(\n ([\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ([\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
+ "match": "(?x)(?:(?)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$))) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
"captures": {
"1": {
"name": "storage.modifier.js.jsx"
@@ -622,9 +895,12 @@
"patterns": [
{
"name": "meta.parameter.object-binding-pattern.js.jsx",
- "begin": "(?)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$))) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
+ "captures": {
+ "1": {
+ "name": "meta.definition.property.js.jsx entity.name.function.js.jsx"
},
- {
- "include": "#string"
- },
- {
- "include": "#array-literal"
- },
- {
- "include": "#numeric-literal"
- },
- {
- "include": "#comment"
- },
- {
- "match": "(?x)([_$[:alpha:]][_$[:alnum:]]*)(\\?)?(?=(\\?\\s*)?\\s*\n# function assignment |\n(=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ([\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ([\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
- "captures": {
- "1": {
- "name": "meta.definition.property.js.jsx entity.name.function.js.jsx"
- },
- "2": {
- "name": "keyword.operator.optional.js.jsx"
- }
- }
- },
- {
- "name": "meta.definition.property.js.jsx variable.object.property.js.jsx",
- "match": "[_$[:alpha:]][_$[:alnum:]]*"
- },
- {
- "name": "keyword.operator.optional.js.jsx",
- "match": "\\?"
+ "2": {
+ "name": "keyword.operator.optional.js.jsx"
}
- ]
+ }
+ },
+ {
+ "name": "meta.definition.property.js.jsx variable.object.property.js.jsx",
+ "match": "[_$[:alpha:]][_$[:alnum:]]*"
+ },
+ {
+ "name": "keyword.operator.optional.js.jsx",
+ "match": "\\?"
}
]
},
@@ -865,21 +1138,24 @@
},
"function-declaration": {
"name": "meta.function.js.jsx",
- "begin": "(?)\n )) |\n ((async\\s*)?(\n ([\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
+ "match": "(?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=:\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
"captures": {
"0": {
"name": "meta.object-literal.key.js.jsx"
@@ -2311,13 +2617,13 @@
]
},
"function-call": {
- "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
- "end": "(?<=\\))(?!(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
+ "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
+ "end": "(?<=\\))(?!(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
"patterns": [
{
"name": "meta.function-call.js.jsx",
"begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*))",
- "end": "(?=\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
+ "end": "(?=\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
"patterns": [
{
"include": "#literal"
@@ -2408,7 +2714,7 @@
]
},
{
- "begin": "(?<=[(=,]|=>)\\s*(async)?(?=\\s*((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*))?\\(\\s*$)",
+ "begin": "(?<=[(=,]|=>)\\s*(async)?(?=\\s*((((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*))?\\()|(<))\\s*$)",
"beginCaptures": {
"1": {
"name": "storage.modifier.async.js.jsx"
@@ -2536,11 +2842,11 @@
},
{
"name": "keyword.operator.expression.in.js.jsx",
- "match": "(?)\n )) |\n ((async\\s*)?(\n ([\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n))",
+ "match": "(?x)(?:(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*)?([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n))",
"captures": {
"1": {
"name": "punctuation.accessor.js.jsx"
@@ -3253,6 +3559,10 @@
},
{
"include": "#punctuation-comma"
+ },
+ {
+ "name": "keyword.operator.assignment.js.jsx",
+ "match": "(=)(?!>)"
}
]
},
@@ -3327,7 +3637,7 @@
},
"type-primitive": {
"name": "support.type.primitive.js.jsx",
- "match": "(?)\n ))\n ))\n)) |\n(:\\s*((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$))))",
+ "captures": {
+ "1": {
+ "name": "storage.modifier.js.jsx"
+ },
+ "2": {
+ "name": "keyword.operator.rest.js.jsx"
+ },
+ "3": {
+ "name": "entity.name.function.js.jsx variable.language.this.js.jsx"
+ },
+ "4": {
+ "name": "entity.name.function.js.jsx"
+ },
+ "5": {
+ "name": "keyword.operator.optional.js.jsx"
+ }
+ }
+ },
+ {
+ "match": "(?x)(?:(?)))(?=\\s*\\{)",
+ "begin": "([&|\\*])(?=\\s*\\{)",
"beginCaptures": {
- "1": {
+ "0": {
"name": "keyword.operator.type.js.jsx"
- },
- "2": {
- "name": "keyword.operator.assignment.js.jsx"
}
},
"end": "(?<=\\})",
@@ -3591,13 +3945,10 @@
]
},
{
- "begin": "([&|])|(=(?!>))",
+ "begin": "[&|\\*]",
"beginCaptures": {
- "1": {
+ "0": {
"name": "keyword.operator.type.js.jsx"
- },
- "2": {
- "name": "keyword.operator.assignment.js.jsx"
}
},
"end": "(?=\\S)"
@@ -3729,7 +4080,7 @@
"patterns": [
{
"name": "string.template.js.jsx",
- "begin": "([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)`)",
+ "begin": "([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)`)",
"beginCaptures": {
"1": {
"name": "entity.name.function.tagged-template.js.jsx"
@@ -3795,7 +4146,7 @@
"patterns": [
{
"name": "string.regexp.js.jsx",
- "begin": "(?|&&|\\|\\||\\*\\/)\\s*(\\/)(?![\\/*])(?=(?:[^\\/\\\\\\[]|\\\\.|\\[([^\\]\\\\]|\\\\.)+\\])+\\/(?![\\/*])[gimsuy]*(?!\\s*[a-zA-Z0-9_$]))",
+ "begin": "(?|&&|\\|\\||\\*\\/)\\s*(\\/)(?![\\/*])(?=(?:[^\\/\\\\\\[]|\\\\.|\\[([^\\]\\\\]|\\\\.)+\\])+\\/[gimsuy]*(?!\\s*[a-zA-Z0-9_$]))",
"beginCaptures": {
"1": {
"name": "punctuation.definition.string.begin.js.jsx"
@@ -3818,7 +4169,7 @@
},
{
"name": "string.regexp.js.jsx",
- "begin": "(?\\s*$)",
+ "begin": "^(///)\\s*(?=<(reference|amd-dependency|amd-module)(\\s+(path|types|no-default-lib|lib|name)\\s*=\\s*((\\'([^\\'\\\\]|\\\\\\'|\\\\)*\\')|(\\\"([^\\\"\\\\]|\\\\\\\"|\\\\)*\\\")))+\\s*/>\\s*$)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.comment.js.jsx"
}
},
- "end": "(?=^)",
+ "end": "(?=$)",
"patterns": [
{
"name": "meta.tag.js.jsx",
@@ -4096,7 +4469,7 @@
"patterns": [
{
"name": "entity.other.attribute-name.directive.js.jsx",
- "match": "path|types|no-default-lib|name"
+ "match": "path|types|no-default-lib|lib|name"
},
{
"name": "keyword.operator.assignment.js.jsx",
@@ -4557,8 +4930,8 @@
]
},
"jsx-tag-without-attributes-in-expression": {
- "begin": "(?:*]|&&|\\|\\||\\?|^return|[^\\._$[:alnum:]]return|^default|[^\\._$[:alnum:]]default|^)\\s*(?=(<)\\s*(?:([_$a-zA-Z][-$\\w.]*)(?))",
- "end": "(?!(<)\\s*(?:([_$a-zA-Z][-$\\w.]*)(?))",
+ "begin": "(?:*]|&&|\\|\\||\\?|^await|[^\\._$[:alnum:]]await|^return|[^\\._$[:alnum:]]return|^default|[^\\._$[:alnum:]]default|^yield|[^\\._$[:alnum:]]yield|^)\\s*(?=(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?))",
+ "end": "(?!(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?))",
"patterns": [
{
"include": "#jsx-tag-without-attributes"
@@ -4567,8 +4940,8 @@
},
"jsx-tag-without-attributes": {
"name": "meta.tag.without-attributes.js.jsx",
- "begin": "(<)\\s*(?:([_$a-zA-Z][-$\\w.]*)(?)",
- "end": "()\\s*(?:([_$a-zA-Z][-$\\w.]*)(?)",
+ "begin": "(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?)",
+ "end": "()\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.js.jsx"
@@ -4617,8 +4990,8 @@
]
},
"jsx-tag-in-expression": {
- "begin": "(?x)\n (?:*]|&&|\\|\\||\\?|^return|[^\\._$[:alnum:]]return|^default|[^\\._$[:alnum:]]default|^)\\s*\n (?!<\\s*[_$[:alpha:]][_$[:alnum:]]*((\\s+extends\\s+[^=>])|,)) # look ahead is not type parameter of arrow\n (?=(<)\\s*(?:([_$a-zA-Z][-$\\w.]*)(?\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)|(\\s+))(?!\\?)|\\/?>))",
- "end": "(?!(<)\\s*(?:([_$a-zA-Z][-$\\w.]*)(?\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)|(\\s+))(?!\\?)|\\/?>))",
+ "begin": "(?x)\n (?:*]|&&|\\|\\||\\?|^await|[^\\._$[:alnum:]]await|^return|[^\\._$[:alnum:]]return|^default|[^\\._$[:alnum:]]default|^yield|[^\\._$[:alnum:]]yield|^)\\s*\n (?!<\\s*[_$[:alpha:]][_$[:alnum:]]*((\\s+extends\\s+[^=>])|,)) # look ahead is not type parameter of arrow\n (?=(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?))",
+ "end": "(?!(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?))",
"patterns": [
{
"include": "#jsx-tag"
@@ -4627,8 +5000,8 @@
},
"jsx-tag": {
"name": "meta.tag.js.jsx",
- "begin": "(?=(<)\\s*(?:([_$a-zA-Z][-$\\w.]*)(?\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)|(\\s+))(?!\\?)|\\/?>))",
- "end": "(/>)|(?:()\\s*(?:([_$a-zA-Z][-$\\w.]*)(?))",
+ "begin": "(?=(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?))",
+ "end": "(/>)|(?:()\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?))",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.end.js.jsx"
@@ -4654,7 +5027,7 @@
},
"patterns": [
{
- "begin": "(<)\\s*(?:([_$a-zA-Z][-$\\w.]*)(?\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)|(\\s+))(?!\\?)|\\/?>)",
+ "begin": "(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.js.jsx"
@@ -4787,7 +5160,7 @@
]
},
"jsx-tag-attribute-name": {
- "match": "(?x)\n \\s*\n (?:([_$a-zA-Z][-$\\w.]*)(:))?\n ([_$a-zA-Z][-$\\w]*)\n (?=\\s|=|/?>|/\\*|//)",
+ "match": "(?x)\n \\s*\n (?:([_$[:alpha:]][-_$[:alnum:].]*)(:))?\n ([_$[:alpha:]][-_$[:alnum:]]*)\n (?=\\s|=|/?>|/\\*|//)",
"captures": {
"1": {
"name": "entity.other.attribute-name.namespace.js.jsx"
diff --git a/extensions/javascript/test/colorize-results/test_js.json b/extensions/javascript/test/colorize-results/test_js.json
index 4d2acf6739f..6ba00939cdf 100644
--- a/extensions/javascript/test/colorize-results/test_js.json
+++ b/extensions/javascript/test/colorize-results/test_js.json
@@ -3,9 +3,9 @@
"c": "/*",
"t": "source.js comment.block.js punctuation.definition.comment.js",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -14,9 +14,9 @@
"c": "---------------------------------------------------------------------------------------------",
"t": "source.js comment.block.js",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -25,9 +25,9 @@
"c": " * Copyright (c) Microsoft Corporation. All rights reserved.",
"t": "source.js comment.block.js",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -36,9 +36,9 @@
"c": " * Licensed under the MIT License. See License.txt in the project root for license information.",
"t": "source.js comment.block.js",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -47,9 +47,9 @@
"c": " *--------------------------------------------------------------------------------------------",
"t": "source.js comment.block.js",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -58,9 +58,9 @@
"c": "*/",
"t": "source.js comment.block.js punctuation.definition.comment.js",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2861,7 +2861,7 @@
},
{
"c": " ",
- "t": "source.js",
+ "t": "source.js meta.array.literal.js",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -3169,7 +3169,7 @@
},
{
"c": " ",
- "t": "source.js meta.function.js meta.block.js meta.var.expr.js",
+ "t": "source.js meta.function.js meta.block.js meta.var.expr.js meta.array.literal.js",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
diff --git a/extensions/javascript/test/colorize-results/test_jsx.json b/extensions/javascript/test/colorize-results/test_jsx.json
index a375d5d7b9d..cdd8b8cdfa4 100644
--- a/extensions/javascript/test/colorize-results/test_jsx.json
+++ b/extensions/javascript/test/colorize-results/test_jsx.json
@@ -520,9 +520,9 @@
"c": "//",
"t": "source.js.jsx meta.var.expr.js.jsx meta.objectliteral.js.jsx meta.object.member.js.jsx meta.function.expression.js.jsx meta.block.js.jsx comment.line.double-slash.js.jsx punctuation.definition.comment.js.jsx",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -531,9 +531,9 @@
"c": " Prevent following the link.",
"t": "source.js.jsx meta.var.expr.js.jsx meta.objectliteral.js.jsx meta.object.member.js.jsx meta.function.expression.js.jsx meta.block.js.jsx comment.line.double-slash.js.jsx",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -619,9 +619,9 @@
"c": "//",
"t": "source.js.jsx meta.var.expr.js.jsx meta.objectliteral.js.jsx meta.object.member.js.jsx meta.function.expression.js.jsx meta.block.js.jsx comment.line.double-slash.js.jsx punctuation.definition.comment.js.jsx",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -630,9 +630,9 @@
"c": " Invert the chosen default.",
"t": "source.js.jsx meta.var.expr.js.jsx meta.objectliteral.js.jsx meta.object.member.js.jsx meta.function.expression.js.jsx meta.block.js.jsx comment.line.double-slash.js.jsx",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -652,9 +652,9 @@
"c": "//",
"t": "source.js.jsx meta.var.expr.js.jsx meta.objectliteral.js.jsx meta.object.member.js.jsx meta.function.expression.js.jsx meta.block.js.jsx comment.line.double-slash.js.jsx punctuation.definition.comment.js.jsx",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -663,9 +663,9 @@
"c": " This will trigger an intelligent re-render of the component.",
"t": "source.js.jsx meta.var.expr.js.jsx meta.objectliteral.js.jsx meta.object.member.js.jsx meta.function.expression.js.jsx meta.block.js.jsx comment.line.double-slash.js.jsx",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1037,9 +1037,9 @@
"c": "//",
"t": "source.js.jsx meta.var.expr.js.jsx meta.objectliteral.js.jsx meta.object.member.js.jsx meta.function.expression.js.jsx meta.block.js.jsx comment.line.double-slash.js.jsx punctuation.definition.comment.js.jsx",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1048,9 +1048,9 @@
"c": " Default to the default message.",
"t": "source.js.jsx meta.var.expr.js.jsx meta.objectliteral.js.jsx meta.object.member.js.jsx meta.function.expression.js.jsx meta.block.js.jsx comment.line.double-slash.js.jsx",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1213,9 +1213,9 @@
"c": "//",
"t": "source.js.jsx meta.var.expr.js.jsx meta.objectliteral.js.jsx meta.object.member.js.jsx meta.function.expression.js.jsx meta.block.js.jsx comment.line.double-slash.js.jsx punctuation.definition.comment.js.jsx",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1224,9 +1224,9 @@
"c": " If toggled, show the alternate message.",
"t": "source.js.jsx meta.var.expr.js.jsx meta.objectliteral.js.jsx meta.object.member.js.jsx meta.function.expression.js.jsx meta.block.js.jsx comment.line.double-slash.js.jsx",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
diff --git a/extensions/json-language-features/.vscodeignore b/extensions/json-language-features/.vscodeignore
index d30ea9070d5..d6de18538dd 100644
--- a/extensions/json-language-features/.vscodeignore
+++ b/extensions/json-language-features/.vscodeignore
@@ -1,7 +1,26 @@
-test/**
-client/tsconfig.json
+.vscode/**
+server/.vscode/**
+node_modules/**
+server/node_modules/**
client/src/**
-server/bin
-server/tsconfig.json
server/src/**
-server/node_modules/@types/**
\ No newline at end of file
+client/out/**
+server/out/**
+client/tsconfig.json
+server/tsconfig.json
+server/test/**
+server/bin/**
+server/build/**
+server/yarn.lock
+server/.npmignore
+yarn.lock
+server/extension.webpack.config.js
+extension.webpack.config.js
+!node_modules/vscode-nls/**
+!node_modules/applicationinsights/**
+!node_modules/diagnostic-channel-publishers/**
+!node_modules/diagnostic-channel/**
+!node_modules/semver/**
+!node_modules/vscode-extension-telemetry/**
+!node_modules/zone.js/**
+!server/node_modules/vscode-nls/**
\ No newline at end of file
diff --git a/extensions/json-language-features/README.md b/extensions/json-language-features/README.md
new file mode 100644
index 00000000000..2ff5e6e57d3
--- /dev/null
+++ b/extensions/json-language-features/README.md
@@ -0,0 +1,7 @@
+# Language Features for JSON files
+
+**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.
+
+## Features
+
+See [JSON in Visual Studio Code](https://code.visualstudio.com/docs/languages/json) to learn about the features of this extension.
\ No newline at end of file
diff --git a/extensions/json-language-features/client/src/jsonMain.ts b/extensions/json-language-features/client/src/jsonMain.ts
index 2cd653dfa4b..88326058e17 100644
--- a/extensions/json-language-features/client/src/jsonMain.ts
+++ b/extensions/json-language-features/client/src/jsonMain.ts
@@ -5,15 +5,14 @@
'use strict';
import * as path from 'path';
+import * as fs from 'fs';
import * as nls from 'vscode-nls';
const localize = nls.loadMessageBundle();
-import { workspace, languages, ExtensionContext, extensions, Uri, LanguageConfiguration, TextDocument, FoldingRangeKind, FoldingRange, Disposable, FoldingContext } from 'vscode';
-import { LanguageClient, LanguageClientOptions, RequestType, ServerOptions, TransportKind, NotificationType, DidChangeConfigurationNotification, CancellationToken } from 'vscode-languageclient';
+import { workspace, languages, ExtensionContext, extensions, Uri, LanguageConfiguration } from 'vscode';
+import { LanguageClient, LanguageClientOptions, RequestType, ServerOptions, TransportKind, NotificationType, DidChangeConfigurationNotification } from 'vscode-languageclient';
import TelemetryReporter from 'vscode-extension-telemetry';
-import { FoldingRangeRequest, FoldingRangeRequestParam, FoldingRangeClientCapabilities, FoldingRangeKind as LSFoldingRangeKind } from 'vscode-languageserver-protocol-foldingprovider';
-
import { hash } from './utils/hash';
namespace VSCodeContentRequest {
@@ -64,8 +63,9 @@ export function activate(context: ExtensionContext) {
let packageInfo = getPackageInfo(context);
telemetryReporter = packageInfo && new TelemetryReporter(packageInfo.name, packageInfo.version, packageInfo.aiKey);
- // The server is implemented in node
- let serverModule = context.asAbsolutePath(path.join('server', 'out', 'jsonServerMain.js'));
+ let serverMain = readJSONFile(context.asAbsolutePath('./server/package.json')).main;
+ let serverModule = context.asAbsolutePath(path.join('server', serverMain));
+
// The debug options for the server
let debugOptions = { execArgv: ['--nolazy', '--inspect=' + (9000 + Math.round(Math.random() * 10000))] };
@@ -97,21 +97,6 @@ export function activate(context: ExtensionContext) {
// Create the language client and start the client.
let client = new LanguageClient('json', localize('jsonserver.name', 'JSON Language Server'), serverOptions, clientOptions);
client.registerProposedFeatures();
- client.registerFeature({
- fillClientCapabilities(capabilities: FoldingRangeClientCapabilities): void {
- let textDocumentCap = capabilities.textDocument;
- if (!textDocumentCap) {
- textDocumentCap = capabilities.textDocument = {};
- }
- textDocumentCap.foldingRange = {
- dynamicRegistration: false,
- rangeLimit: 5000,
- lineFoldingOnly: true
- };
- },
- initialize(capabilities, documentSelector): void {
- }
- });
let disposable = client.start();
toDispose.push(disposable);
@@ -141,8 +126,6 @@ export function activate(context: ExtensionContext) {
toDispose.push(workspace.onDidCloseTextDocument(d => handleContentChange(d.uri)));
client.sendNotification(SchemaAssociationNotification.type, getSchemaAssociation(context));
-
- toDispose.push(initFoldingProvider());
});
let languageConfiguration: LanguageConfiguration = {
@@ -154,38 +137,6 @@ export function activate(context: ExtensionContext) {
};
languages.setLanguageConfiguration('json', languageConfiguration);
languages.setLanguageConfiguration('jsonc', languageConfiguration);
-
- function initFoldingProvider(): Disposable {
- function getKind(kind: string | undefined): FoldingRangeKind | undefined {
- if (kind) {
- switch (kind) {
- case LSFoldingRangeKind.Comment:
- return FoldingRangeKind.Comment;
- case LSFoldingRangeKind.Imports:
- return FoldingRangeKind.Imports;
- case LSFoldingRangeKind.Region:
- return FoldingRangeKind.Region;
- }
- }
- return void 0;
- }
- return languages.registerFoldingRangeProvider(documentSelector, {
- provideFoldingRanges(document: TextDocument, context: FoldingContext, token: CancellationToken) {
- const param: FoldingRangeRequestParam = {
- textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document)
- };
- return client.sendRequest(FoldingRangeRequest.type, param, token).then(ranges => {
- if (Array.isArray(ranges)) {
- return ranges.map(r => new FoldingRange(r.startLine, r.endLine, getKind(r.kind)));
- }
- return null;
- }, error => {
- client.logFailedRequest(FoldingRangeRequest.type, error);
- return null;
- });
- }
- });
- }
}
export function deactivate(): Promise {
@@ -251,11 +202,22 @@ function getSettings(): Settings {
settings.json!.schemas!.push(schemaSetting);
}
let fileMatches = setting.fileMatch;
+ let resultingFileMatches = schemaSetting.fileMatch!;
if (Array.isArray(fileMatches)) {
if (fileMatchPrefix) {
- fileMatches = fileMatches.map(m => fileMatchPrefix + m);
+ for (let fileMatch of fileMatches) {
+ if (fileMatch[0] === '/') {
+ resultingFileMatches.push(fileMatchPrefix + fileMatch);
+ resultingFileMatches.push(fileMatchPrefix + '/*' + fileMatch);
+ } else {
+ resultingFileMatches.push(fileMatchPrefix + '/' + fileMatch);
+ resultingFileMatches.push(fileMatchPrefix + '/*/' + fileMatch);
+ }
+ }
+ } else {
+ resultingFileMatches.push(...fileMatches);
}
- schemaSetting.fileMatch!.push(...fileMatches);
+
}
if (setting.schema) {
schemaSetting.schema = setting.schema;
@@ -276,10 +238,10 @@ function getSettings(): Settings {
let folderSchemas = schemaConfigInfo!.workspaceFolderValue;
if (Array.isArray(folderSchemas)) {
let folderPath = folderUri.toString();
- if (folderPath[folderPath.length - 1] !== '/') {
- folderPath = folderPath + '/';
+ if (folderPath[folderPath.length - 1] === '/') {
+ folderPath = folderPath.substr(0, folderPath.length - 1);
}
- collectSchemaSettings(folderSchemas, folderUri.fsPath, folderPath + '*');
+ collectSchemaSettings(folderSchemas, folderUri.fsPath, folderPath);
}
}
}
@@ -299,7 +261,7 @@ function getSchemaId(schema: JSONSchemaSettings, rootPath?: string) {
}
function getPackageInfo(context: ExtensionContext): IPackageInfo | undefined {
- let extensionPackage = require(context.asAbsolutePath('./package.json'));
+ let extensionPackage = readJSONFile(context.asAbsolutePath('./package.json'));
if (extensionPackage) {
return {
name: extensionPackage.name,
@@ -309,3 +271,13 @@ function getPackageInfo(context: ExtensionContext): IPackageInfo | undefined {
}
return void 0;
}
+
+function readJSONFile(location: string) {
+ try {
+ return JSON.parse(fs.readFileSync(location).toString());
+ } catch (e) {
+ console.log(`Problems reading ${location}: ${e}`);
+ return {};
+ }
+
+}
diff --git a/extensions/json-language-features/extension.webpack.config.js b/extensions/json-language-features/extension.webpack.config.js
new file mode 100644
index 00000000000..eb71544d875
--- /dev/null
+++ b/extensions/json-language-features/extension.webpack.config.js
@@ -0,0 +1,37 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+//@ts-check
+
+'use strict';
+
+const withDefaults = require('../shared.webpack.config');
+const CopyWebpackPlugin = require('copy-webpack-plugin');
+const path = require('path');
+
+module.exports = withDefaults({
+ context: path.join(__dirname, 'client'),
+ entry: {
+ extension: './src/jsonMain.ts',
+ },
+ resolve: {
+ mainFields: ['module', 'main'],
+ extensions: ['.ts', '.js'] // support ts-files and js-files
+ },
+ output: {
+ filename: 'jsonMain.js',
+ path: path.join(__dirname, 'client', 'dist'),
+ libraryTarget: "commonjs",
+ },
+ externals: {
+ './files': 'commonjs', // ignored because it doesn't exist
+ },
+ plugins: [
+ new CopyWebpackPlugin([
+ { from: './out/*.sh', to: '[name].sh' },
+ { from: './out/nls.*.json', to: '[name].json' }
+ ])
+ ]
+});
diff --git a/extensions/json-language-features/package.json b/extensions/json-language-features/package.json
index 2e245fdafd8..99af0a42c57 100644
--- a/extensions/json-language-features/package.json
+++ b/extensions/json-language-features/package.json
@@ -59,7 +59,7 @@
"description": "%json.schemas.fileMatch.desc%"
},
"schema": {
- "$ref": "http://json-schema.org/draft-04/schema#",
+ "$ref": "http://json-schema.org/draft-07/schema#",
"description": "%json.schemas.schema.desc%"
}
}
@@ -100,12 +100,11 @@
}
},
"dependencies": {
- "vscode-extension-telemetry": "0.0.17",
- "vscode-languageclient": "^4.1.4",
- "vscode-languageserver-protocol-foldingprovider": "^2.0.1",
- "vscode-nls": "^3.2.2"
+ "vscode-extension-telemetry": "0.0.18",
+ "vscode-languageclient": "^5.1.0-next.9",
+ "vscode-nls": "^4.0.0"
},
"devDependencies": {
- "@types/node": "7.0.43"
+ "@types/node": "^8.10.25"
}
}
diff --git a/extensions/json-language-features/package.nls.json b/extensions/json-language-features/package.nls.json
index f9d52e8ebcf..943de414e15 100644
--- a/extensions/json-language-features/package.nls.json
+++ b/extensions/json-language-features/package.nls.json
@@ -6,7 +6,7 @@
"json.schemas.fileMatch.desc": "An array of file patterns to match against when resolving JSON files to schemas.",
"json.schemas.fileMatch.item.desc": "A file pattern that can contain '*' to match against when resolving JSON files to schemas.",
"json.schemas.schema.desc": "The schema definition for the given URL. The schema only needs to be provided to avoid accesses to the schema URL.",
- "json.format.enable.desc": "Enable/disable default JSON formatter (requires restart)",
+ "json.format.enable.desc": "Enable/disable default JSON formatter",
"json.tracing.desc": "Traces the communication between VS Code and the JSON language server.",
"json.colorDecorators.enable.desc": "Enables or disables color decorators",
"json.colorDecorators.enable.deprecationMessage": "The setting `json.colorDecorators.enable` has been deprecated in favor of `editor.colorDecorators`."
diff --git a/extensions/json-language-features/server/build/filesFillIn.js b/extensions/json-language-features/server/build/filesFillIn.js
new file mode 100644
index 00000000000..906617384e0
--- /dev/null
+++ b/extensions/json-language-features/server/build/filesFillIn.js
@@ -0,0 +1,5 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+module.exports = {};
\ No newline at end of file
diff --git a/extensions/json-language-features/server/extension.webpack.config.js b/extensions/json-language-features/server/extension.webpack.config.js
new file mode 100644
index 00000000000..1f350b9159c
--- /dev/null
+++ b/extensions/json-language-features/server/extension.webpack.config.js
@@ -0,0 +1,38 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+//@ts-check
+
+'use strict';
+
+const withDefaults = require('../../shared.webpack.config');
+const path = require('path');
+var webpack = require('webpack');
+
+module.exports = withDefaults({
+ context: path.join(__dirname),
+ entry: {
+ extension: './src/jsonServerMain.ts',
+ },
+ resolve: {
+ mainFields: ['module', 'main'],
+ extensions: ['.ts', '.js'] // support ts-files and js-files
+ },
+ output: {
+ filename: 'jsonServerMain.js',
+ path: path.join(__dirname, 'dist'),
+ libraryTarget: "commonjs",
+ },
+ externals: {
+ "vscode-nls": 'commonjs vscode-nls',
+ },
+ plugins: [
+ new webpack.NormalModuleReplacementPlugin(
+ /(\/|\\)vscode-languageserver(\/|\\)lib(\/|\\)files\.js/,
+ require.resolve('./build/filesFillIn')
+ ),
+ new webpack.IgnorePlugin(/vertx/)
+ ],
+});
diff --git a/extensions/json-language-features/server/package.json b/extensions/json-language-features/server/package.json
index 8ae80565173..5d0708d1af2 100644
--- a/extensions/json-language-features/server/package.json
+++ b/extensions/json-language-features/server/package.json
@@ -10,18 +10,18 @@
"bin": {
"vscode-json-languageserver": "./bin/vscode-json-languageserver"
},
+ "main": "./out/jsonServerMain",
"dependencies": {
- "jsonc-parser": "^2.0.0-next.1",
- "request-light": "^0.2.2",
- "vscode-json-languageservice": "^3.1.2-next.3",
- "vscode-languageserver": "^4.1.3",
- "vscode-languageserver-protocol-foldingprovider": "^2.0.1",
- "vscode-nls": "^3.2.2",
- "vscode-uri": "^1.0.3"
+ "jsonc-parser": "^2.0.2",
+ "request-light": "^0.2.3",
+ "vscode-json-languageservice": "^3.1.6",
+ "vscode-languageserver": "^5.1.0-next.3",
+ "vscode-nls": "^4.0.0",
+ "vscode-uri": "^1.0.6"
},
"devDependencies": {
"@types/mocha": "2.2.33",
- "@types/node": "7.0.43"
+ "@types/node": "^8.10.25"
},
"scripts": {
"prepublishOnly": "npm run clean && npm run test",
diff --git a/extensions/json-language-features/server/src/jsonServerMain.ts b/extensions/json-language-features/server/src/jsonServerMain.ts
index 2fa7619d1ff..c152a7ac137 100644
--- a/extensions/json-language-features/server/src/jsonServerMain.ts
+++ b/extensions/json-language-features/server/src/jsonServerMain.ts
@@ -19,8 +19,6 @@ import { formatError, runSafe, runSafeAsync } from './utils/runner';
import { JSONDocument, JSONSchema, getLanguageService, DocumentLanguageSettings, SchemaConfiguration } from 'vscode-json-languageservice';
import { getLanguageModelCache } from './languageModelCache';
-import { FoldingRangeRequest, FoldingRangeServerCapabilities } from 'vscode-languageserver-protocol-foldingprovider';
-
interface ISchemaAssociations {
[pattern: string]: string[];
}
@@ -61,6 +59,7 @@ documents.listen(connection);
let clientSnippetSupport = false;
let clientDynamicRegisterSupport = false;
let foldingRangeLimit = Number.MAX_VALUE;
+let hierarchicalDocumentSymbolSupport = false;
// After the server has started the client sends an initialize request. The server receives
// in the passed params the rootPath of the workspace plus the client capabilities.
@@ -81,7 +80,8 @@ connection.onInitialize((params: InitializeParams): InitializeResult => {
clientSnippetSupport = getClientCapability('textDocument.completion.completionItem.snippetSupport', false);
clientDynamicRegisterSupport = getClientCapability('workspace.symbol.dynamicRegistration', false);
foldingRangeLimit = getClientCapability('textDocument.foldingRange.rangeLimit', Number.MAX_VALUE);
- const capabilities: ServerCapabilities & FoldingRangeServerCapabilities = {
+ hierarchicalDocumentSymbolSupport = getClientCapability('textDocument.documentSymbol.hierarchicalDocumentSymbolSupport', false);
+ const capabilities: ServerCapabilities = {
// Tell the client that the server works in FULL text document sync mode
textDocumentSync: documents.syncKind,
completionProvider: clientSnippetSupport ? { resolveProvider: true, triggerCharacters: ['"', ':'] } : void 0,
@@ -344,7 +344,11 @@ connection.onDocumentSymbol((documentSymbolParams, token) => {
const document = documents.get(documentSymbolParams.textDocument.uri);
if (document) {
const jsonDocument = getJSONDocument(document);
- return languageService.findDocumentSymbols(document, jsonDocument);
+ if (hierarchicalDocumentSymbolSupport) {
+ return languageService.findDocumentSymbols2(document, jsonDocument);
+ } else {
+ return languageService.findDocumentSymbols(document, jsonDocument);
+ }
}
return [];
}, [], `Error while computing document symbols for ${documentSymbolParams.textDocument.uri}`, token);
@@ -382,7 +386,7 @@ connection.onColorPresentation((params, token) => {
}, [], `Error while computing color presentations for ${params.textDocument.uri}`, token);
});
-connection.onRequest(FoldingRangeRequest.type, (params, token) => {
+connection.onFoldingRanges((params, token) => {
return runSafe(() => {
const document = documents.get(params.textDocument.uri);
if (document) {
diff --git a/extensions/json-language-features/server/yarn.lock b/extensions/json-language-features/server/yarn.lock
index ce5677e6ae0..7ad4e279765 100644
--- a/extensions/json-language-features/server/yarn.lock
+++ b/extensions/json-language-features/server/yarn.lock
@@ -6,9 +6,9 @@
version "2.2.33"
resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.33.tgz#d79a0061ec270379f4d9e225f4096fb436669def"
-"@types/node@7.0.43":
- version "7.0.43"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.43.tgz#a187e08495a075f200ca946079c914e1a5fe962c"
+"@types/node@^8.10.25":
+ version "8.10.25"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.25.tgz#801fe4e39372cef18f268db880a5fbfcf71adc7e"
agent-base@4, agent-base@^4.1.0:
version "4.1.2"
@@ -16,13 +16,7 @@ agent-base@4, agent-base@^4.1.0:
dependencies:
es6-promisify "^5.0.0"
-debug@2:
- version "2.6.9"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
- dependencies:
- ms "2.0.0"
-
-debug@^3.1.0:
+debug@3.1.0, debug@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
dependencies:
@@ -38,90 +32,83 @@ es6-promisify@^5.0.0:
dependencies:
es6-promise "^4.0.3"
-http-proxy-agent@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.0.0.tgz#46482a2f0523a4d6082551709f469cb3e4a85ff4"
+http-proxy-agent@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405"
dependencies:
agent-base "4"
- debug "2"
+ debug "3.1.0"
-https-proxy-agent@2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.1.1.tgz#a7ce4382a1ba8266ee848578778122d491260fd9"
+https-proxy-agent@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0"
dependencies:
agent-base "^4.1.0"
debug "^3.1.0"
-jsonc-parser@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-2.0.0.tgz#62ff087a7e753875febf3c55f1fc0cd737c36b5a"
+jsonc-parser@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-2.0.1.tgz#9d23cd2709714fff508a1a6679d82135bee1ae60"
-jsonc-parser@^2.0.0-next.1:
- version "2.0.0-next.1"
- resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-2.0.0-next.1.tgz#445a824f765a96abfbb286d759a9b1d226b18088"
+jsonc-parser@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-2.0.2.tgz#42fcf56d70852a043fadafde51ddb4a85649978d"
ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
-request-light@^0.2.2:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/request-light/-/request-light-0.2.2.tgz#53e48af32ad1514e45221ea5ece5ce782720f712"
+request-light@^0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/request-light/-/request-light-0.2.3.tgz#a18635ec6dd92f8705c019c42ef645f684d94f7e"
dependencies:
- http-proxy-agent "2.0.0"
- https-proxy-agent "2.1.1"
- vscode-nls "^2.0.2"
-
-vscode-json-languageservice@^3.1.2-next.3:
- version "3.1.2-next.3"
- resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-3.1.2-next.3.tgz#cc0902148f898b413987fb1b4c4a9e7fc1a79c78"
- dependencies:
- jsonc-parser "^2.0.0"
- vscode-languageserver-types "^3.7.2"
+ http-proxy-agent "^2.1.0"
+ https-proxy-agent "^2.2.1"
vscode-nls "^3.2.2"
- vscode-uri "^1.0.3"
+
+vscode-json-languageservice@^3.1.6:
+ version "3.1.6"
+ resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-3.1.6.tgz#272e21eb9abcefe6c1ed38be141f0a76d5ddf0cd"
+ dependencies:
+ jsonc-parser "^2.0.1"
+ vscode-languageserver-types "^3.12.0"
+ vscode-nls "^3.2.4"
+ vscode-uri "^1.0.6"
vscode-jsonrpc@^3.6.2:
version "3.6.2"
resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-3.6.2.tgz#3b5eef691159a15556ecc500e9a8a0dd143470c8"
-vscode-languageserver-protocol-foldingprovider@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol-foldingprovider/-/vscode-languageserver-protocol-foldingprovider-2.0.1.tgz#051d0d9e58d1b79dc4681acd48f21797f5515bfd"
- dependencies:
- vscode-languageserver-protocol "^3.7.2"
- vscode-languageserver-types "^3.7.2"
-
-vscode-languageserver-protocol@^3.7.2:
- version "3.7.2"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.7.2.tgz#df58621c032139010888b6a9ddc969423f9ba9d6"
+vscode-languageserver-protocol@^3.12.0:
+ version "3.12.0"
+ resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.12.0.tgz#5b23501292abad88f0463b01e83ff98e64a37652"
dependencies:
vscode-jsonrpc "^3.6.2"
- vscode-languageserver-types "^3.7.2"
+ vscode-languageserver-types "^3.12.0"
-vscode-languageserver-types@^3.7.2:
- version "3.7.2"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.7.2.tgz#aad8846f8e3e27962648554de5a8417e358f34eb"
+vscode-languageserver-types@^3.12.0:
+ version "3.12.0"
+ resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.12.0.tgz#f96051381b6a050b7175b37d6cb5d2f2eb64b944"
-vscode-languageserver@^4.1.3:
- version "4.1.3"
- resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-4.1.3.tgz#937d37c955b6b9c2409388413cd6f54d1eb9fe7d"
+vscode-languageserver@^5.1.0-next.3:
+ version "5.1.0-next.3"
+ resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-5.1.0-next.3.tgz#352ce1f0f8bdfc47c1236277ebe865e25b087ccd"
dependencies:
- vscode-languageserver-protocol "^3.7.2"
- vscode-uri "^1.0.1"
+ vscode-languageserver-protocol "^3.12.0"
+ vscode-uri "^1.0.5"
-vscode-nls@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-2.0.2.tgz#808522380844b8ad153499af5c3b03921aea02da"
+vscode-nls@^3.2.2, vscode-nls@^3.2.4:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.4.tgz#2166b4183c8aea884d20727f5449e62be69fd398"
-vscode-nls@^3.2.2:
- version "3.2.2"
- resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.2.tgz#3817eca5b985c2393de325197cf4e15eb2aa5350"
+vscode-nls@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-4.0.0.tgz#4001c8a6caba5cedb23a9c5ce1090395c0e44002"
-vscode-uri@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-1.0.1.tgz#11a86befeac3c4aa3ec08623651a3c81a6d0bbc8"
+vscode-uri@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-1.0.5.tgz#3b899a8ef71c37f3054d79bdbdda31c7bf36f20d"
-vscode-uri@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-1.0.3.tgz#631bdbf716dccab0e65291a8dc25c23232085a52"
+vscode-uri@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-1.0.6.tgz#6b8f141b0bbc44ad7b07e94f82f168ac7608ad4d"
diff --git a/extensions/json-language-features/yarn.lock b/extensions/json-language-features/yarn.lock
index 36c0c89cd28..6c37fe1c098 100644
--- a/extensions/json-language-features/yarn.lock
+++ b/extensions/json-language-features/yarn.lock
@@ -2,9 +2,9 @@
# yarn lockfile v1
-"@types/node@7.0.43":
- version "7.0.43"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.43.tgz#a187e08495a075f200ca946079c914e1a5fe962c"
+"@types/node@^8.10.25":
+ version "8.10.25"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.25.tgz#801fe4e39372cef18f268db880a5fbfcf71adc7e"
applicationinsights@1.0.1:
version "1.0.1"
@@ -28,43 +28,41 @@ semver@^5.3.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
-vscode-extension-telemetry@0.0.17:
- version "0.0.17"
- resolved "https://registry.yarnpkg.com/vscode-extension-telemetry/-/vscode-extension-telemetry-0.0.17.tgz#15123e7edb34e7b9724b6056f54a869bbb922cb7"
+semver@^5.5.0:
+ version "5.5.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477"
+
+vscode-extension-telemetry@0.0.18:
+ version "0.0.18"
+ resolved "https://registry.yarnpkg.com/vscode-extension-telemetry/-/vscode-extension-telemetry-0.0.18.tgz#602ba20d8c71453aa34533a291e7638f6e5c0327"
dependencies:
applicationinsights "1.0.1"
-vscode-jsonrpc@^3.6.2:
- version "3.6.2"
- resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-3.6.2.tgz#3b5eef691159a15556ecc500e9a8a0dd143470c8"
+vscode-jsonrpc@^3.7.0-next.1:
+ version "3.7.0-next.1"
+ resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-3.7.0-next.1.tgz#e7521cd8135006ba8bf57ebcedbf5b03ce17b23e"
-vscode-languageclient@^4.1.4:
- version "4.1.4"
- resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-4.1.4.tgz#fff1a6bca4714835dca7fce35bc4ce81442fdf2c"
+vscode-languageclient@^5.1.0-next.9:
+ version "5.1.0-next.9"
+ resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-5.1.0-next.9.tgz#fe56c523637c118f7b262952b889f760223ab75a"
dependencies:
- vscode-languageserver-protocol "^3.7.2"
+ semver "^5.5.0"
+ vscode-languageserver-protocol "^3.13.0-next.2"
-vscode-languageserver-protocol-foldingprovider@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol-foldingprovider/-/vscode-languageserver-protocol-foldingprovider-2.0.1.tgz#051d0d9e58d1b79dc4681acd48f21797f5515bfd"
+vscode-languageserver-protocol@^3.13.0-next.2:
+ version "3.13.0-next.2"
+ resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.13.0-next.2.tgz#7083e50d0d2096ba52de448082445b9c39081fdb"
dependencies:
- vscode-languageserver-protocol "^3.7.2"
- vscode-languageserver-types "^3.7.2"
+ vscode-jsonrpc "^3.7.0-next.1"
+ vscode-languageserver-types "^3.13.0-next.1"
-vscode-languageserver-protocol@^3.7.2:
- version "3.7.2"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.7.2.tgz#df58621c032139010888b6a9ddc969423f9ba9d6"
- dependencies:
- vscode-jsonrpc "^3.6.2"
- vscode-languageserver-types "^3.7.2"
+vscode-languageserver-types@^3.13.0-next.1:
+ version "3.13.0-next.1"
+ resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.13.0-next.1.tgz#dd91b78b13a2a6c7131e8291e3db3183cf566280"
-vscode-languageserver-types@^3.7.2:
- version "3.7.2"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.7.2.tgz#aad8846f8e3e27962648554de5a8417e358f34eb"
-
-vscode-nls@^3.2.2:
- version "3.2.2"
- resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.2.tgz#3817eca5b985c2393de325197cf4e15eb2aa5350"
+vscode-nls@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-4.0.0.tgz#4001c8a6caba5cedb23a9c5ce1090395c0e44002"
zone.js@0.7.6:
version "0.7.6"
diff --git a/extensions/json/build/update-grammars.js b/extensions/json/build/update-grammars.js
new file mode 100644
index 00000000000..d7d92e18258
--- /dev/null
+++ b/extensions/json/build/update-grammars.js
@@ -0,0 +1,41 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+'use strict';
+
+var updateGrammar = require('../../../build/npm/update-grammar');
+
+function adaptJSON(grammar, replacementScope) {
+ grammar.name = 'JSON with comments';
+ grammar.scopeName = `source${replacementScope}`;
+
+ var fixScopeNames = function(rule) {
+ if (typeof rule.name === 'string') {
+ rule.name = rule.name.replace(/\.json/g, replacementScope);
+ }
+ if (typeof rule.contentName === 'string') {
+ rule.contentName = rule.contentName.replace(/\.json/g, replacementScope);
+ }
+ for (var property in rule) {
+ var value = rule[property];
+ if (typeof value === 'object') {
+ fixScopeNames(value);
+ }
+ }
+ };
+
+ var repository = grammar.repository;
+ for (var key in repository) {
+ fixScopeNames(repository[key]);
+ }
+}
+
+var tsGrammarRepo = 'Microsoft/vscode-JSON.tmLanguage';
+updateGrammar.update(tsGrammarRepo, 'JSON.tmLanguage', './syntaxes/JSON.tmLanguage.json');
+updateGrammar.update(tsGrammarRepo, 'JSON.tmLanguage', './syntaxes/JSONC.tmLanguage.json', grammar => adaptJSON(grammar, '.json.comments'));
+
+
+
+
+
diff --git a/extensions/json/package.json b/extensions/json/package.json
index 9ef7b078963..e8dc83372ad 100644
--- a/extensions/json/package.json
+++ b/extensions/json/package.json
@@ -8,7 +8,7 @@
"vscode": "0.10.x"
},
"scripts": {
- "update-grammar": "node ../../build/npm/update-grammar.js Microsoft/vscode-JSON.tmLanguage JSON.tmLanguage ./syntaxes/JSON.tmLanguage.json"
+ "update-grammar": "node ./build/update-grammars.js"
},
"contributes": {
"languages": [
@@ -58,14 +58,14 @@
},
{
"language": "jsonc",
- "scopeName": "source.json",
- "path": "./syntaxes/JSON.tmLanguage.json"
+ "scopeName": "source.json.comments",
+ "path": "./syntaxes/JSONC.tmLanguage.json"
}
],
"jsonValidation": [
{
"fileMatch": "*.schema.json",
- "url": "http://json-schema.org/draft-04/schema#"
+ "url": "http://json-schema.org/draft-07/schema#"
}
]
}
diff --git a/extensions/json/syntaxes/JSONC.tmLanguage.json b/extensions/json/syntaxes/JSONC.tmLanguage.json
new file mode 100644
index 00000000000..50028ef0f35
--- /dev/null
+++ b/extensions/json/syntaxes/JSONC.tmLanguage.json
@@ -0,0 +1,213 @@
+{
+ "information_for_contributors": [
+ "This file has been converted from https://github.com/Microsoft/vscode-JSON.tmLanguage/blob/master/JSON.tmLanguage",
+ "If you want to provide a fix or improvement, please create a pull request against the original repository.",
+ "Once accepted there, we are happy to receive an update request."
+ ],
+ "version": "https://github.com/Microsoft/vscode-JSON.tmLanguage/commit/9bd83f1c252b375e957203f21793316203f61f70",
+ "name": "JSON with comments",
+ "scopeName": "source.json.comments",
+ "patterns": [
+ {
+ "include": "#value"
+ }
+ ],
+ "repository": {
+ "array": {
+ "begin": "\\[",
+ "beginCaptures": {
+ "0": {
+ "name": "punctuation.definition.array.begin.json.comments"
+ }
+ },
+ "end": "\\]",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.array.end.json.comments"
+ }
+ },
+ "name": "meta.structure.array.json.comments",
+ "patterns": [
+ {
+ "include": "#value"
+ },
+ {
+ "match": ",",
+ "name": "punctuation.separator.array.json.comments"
+ },
+ {
+ "match": "[^\\s\\]]",
+ "name": "invalid.illegal.expected-array-separator.json.comments"
+ }
+ ]
+ },
+ "comments": {
+ "patterns": [
+ {
+ "begin": "/\\*\\*(?!/)",
+ "captures": {
+ "0": {
+ "name": "punctuation.definition.comment.json.comments"
+ }
+ },
+ "end": "\\*/",
+ "name": "comment.block.documentation.json.comments"
+ },
+ {
+ "begin": "/\\*",
+ "captures": {
+ "0": {
+ "name": "punctuation.definition.comment.json.comments"
+ }
+ },
+ "end": "\\*/",
+ "name": "comment.block.json.comments"
+ },
+ {
+ "captures": {
+ "1": {
+ "name": "punctuation.definition.comment.json.comments"
+ }
+ },
+ "match": "(//).*$\\n?",
+ "name": "comment.line.double-slash.js"
+ }
+ ]
+ },
+ "constant": {
+ "match": "\\b(?:true|false|null)\\b",
+ "name": "constant.language.json.comments"
+ },
+ "number": {
+ "match": "(?x) # turn on extended mode\n -? # an optional minus\n (?:\n 0 # a zero\n | # ...or...\n [1-9] # a 1-9 character\n \\d* # followed by zero or more digits\n )\n (?:\n (?:\n \\. # a period\n \\d+ # followed by one or more digits\n )?\n (?:\n [eE] # an e character\n [+-]? # followed by an option +/-\n \\d+ # followed by one or more digits\n )? # make exponent optional\n )? # make decimal portion optional",
+ "name": "constant.numeric.json.comments"
+ },
+ "object": {
+ "begin": "\\{",
+ "beginCaptures": {
+ "0": {
+ "name": "punctuation.definition.dictionary.begin.json.comments"
+ }
+ },
+ "end": "\\}",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.dictionary.end.json.comments"
+ }
+ },
+ "name": "meta.structure.dictionary.json.comments",
+ "patterns": [
+ {
+ "comment": "the JSON object key",
+ "include": "#objectkey"
+ },
+ {
+ "include": "#comments"
+ },
+ {
+ "begin": ":",
+ "beginCaptures": {
+ "0": {
+ "name": "punctuation.separator.dictionary.key-value.json.comments"
+ }
+ },
+ "end": "(,)|(?=\\})",
+ "endCaptures": {
+ "1": {
+ "name": "punctuation.separator.dictionary.pair.json.comments"
+ }
+ },
+ "name": "meta.structure.dictionary.value.json.comments",
+ "patterns": [
+ {
+ "comment": "the JSON object value",
+ "include": "#value"
+ },
+ {
+ "match": "[^\\s,]",
+ "name": "invalid.illegal.expected-dictionary-separator.json.comments"
+ }
+ ]
+ },
+ {
+ "match": "[^\\s\\}]",
+ "name": "invalid.illegal.expected-dictionary-separator.json.comments"
+ }
+ ]
+ },
+ "string": {
+ "begin": "\"",
+ "beginCaptures": {
+ "0": {
+ "name": "punctuation.definition.string.begin.json.comments"
+ }
+ },
+ "end": "\"",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.string.end.json.comments"
+ }
+ },
+ "name": "string.quoted.double.json.comments",
+ "patterns": [
+ {
+ "include": "#stringcontent"
+ }
+ ]
+ },
+ "objectkey": {
+ "begin": "\"",
+ "beginCaptures": {
+ "0": {
+ "name": "punctuation.support.type.property-name.begin.json.comments"
+ }
+ },
+ "end": "\"",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.support.type.property-name.end.json.comments"
+ }
+ },
+ "name": "string.json.comments support.type.property-name.json.comments",
+ "patterns": [
+ {
+ "include": "#stringcontent"
+ }
+ ]
+ },
+ "stringcontent": {
+ "patterns": [
+ {
+ "match": "(?x) # turn on extended mode\n \\\\ # a literal backslash\n (?: # ...followed by...\n [\"\\\\/bfnrt] # one of these characters\n | # ...or...\n u # a u\n [0-9a-fA-F]{4}) # and four hex digits",
+ "name": "constant.character.escape.json.comments"
+ },
+ {
+ "match": "\\\\.",
+ "name": "invalid.illegal.unrecognized-string-escape.json.comments"
+ }
+ ]
+ },
+ "value": {
+ "patterns": [
+ {
+ "include": "#constant"
+ },
+ {
+ "include": "#number"
+ },
+ {
+ "include": "#string"
+ },
+ {
+ "include": "#array"
+ },
+ {
+ "include": "#object"
+ },
+ {
+ "include": "#comments"
+ }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/extensions/json/test/colorize-results/test_json.json b/extensions/json/test/colorize-results/test_json.json
index 19641069faa..75561c366d7 100644
--- a/extensions/json/test/colorize-results/test_json.json
+++ b/extensions/json/test/colorize-results/test_json.json
@@ -25,9 +25,9 @@
"c": "//",
"t": "source.json meta.structure.dictionary.json comment.line.double-slash.js punctuation.definition.comment.json",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -36,9 +36,9 @@
"c": " a comment",
"t": "source.json meta.structure.dictionary.json comment.line.double-slash.js",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
diff --git a/extensions/less/package.nls.json b/extensions/less/package.nls.json
index 7010e123b8e..bad671bf059 100644
--- a/extensions/less/package.nls.json
+++ b/extensions/less/package.nls.json
@@ -1,4 +1,4 @@
{
"displayName": "Less Language Basics",
- "description": "Provides syntax highlighting, bracket matching and folding Less files."
+ "description": "Provides syntax highlighting, bracket matching and folding in Less files."
}
\ No newline at end of file
diff --git a/extensions/log/syntaxes/log.tmLanguage.json b/extensions/log/syntaxes/log.tmLanguage.json
index 21f8880e6e2..15cb646dadb 100644
--- a/extensions/log/syntaxes/log.tmLanguage.json
+++ b/extensions/log/syntaxes/log.tmLanguage.json
@@ -4,7 +4,7 @@
"If you want to provide a fix or improvement, please create a pull request against the original repository.",
"Once accepted there, we are happy to receive an update request."
],
- "version": "https://github.com/emilast/vscode-logfile-highlighter/commit/ec0e98bdfbe3b39da175f9f6983aa7a7109acc93",
+ "version": "https://github.com/emilast/vscode-logfile-highlighter/commit/03cb9582024f477f93f3d27c46f7c084b2b14afe",
"name": "Log file",
"scopeName": "text.log",
"patterns": [
@@ -86,7 +86,7 @@
"name": "constant.language log.constant"
},
{
- "match": "\\b([\\w-]+\\.)+([\\w-])+\\b",
+ "match": "(?= 40800)
+
+ok := ok
+$(info Braces {} in parentheses ({}): ${ok})
+${info Parentheses () in braces {()}: $(ok)}
+
+ifeq ("${ok}", "skip")
+ $(ok))}
+ ${ok}})
+endif
diff --git a/extensions/make/test/colorize-results/makefile.json b/extensions/make/test/colorize-results/makefile.json
index 03fbc6814fb..1e2cee1cb1c 100644
--- a/extensions/make/test/colorize-results/makefile.json
+++ b/extensions/make/test/colorize-results/makefile.json
@@ -300,9 +300,9 @@
"c": "#",
"t": "source.makefile meta.scope.target.makefile meta.scope.prerequisites.makefile comment.line.number-sign.makefile punctuation.definition.comment.makefile",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -311,9 +311,9 @@
"c": " This is a long ",
"t": "source.makefile meta.scope.target.makefile meta.scope.prerequisites.makefile comment.line.number-sign.makefile",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -324,7 +324,7 @@
"r": {
"dark_plus": "constant.character.escape: #D7BA7D",
"light_plus": "constant.character.escape: #FF0000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "constant.character: #569CD6"
}
@@ -333,9 +333,9 @@
"c": " comment inside prerequisites.",
"t": "source.makefile meta.scope.target.makefile meta.scope.prerequisites.makefile comment.line.number-sign.makefile",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -355,9 +355,9 @@
"c": "#",
"t": "source.makefile comment.line.number-sign.makefile punctuation.definition.comment.makefile",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -366,9 +366,9 @@
"c": " There are a building steps ",
"t": "source.makefile comment.line.number-sign.makefile",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -379,7 +379,7 @@
"r": {
"dark_plus": "constant.character.escape: #D7BA7D",
"light_plus": "constant.character.escape: #FF0000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "constant.character: #569CD6"
}
@@ -388,9 +388,9 @@
"c": "\tbelow. And the tab is at the beginning of this line.",
"t": "source.makefile comment.line.number-sign.makefile",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -692,6 +692,94 @@
"hc_black": "default: #FFFFFF"
}
},
+ {
+ "c": "all",
+ "t": "source.makefile meta.scope.target.makefile entity.name.function.target.makefile",
+ "r": {
+ "dark_plus": "entity.name.function: #DCDCAA",
+ "light_plus": "entity.name.function: #795E26",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "entity.name.function: #DCDCAA"
+ }
+ },
+ {
+ "c": ":",
+ "t": "source.makefile meta.scope.target.makefile punctuation.separator.key-value.makefile",
+ "r": {
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
+ }
+ },
+ {
+ "c": "\t",
+ "t": "source.makefile punctuation.whitespace.comment.leading.makefile",
+ "r": {
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
+ }
+ },
+ {
+ "c": "#",
+ "t": "source.makefile comment.line.number-sign.makefile punctuation.definition.comment.makefile",
+ "r": {
+ "dark_plus": "comment: #6A9955",
+ "light_plus": "comment: #008000",
+ "dark_vs": "comment: #6A9955",
+ "light_vs": "comment: #008000",
+ "hc_black": "comment: #7CA668"
+ }
+ },
+ {
+ "c": " \"$$\" in a shell means to escape makefile's variable substitution.",
+ "t": "source.makefile comment.line.number-sign.makefile",
+ "r": {
+ "dark_plus": "comment: #6A9955",
+ "light_plus": "comment: #008000",
+ "dark_vs": "comment: #6A9955",
+ "light_vs": "comment: #008000",
+ "hc_black": "comment: #7CA668"
+ }
+ },
+ {
+ "c": "\tsome_shell_var=",
+ "t": "source.makefile",
+ "r": {
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
+ }
+ },
+ {
+ "c": "$$",
+ "t": "source.makefile variable.language.makefile",
+ "r": {
+ "dark_plus": "variable.language: #569CD6",
+ "light_plus": "variable.language: #0000FF",
+ "dark_vs": "variable.language: #569CD6",
+ "light_vs": "variable.language: #0000FF",
+ "hc_black": "variable: #9CDCFE"
+ }
+ },
+ {
+ "c": "(sed -nre 's/some regex with (group)/\\1/p')",
+ "t": "source.makefile",
+ "r": {
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
+ }
+ },
{
"c": "define",
"t": "source.makefile meta.scope.conditional.makefile keyword.control.define.makefile",
@@ -1572,6 +1660,545 @@
"hc_black": "string: #CE9178"
}
},
+ {
+ "c": "endif",
+ "t": "source.makefile meta.scope.conditional.makefile keyword.control.endif.makefile",
+ "r": {
+ "dark_plus": "keyword.control: #C586C0",
+ "light_plus": "keyword.control: #AF00DB",
+ "dark_vs": "keyword.control: #569CD6",
+ "light_vs": "keyword.control: #0000FF",
+ "hc_black": "keyword.control: #C586C0"
+ }
+ },
+ {
+ "c": "CXXVER_GE480",
+ "t": "source.makefile variable.other.makefile",
+ "r": {
+ "dark_plus": "variable: #9CDCFE",
+ "light_plus": "variable: #001080",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "variable: #9CDCFE"
+ }
+ },
+ {
+ "c": " ",
+ "t": "source.makefile",
+ "r": {
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
+ }
+ },
+ {
+ "c": ":=",
+ "t": "source.makefile punctuation.separator.key-value.makefile",
+ "r": {
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
+ }
+ },
+ {
+ "c": " ",
+ "t": "source.makefile",
+ "r": {
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
+ }
+ },
+ {
+ "c": "$(",
+ "t": "source.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "r": {
+ "dark_plus": "string: #CE9178",
+ "light_plus": "string: #A31515",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "string: #CE9178"
+ }
+ },
+ {
+ "c": "shell",
+ "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile support.function.shell.makefile",
+ "r": {
+ "dark_plus": "support.function: #DCDCAA",
+ "light_plus": "support.function: #795E26",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "support.function: #DCDCAA"
+ }
+ },
+ {
+ "c": " expr `",
+ "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile",
+ "r": {
+ "dark_plus": "string: #CE9178",
+ "light_plus": "string: #A31515",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "string: #CE9178"
+ }
+ },
+ {
+ "c": "$(",
+ "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "r": {
+ "dark_plus": "string: #CE9178",
+ "light_plus": "string: #A31515",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "string: #CE9178"
+ }
+ },
+ {
+ "c": "CXX",
+ "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile string.interpolated.makefile variable.other.makefile",
+ "r": {
+ "dark_plus": "variable: #9CDCFE",
+ "light_plus": "variable: #001080",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "variable: #9CDCFE"
+ }
+ },
+ {
+ "c": ")",
+ "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "r": {
+ "dark_plus": "string: #CE9178",
+ "light_plus": "string: #A31515",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "string: #CE9178"
+ }
+ },
+ {
+ "c": " -dumpversion | sed -e 's/\\.\\([0-9][0-9]\\)/\\1/g' -e 's/\\.\\([0-9]\\)/0\\1/g' -e 's/^[0-9]\\{3,4\\}",
+ "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile",
+ "r": {
+ "dark_plus": "string: #CE9178",
+ "light_plus": "string: #A31515",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "string: #CE9178"
+ }
+ },
+ {
+ "c": "$$",
+ "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile variable.language.makefile",
+ "r": {
+ "dark_plus": "variable.language: #569CD6",
+ "light_plus": "variable.language: #0000FF",
+ "dark_vs": "variable.language: #569CD6",
+ "light_vs": "variable.language: #0000FF",
+ "hc_black": "variable: #9CDCFE"
+ }
+ },
+ {
+ "c": "/&00/'` \\>= 40800",
+ "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile",
+ "r": {
+ "dark_plus": "string: #CE9178",
+ "light_plus": "string: #A31515",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "string: #CE9178"
+ }
+ },
+ {
+ "c": ")",
+ "t": "source.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "r": {
+ "dark_plus": "string: #CE9178",
+ "light_plus": "string: #A31515",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "string: #CE9178"
+ }
+ },
+ {
+ "c": "ok",
+ "t": "source.makefile variable.other.makefile",
+ "r": {
+ "dark_plus": "variable: #9CDCFE",
+ "light_plus": "variable: #001080",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "variable: #9CDCFE"
+ }
+ },
+ {
+ "c": " ",
+ "t": "source.makefile",
+ "r": {
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
+ }
+ },
+ {
+ "c": ":=",
+ "t": "source.makefile punctuation.separator.key-value.makefile",
+ "r": {
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
+ }
+ },
+ {
+ "c": " ok",
+ "t": "source.makefile",
+ "r": {
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
+ }
+ },
+ {
+ "c": "$(",
+ "t": "source.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "r": {
+ "dark_plus": "string: #CE9178",
+ "light_plus": "string: #A31515",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "string: #CE9178"
+ }
+ },
+ {
+ "c": "info",
+ "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile support.function.info.makefile",
+ "r": {
+ "dark_plus": "support.function: #DCDCAA",
+ "light_plus": "support.function: #795E26",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "support.function: #DCDCAA"
+ }
+ },
+ {
+ "c": " Braces {} in parentheses ({}): ",
+ "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile",
+ "r": {
+ "dark_plus": "string: #CE9178",
+ "light_plus": "string: #A31515",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "string: #CE9178"
+ }
+ },
+ {
+ "c": "${",
+ "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "r": {
+ "dark_plus": "string: #CE9178",
+ "light_plus": "string: #A31515",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "string: #CE9178"
+ }
+ },
+ {
+ "c": "ok",
+ "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile string.interpolated.makefile variable.other.makefile",
+ "r": {
+ "dark_plus": "variable: #9CDCFE",
+ "light_plus": "variable: #001080",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "variable: #9CDCFE"
+ }
+ },
+ {
+ "c": "}",
+ "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "r": {
+ "dark_plus": "string: #CE9178",
+ "light_plus": "string: #A31515",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "string: #CE9178"
+ }
+ },
+ {
+ "c": ")",
+ "t": "source.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "r": {
+ "dark_plus": "string: #CE9178",
+ "light_plus": "string: #A31515",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "string: #CE9178"
+ }
+ },
+ {
+ "c": "${",
+ "t": "source.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "r": {
+ "dark_plus": "string: #CE9178",
+ "light_plus": "string: #A31515",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "string: #CE9178"
+ }
+ },
+ {
+ "c": "info",
+ "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile support.function.info.makefile",
+ "r": {
+ "dark_plus": "support.function: #DCDCAA",
+ "light_plus": "support.function: #795E26",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "support.function: #DCDCAA"
+ }
+ },
+ {
+ "c": " Parentheses () in braces {()}: ",
+ "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile",
+ "r": {
+ "dark_plus": "string: #CE9178",
+ "light_plus": "string: #A31515",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "string: #CE9178"
+ }
+ },
+ {
+ "c": "$(",
+ "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "r": {
+ "dark_plus": "string: #CE9178",
+ "light_plus": "string: #A31515",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "string: #CE9178"
+ }
+ },
+ {
+ "c": "ok",
+ "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile string.interpolated.makefile variable.other.makefile",
+ "r": {
+ "dark_plus": "variable: #9CDCFE",
+ "light_plus": "variable: #001080",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "variable: #9CDCFE"
+ }
+ },
+ {
+ "c": ")",
+ "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "r": {
+ "dark_plus": "string: #CE9178",
+ "light_plus": "string: #A31515",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "string: #CE9178"
+ }
+ },
+ {
+ "c": "}",
+ "t": "source.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "r": {
+ "dark_plus": "string: #CE9178",
+ "light_plus": "string: #A31515",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "string: #CE9178"
+ }
+ },
+ {
+ "c": "ifeq",
+ "t": "source.makefile meta.scope.conditional.makefile keyword.control.ifeq.makefile",
+ "r": {
+ "dark_plus": "keyword.control: #C586C0",
+ "light_plus": "keyword.control: #AF00DB",
+ "dark_vs": "keyword.control: #569CD6",
+ "light_vs": "keyword.control: #0000FF",
+ "hc_black": "keyword.control: #C586C0"
+ }
+ },
+ {
+ "c": " (\"",
+ "t": "source.makefile meta.scope.conditional.makefile meta.scope.condition.makefile",
+ "r": {
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
+ }
+ },
+ {
+ "c": "${",
+ "t": "source.makefile meta.scope.conditional.makefile meta.scope.condition.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "r": {
+ "dark_plus": "string: #CE9178",
+ "light_plus": "string: #A31515",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "string: #CE9178"
+ }
+ },
+ {
+ "c": "ok",
+ "t": "source.makefile meta.scope.conditional.makefile meta.scope.condition.makefile string.interpolated.makefile variable.other.makefile",
+ "r": {
+ "dark_plus": "variable: #9CDCFE",
+ "light_plus": "variable: #001080",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "variable: #9CDCFE"
+ }
+ },
+ {
+ "c": "}",
+ "t": "source.makefile meta.scope.conditional.makefile meta.scope.condition.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "r": {
+ "dark_plus": "string: #CE9178",
+ "light_plus": "string: #A31515",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "string: #CE9178"
+ }
+ },
+ {
+ "c": "\", \"skip\")",
+ "t": "source.makefile meta.scope.conditional.makefile meta.scope.condition.makefile",
+ "r": {
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
+ }
+ },
+ {
+ "c": " ",
+ "t": "source.makefile meta.scope.conditional.makefile",
+ "r": {
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
+ }
+ },
+ {
+ "c": "$(",
+ "t": "source.makefile meta.scope.conditional.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "r": {
+ "dark_plus": "string: #CE9178",
+ "light_plus": "string: #A31515",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "string: #CE9178"
+ }
+ },
+ {
+ "c": "ok",
+ "t": "source.makefile meta.scope.conditional.makefile string.interpolated.makefile variable.other.makefile",
+ "r": {
+ "dark_plus": "variable: #9CDCFE",
+ "light_plus": "variable: #001080",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "variable: #9CDCFE"
+ }
+ },
+ {
+ "c": ")",
+ "t": "source.makefile meta.scope.conditional.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "r": {
+ "dark_plus": "string: #CE9178",
+ "light_plus": "string: #A31515",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "string: #CE9178"
+ }
+ },
+ {
+ "c": ")}",
+ "t": "source.makefile meta.scope.conditional.makefile",
+ "r": {
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
+ }
+ },
+ {
+ "c": " ",
+ "t": "source.makefile meta.scope.conditional.makefile",
+ "r": {
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
+ }
+ },
+ {
+ "c": "${",
+ "t": "source.makefile meta.scope.conditional.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "r": {
+ "dark_plus": "string: #CE9178",
+ "light_plus": "string: #A31515",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "string: #CE9178"
+ }
+ },
+ {
+ "c": "ok",
+ "t": "source.makefile meta.scope.conditional.makefile string.interpolated.makefile variable.other.makefile",
+ "r": {
+ "dark_plus": "variable: #9CDCFE",
+ "light_plus": "variable: #001080",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "variable: #9CDCFE"
+ }
+ },
+ {
+ "c": "}",
+ "t": "source.makefile meta.scope.conditional.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "r": {
+ "dark_plus": "string: #CE9178",
+ "light_plus": "string: #A31515",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "string: #CE9178"
+ }
+ },
+ {
+ "c": "})",
+ "t": "source.makefile meta.scope.conditional.makefile",
+ "r": {
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
+ }
+ },
{
"c": "endif",
"t": "source.makefile meta.scope.conditional.makefile keyword.control.endif.makefile",
diff --git a/extensions/markdown-basics/language-configuration.json b/extensions/markdown-basics/language-configuration.json
index 23a25ede9cc..ccddf061e75 100644
--- a/extensions/markdown-basics/language-configuration.json
+++ b/extensions/markdown-basics/language-configuration.json
@@ -36,7 +36,9 @@
"surroundingPairs": [
["(", ")"],
["[", "]"],
- ["`", "`"]
+ ["`", "`"],
+ ["_", "_"],
+ ["*", "*"]
],
"folding": {
"offSide": true,
diff --git a/extensions/markdown-basics/package.json b/extensions/markdown-basics/package.json
index a091ad8ea29..a81c7625531 100644
--- a/extensions/markdown-basics/package.json
+++ b/extensions/markdown-basics/package.json
@@ -17,9 +17,14 @@
],
"extensions": [
".md",
+ ".mkd",
+ ".mdwn",
".mdown",
".markdown",
- ".markdn"
+ ".markdn",
+ ".mdtxt",
+ ".mdtext",
+ ".workbook"
],
"configuration": "./language-configuration.json"
}
@@ -86,4 +91,4 @@
"scripts": {
"update-grammar": "node ../../build/npm/update-grammar.js microsoft/vscode-markdown-tm-grammar syntaxes/markdown.tmLanguage ./syntaxes/markdown.tmLanguage.json"
}
-}
\ No newline at end of file
+}
diff --git a/extensions/markdown-basics/snippets/markdown.json b/extensions/markdown-basics/snippets/markdown.json
index 6bba2591d10..4a5152c18c8 100644
--- a/extensions/markdown-basics/snippets/markdown.json
+++ b/extensions/markdown-basics/snippets/markdown.json
@@ -60,12 +60,12 @@
},
"Insert link": {
"prefix": "link",
- "body": "[${1:text}](http://${2:link})$0",
+ "body": "[${1:text}](https://${2:link})$0",
"description": "Insert link"
},
"Insert image": {
"prefix": "image",
- "body": "$0",
+ "body": "$0",
"description": "Insert image"
}
}
diff --git a/extensions/markdown-basics/syntaxes/markdown.tmLanguage.json b/extensions/markdown-basics/syntaxes/markdown.tmLanguage.json
index 52b3dcd3ca9..d49d0688467 100644
--- a/extensions/markdown-basics/syntaxes/markdown.tmLanguage.json
+++ b/extensions/markdown-basics/syntaxes/markdown.tmLanguage.json
@@ -4,7 +4,7 @@
"If you want to provide a fix or improvement, please create a pull request against the original repository.",
"Once accepted there, we are happy to receive an update request."
],
- "version": "https://github.com/microsoft/vscode-markdown-tm-grammar/commit/ab08007feb924996eff9399c169f171fa17899ca",
+ "version": "https://github.com/microsoft/vscode-markdown-tm-grammar/commit/4504240cdb13a4640f64fc98a0adb858226a879e",
"name": "Markdown",
"scopeName": "text.html.markdown",
"patterns": [
@@ -722,7 +722,7 @@
"contentName": "meta.embedded.block.dosbatch",
"patterns": [
{
- "include": "source.dosbatch"
+ "include": "source.batchfile"
}
]
}
@@ -1994,7 +1994,7 @@
"while": "(^|\\G)([ ]{4}|\\t)"
},
"separator": {
- "match": "(^|\\G)[ ]{0,3}([*-_])([ ]{0,2}\\2){2,}[ \\t]*$\\n?",
+ "match": "(^|\\G)[ ]{0,3}([\\*\\-\\_])([ ]{0,2}\\2){2,}[ \\t]*$\\n?",
"name": "meta.separator.markdown"
}
}
diff --git a/extensions/markdown-basics/test/colorize-results/test-33886_md.json b/extensions/markdown-basics/test/colorize-results/test-33886_md.json
index 185d172e8af..179172a5738 100644
--- a/extensions/markdown-basics/test/colorize-results/test-33886_md.json
+++ b/extensions/markdown-basics/test/colorize-results/test-33886_md.json
@@ -34,7 +34,7 @@
},
{
"c": "<",
- "t": "text.html.markdown meta.tag.block.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.markdown meta.tag.structure.pre.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -45,7 +45,7 @@
},
{
"c": "pre",
- "t": "text.html.markdown meta.tag.block.any.html entity.name.tag.block.any.html",
+ "t": "text.html.markdown meta.tag.structure.pre.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -56,7 +56,7 @@
},
{
"c": ">",
- "t": "text.html.markdown meta.tag.block.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.markdown meta.tag.structure.pre.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -67,7 +67,7 @@
},
{
"c": "<",
- "t": "text.html.markdown meta.tag.inline.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.markdown meta.tag.inline.code.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -78,7 +78,7 @@
},
{
"c": "code",
- "t": "text.html.markdown meta.tag.inline.any.html entity.name.tag.inline.any.html",
+ "t": "text.html.markdown meta.tag.inline.code.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -89,7 +89,7 @@
},
{
"c": ">",
- "t": "text.html.markdown meta.tag.inline.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.markdown meta.tag.inline.code.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -111,7 +111,7 @@
},
{
"c": "",
- "t": "text.html.markdown meta.paragraph.markdown meta.tag.inline.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.markdown meta.paragraph.markdown meta.tag.inline.code.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -122,7 +122,7 @@
},
{
"c": "code",
- "t": "text.html.markdown meta.paragraph.markdown meta.tag.inline.any.html entity.name.tag.inline.any.html",
+ "t": "text.html.markdown meta.paragraph.markdown meta.tag.inline.code.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -133,7 +133,7 @@
},
{
"c": ">",
- "t": "text.html.markdown meta.paragraph.markdown meta.tag.inline.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.markdown meta.paragraph.markdown meta.tag.inline.code.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -144,7 +144,7 @@
},
{
"c": "",
- "t": "text.html.markdown meta.paragraph.markdown meta.tag.block.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.markdown meta.paragraph.markdown meta.tag.structure.pre.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -155,7 +155,7 @@
},
{
"c": "pre",
- "t": "text.html.markdown meta.paragraph.markdown meta.tag.block.any.html entity.name.tag.block.any.html",
+ "t": "text.html.markdown meta.paragraph.markdown meta.tag.structure.pre.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -166,7 +166,7 @@
},
{
"c": ">",
- "t": "text.html.markdown meta.paragraph.markdown meta.tag.block.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.markdown meta.paragraph.markdown meta.tag.structure.pre.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -210,7 +210,7 @@
},
{
"c": "<",
- "t": "text.html.markdown meta.tag.block.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.markdown meta.tag.structure.pre.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -221,7 +221,7 @@
},
{
"c": "pre",
- "t": "text.html.markdown meta.tag.block.any.html entity.name.tag.block.any.html",
+ "t": "text.html.markdown meta.tag.structure.pre.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -232,7 +232,7 @@
},
{
"c": ">",
- "t": "text.html.markdown meta.tag.block.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.markdown meta.tag.structure.pre.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -265,7 +265,7 @@
},
{
"c": "",
- "t": "text.html.markdown meta.paragraph.markdown meta.tag.block.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.markdown meta.paragraph.markdown meta.tag.structure.pre.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -276,7 +276,7 @@
},
{
"c": "pre",
- "t": "text.html.markdown meta.paragraph.markdown meta.tag.block.any.html entity.name.tag.block.any.html",
+ "t": "text.html.markdown meta.paragraph.markdown meta.tag.structure.pre.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -287,7 +287,7 @@
},
{
"c": ">",
- "t": "text.html.markdown meta.paragraph.markdown meta.tag.block.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.markdown meta.paragraph.markdown meta.tag.structure.pre.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
diff --git a/extensions/markdown-basics/test/colorize-results/test_md.json b/extensions/markdown-basics/test/colorize-results/test_md.json
index eb09a71c815..dc9ce77ffe7 100644
--- a/extensions/markdown-basics/test/colorize-results/test_md.json
+++ b/extensions/markdown-basics/test/colorize-results/test_md.json
@@ -300,9 +300,9 @@
"c": "",
"t": "text.html.markdown comment.block.html punctuation.definition.comment.html",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
},
{
"c": "<",
- "t": "text.html.markdown meta.tag.block.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.markdown meta.tag.structure.div.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -342,7 +342,7 @@
},
{
"c": "div",
- "t": "text.html.markdown meta.tag.block.any.html entity.name.tag.block.any.html",
+ "t": "text.html.markdown meta.tag.structure.div.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -353,7 +353,7 @@
},
{
"c": " ",
- "t": "text.html.markdown meta.tag.block.any.html",
+ "t": "text.html.markdown meta.tag.structure.div.start.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -364,7 +364,7 @@
},
{
"c": "class",
- "t": "text.html.markdown meta.tag.block.any.html entity.other.attribute-name.html",
+ "t": "text.html.markdown meta.tag.structure.div.start.html meta.attribute.class.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -375,7 +375,7 @@
},
{
"c": "=",
- "t": "text.html.markdown meta.tag.block.any.html",
+ "t": "text.html.markdown meta.tag.structure.div.start.html meta.attribute.class.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -386,7 +386,7 @@
},
{
"c": "\"",
- "t": "text.html.markdown meta.tag.block.any.html string.quoted.double.html punctuation.definition.string.begin.html",
+ "t": "text.html.markdown meta.tag.structure.div.start.html meta.attribute.class.html string.quoted.double.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -397,7 +397,7 @@
},
{
"c": "custom-class",
- "t": "text.html.markdown meta.tag.block.any.html string.quoted.double.html",
+ "t": "text.html.markdown meta.tag.structure.div.start.html meta.attribute.class.html string.quoted.double.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -408,7 +408,7 @@
},
{
"c": "\"",
- "t": "text.html.markdown meta.tag.block.any.html string.quoted.double.html punctuation.definition.string.end.html",
+ "t": "text.html.markdown meta.tag.structure.div.start.html meta.attribute.class.html string.quoted.double.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -419,7 +419,7 @@
},
{
"c": " ",
- "t": "text.html.markdown meta.tag.block.any.html",
+ "t": "text.html.markdown meta.tag.structure.div.start.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -430,7 +430,7 @@
},
{
"c": "markdown",
- "t": "text.html.markdown meta.tag.block.any.html entity.other.attribute-name.html",
+ "t": "text.html.markdown meta.tag.structure.div.start.html meta.attribute.unrecognized.markdown.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -441,7 +441,7 @@
},
{
"c": "=",
- "t": "text.html.markdown meta.tag.block.any.html",
+ "t": "text.html.markdown meta.tag.structure.div.start.html meta.attribute.unrecognized.markdown.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -452,7 +452,7 @@
},
{
"c": "\"",
- "t": "text.html.markdown meta.tag.block.any.html string.quoted.double.html punctuation.definition.string.begin.html",
+ "t": "text.html.markdown meta.tag.structure.div.start.html meta.attribute.unrecognized.markdown.html string.quoted.double.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -463,7 +463,7 @@
},
{
"c": "1",
- "t": "text.html.markdown meta.tag.block.any.html string.quoted.double.html",
+ "t": "text.html.markdown meta.tag.structure.div.start.html meta.attribute.unrecognized.markdown.html string.quoted.double.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -474,7 +474,7 @@
},
{
"c": "\"",
- "t": "text.html.markdown meta.tag.block.any.html string.quoted.double.html punctuation.definition.string.end.html",
+ "t": "text.html.markdown meta.tag.structure.div.start.html meta.attribute.unrecognized.markdown.html string.quoted.double.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -485,7 +485,7 @@
},
{
"c": ">",
- "t": "text.html.markdown meta.tag.block.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.markdown meta.tag.structure.div.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -507,7 +507,7 @@
},
{
"c": "<",
- "t": "text.html.markdown meta.tag.block.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.markdown meta.tag.structure.div.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -518,7 +518,7 @@
},
{
"c": "div",
- "t": "text.html.markdown meta.tag.block.any.html entity.name.tag.block.any.html",
+ "t": "text.html.markdown meta.tag.structure.div.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -529,7 +529,7 @@
},
{
"c": ">",
- "t": "text.html.markdown meta.tag.block.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.markdown meta.tag.structure.div.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -562,7 +562,7 @@
},
{
"c": "",
- "t": "text.html.markdown meta.tag.block.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.markdown meta.tag.structure.div.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -573,7 +573,7 @@
},
{
"c": "div",
- "t": "text.html.markdown meta.tag.block.any.html entity.name.tag.block.any.html",
+ "t": "text.html.markdown meta.tag.structure.div.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -584,7 +584,7 @@
},
{
"c": ">",
- "t": "text.html.markdown meta.tag.block.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.markdown meta.tag.structure.div.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -606,7 +606,7 @@
},
{
"c": "<",
- "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.begin.html",
+ "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.script.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -617,7 +617,7 @@
},
{
"c": "script",
- "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.script.html entity.name.tag.html",
+ "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.script.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -628,7 +628,7 @@
},
{
"c": " ",
- "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.script.html",
+ "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.script.start.html",
"r": {
"dark_plus": "meta.embedded: #D4D4D4",
"light_plus": "meta.embedded: #000000",
@@ -639,7 +639,7 @@
},
{
"c": "type",
- "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.script.html entity.other.attribute-name.html",
+ "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.type.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -650,7 +650,7 @@
},
{
"c": "=",
- "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.script.html",
+ "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.type.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "meta.embedded: #D4D4D4",
"light_plus": "meta.embedded: #000000",
@@ -661,7 +661,7 @@
},
{
"c": "'",
- "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.script.html string.quoted.single.html punctuation.definition.string.begin.html",
+ "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.type.html string.quoted.single.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.single.html: #0000FF",
@@ -672,7 +672,7 @@
},
{
"c": "text/x-koka",
- "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.script.html string.quoted.single.html",
+ "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.type.html string.quoted.single.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.single.html: #0000FF",
@@ -683,7 +683,7 @@
},
{
"c": "'",
- "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.script.html string.quoted.single.html punctuation.definition.string.end.html",
+ "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.script.start.html meta.attribute.type.html string.quoted.single.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.single.html: #0000FF",
@@ -694,7 +694,7 @@
},
{
"c": ">",
- "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.end.html",
+ "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.script.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -727,7 +727,7 @@
},
{
"c": "",
- "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.begin.html",
+ "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -738,7 +738,7 @@
},
{
"c": "script",
- "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.script.html entity.name.tag.html",
+ "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.script.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -749,7 +749,7 @@
},
{
"c": ">",
- "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.end.html",
+ "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -770,29 +770,7 @@
}
},
{
- "c": " and a ",
- "t": "text.html.markdown",
- "r": {
- "dark_plus": "default: #D4D4D4",
- "light_plus": "default: #000000",
- "dark_vs": "default: #D4D4D4",
- "light_vs": "default: #000000",
- "hc_black": "default: #FFFFFF"
- }
- },
- {
- "c": "&",
- "t": "text.html.markdown invalid.illegal.bad-ampersand.html",
- "r": {
- "dark_plus": "invalid: #F44747",
- "light_plus": "invalid: #CD3131",
- "dark_vs": "invalid: #F44747",
- "light_vs": "invalid: #CD3131",
- "hc_black": "invalid: #F44747"
- }
- },
- {
- "c": " ",
+ "c": " and a & ",
"t": "text.html.markdown",
"r": {
"dark_plus": "default: #D4D4D4",
@@ -804,7 +782,7 @@
},
{
"c": "<",
- "t": "text.html.markdown meta.tag.inline.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.markdown meta.tag.inline.b.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -815,7 +793,7 @@
},
{
"c": "b",
- "t": "text.html.markdown meta.tag.inline.any.html entity.name.tag.inline.any.html",
+ "t": "text.html.markdown meta.tag.inline.b.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -826,7 +804,7 @@
},
{
"c": " ",
- "t": "text.html.markdown meta.tag.inline.any.html",
+ "t": "text.html.markdown meta.tag.inline.b.start.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -837,7 +815,7 @@
},
{
"c": "class",
- "t": "text.html.markdown meta.tag.inline.any.html entity.other.attribute-name.html",
+ "t": "text.html.markdown meta.tag.inline.b.start.html meta.attribute.class.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -848,7 +826,7 @@
},
{
"c": "=",
- "t": "text.html.markdown meta.tag.inline.any.html",
+ "t": "text.html.markdown meta.tag.inline.b.start.html meta.attribute.class.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -859,7 +837,7 @@
},
{
"c": "\"",
- "t": "text.html.markdown meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.begin.html",
+ "t": "text.html.markdown meta.tag.inline.b.start.html meta.attribute.class.html string.quoted.double.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -870,7 +848,7 @@
},
{
"c": "bold",
- "t": "text.html.markdown meta.tag.inline.any.html string.quoted.double.html",
+ "t": "text.html.markdown meta.tag.inline.b.start.html meta.attribute.class.html string.quoted.double.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -881,7 +859,7 @@
},
{
"c": "\"",
- "t": "text.html.markdown meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.end.html",
+ "t": "text.html.markdown meta.tag.inline.b.start.html meta.attribute.class.html string.quoted.double.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -892,7 +870,7 @@
},
{
"c": ">",
- "t": "text.html.markdown meta.tag.inline.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.markdown meta.tag.inline.b.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -914,7 +892,7 @@
},
{
"c": "",
- "t": "text.html.markdown meta.tag.inline.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.markdown meta.tag.inline.b.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -925,7 +903,7 @@
},
{
"c": "b",
- "t": "text.html.markdown meta.tag.inline.any.html entity.name.tag.inline.any.html",
+ "t": "text.html.markdown meta.tag.inline.b.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -936,7 +914,7 @@
},
{
"c": ">",
- "t": "text.html.markdown meta.tag.inline.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.markdown meta.tag.inline.b.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -969,7 +947,7 @@
},
{
"c": "<",
- "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.style.html punctuation.definition.tag.begin.html",
+ "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.style.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -980,7 +958,7 @@
},
{
"c": "style",
- "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.style.html entity.name.tag.html",
+ "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.style.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -991,7 +969,7 @@
},
{
"c": ">",
- "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.style.html punctuation.definition.tag.end.html",
+ "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.style.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1156,7 +1134,7 @@
},
{
"c": "<",
- "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.style.html punctuation.definition.tag.begin.html source.css",
+ "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.style.end.html punctuation.definition.tag.begin.html source.css",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1167,7 +1145,7 @@
},
{
"c": "/",
- "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.style.html punctuation.definition.tag.begin.html",
+ "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.style.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1178,7 +1156,7 @@
},
{
"c": "style",
- "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.style.html entity.name.tag.html",
+ "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.style.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -1189,7 +1167,7 @@
},
{
"c": ">",
- "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.style.html punctuation.definition.tag.end.html",
+ "t": "text.html.markdown meta.embedded.block.html meta.tag.metadata.style.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1200,7 +1178,7 @@
},
{
"c": "",
- "t": "text.html.markdown meta.tag.block.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.markdown meta.tag.structure.div.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1211,7 +1189,7 @@
},
{
"c": "div",
- "t": "text.html.markdown meta.tag.block.any.html entity.name.tag.block.any.html",
+ "t": "text.html.markdown meta.tag.structure.div.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -1222,7 +1200,7 @@
},
{
"c": ">",
- "t": "text.html.markdown meta.tag.block.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.markdown meta.tag.structure.div.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1620,9 +1598,9 @@
"c": ">",
"t": "text.html.markdown markup.quote.markdown beginning.punctuation.definition.quote.markdown",
"r": {
- "dark_plus": "beginning.punctuation.definition.quote.markdown: #608B4E",
+ "dark_plus": "beginning.punctuation.definition.quote.markdown: #6A9955",
"light_plus": "beginning.punctuation.definition.quote.markdown: #0451A5",
- "dark_vs": "beginning.punctuation.definition.quote.markdown: #608B4E",
+ "dark_vs": "beginning.punctuation.definition.quote.markdown: #6A9955",
"light_vs": "beginning.punctuation.definition.quote.markdown: #0451A5",
"hc_black": "default: #FFFFFF"
}
@@ -1653,9 +1631,9 @@
"c": ">",
"t": "text.html.markdown markup.quote.markdown beginning.punctuation.definition.quote.markdown",
"r": {
- "dark_plus": "beginning.punctuation.definition.quote.markdown: #608B4E",
+ "dark_plus": "beginning.punctuation.definition.quote.markdown: #6A9955",
"light_plus": "beginning.punctuation.definition.quote.markdown: #0451A5",
- "dark_vs": "beginning.punctuation.definition.quote.markdown: #608B4E",
+ "dark_vs": "beginning.punctuation.definition.quote.markdown: #6A9955",
"light_vs": "beginning.punctuation.definition.quote.markdown: #0451A5",
"hc_black": "default: #FFFFFF"
}
@@ -1664,9 +1642,9 @@
"c": ">",
"t": "text.html.markdown markup.quote.markdown markup.quote.markdown beginning.punctuation.definition.quote.markdown",
"r": {
- "dark_plus": "beginning.punctuation.definition.quote.markdown: #608B4E",
+ "dark_plus": "beginning.punctuation.definition.quote.markdown: #6A9955",
"light_plus": "beginning.punctuation.definition.quote.markdown: #0451A5",
- "dark_vs": "beginning.punctuation.definition.quote.markdown: #608B4E",
+ "dark_vs": "beginning.punctuation.definition.quote.markdown: #6A9955",
"light_vs": "beginning.punctuation.definition.quote.markdown: #0451A5",
"hc_black": "default: #FFFFFF"
}
@@ -1741,9 +1719,9 @@
"c": ">",
"t": "text.html.markdown markup.list.numbered.markdown markup.quote.markdown beginning.punctuation.definition.quote.markdown",
"r": {
- "dark_plus": "beginning.punctuation.definition.quote.markdown: #608B4E",
+ "dark_plus": "beginning.punctuation.definition.quote.markdown: #6A9955",
"light_plus": "beginning.punctuation.definition.quote.markdown: #0451A5",
- "dark_vs": "beginning.punctuation.definition.quote.markdown: #608B4E",
+ "dark_vs": "beginning.punctuation.definition.quote.markdown: #6A9955",
"light_vs": "beginning.punctuation.definition.quote.markdown: #0451A5",
"hc_black": "default: #FFFFFF"
}
@@ -2520,7 +2498,7 @@
},
{
"c": "<",
- "t": "text.html.markdown meta.paragraph.markdown meta.tag.inline.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.markdown meta.paragraph.markdown meta.tag.inline.abbr.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2531,7 +2509,7 @@
},
{
"c": "abbr",
- "t": "text.html.markdown meta.paragraph.markdown meta.tag.inline.any.html entity.name.tag.inline.any.html",
+ "t": "text.html.markdown meta.paragraph.markdown meta.tag.inline.abbr.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -2542,7 +2520,7 @@
},
{
"c": ">",
- "t": "text.html.markdown meta.paragraph.markdown meta.tag.inline.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.markdown meta.paragraph.markdown meta.tag.inline.abbr.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
diff --git a/extensions/markdown-language-features/.vscodeignore b/extensions/markdown-language-features/.vscodeignore
index ebab1d50b9b..6d68d9a450e 100644
--- a/extensions/markdown-language-features/.vscodeignore
+++ b/extensions/markdown-language-features/.vscodeignore
@@ -1,3 +1,4 @@
test/**
src/**
-tsconfig.json
\ No newline at end of file
+tsconfig.json
+out/test/**
\ No newline at end of file
diff --git a/extensions/markdown-language-features/README.md b/extensions/markdown-language-features/README.md
new file mode 100644
index 00000000000..e80e9e886bb
--- /dev/null
+++ b/extensions/markdown-language-features/README.md
@@ -0,0 +1,7 @@
+# Language Features for Markdown files
+
+**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.
+
+## Features
+
+See [Markdown in Visual Studio Code](https://code.visualstudio.com/docs/languages/markdown) to learn about the features of this extension.
\ No newline at end of file
diff --git a/extensions/markdown-language-features/extension.webpack.config.js b/extensions/markdown-language-features/extension.webpack.config.js
new file mode 100644
index 00000000000..de88398eca0
--- /dev/null
+++ b/extensions/markdown-language-features/extension.webpack.config.js
@@ -0,0 +1,20 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+//@ts-check
+
+'use strict';
+
+const withDefaults = require('../shared.webpack.config');
+
+module.exports = withDefaults({
+ context: __dirname,
+ resolve: {
+ mainFields: ['module', 'main']
+ },
+ entry: {
+ extension: './src/extension.ts',
+ }
+});
diff --git a/extensions/markdown-language-features/media/highlight.css b/extensions/markdown-language-features/media/highlight.css
index fd39af662c0..3b748b1c4f9 100644
--- a/extensions/markdown-language-features/media/highlight.css
+++ b/extensions/markdown-language-features/media/highlight.css
@@ -120,6 +120,11 @@ Visual Studio-like style based on original C# coloring by Jason Diamond div {
+.vscode-light pre {
background-color: rgba(220, 220, 220, 0.4);
}
-.vscode-dark pre:not(.hljs),
-.vscode-dark code > div {
+.vscode-dark pre {
background-color: rgba(10, 10, 10, 0.4);
}
-.vscode-high-contrast pre:not(.hljs),
-.vscode-high-contrast code > div {
+.vscode-high-contrast pre {
background-color: rgb(0, 0, 0);
}
diff --git a/extensions/markdown-language-features/package.json b/extensions/markdown-language-features/package.json
index aef3b9ed3bb..e0c56e6cb10 100644
--- a/extensions/markdown-language-features/package.json
+++ b/extensions/markdown-language-features/package.json
@@ -292,22 +292,24 @@
"build-preview": "webpack --mode development"
},
"dependencies": {
- "highlight.js": "9.5.0",
- "markdown-it": "^8.4.0",
+ "highlight.js": "9.12.0",
+ "markdown-it": "^8.4.1",
"markdown-it-named-headers": "0.0.4",
- "vscode-extension-telemetry": "0.0.17",
- "vscode-nls": "^3.2.1"
+ "vscode-extension-telemetry": "0.0.18",
+ "vscode-nls": "^4.0.0"
},
"devDependencies": {
"@types/highlight.js": "9.1.10",
"@types/lodash.throttle": "^4.1.3",
"@types/markdown-it": "0.0.2",
- "@types/node": "7.0.43",
+ "@types/node": "^8.10.25",
"lodash.throttle": "^4.1.1",
+ "mocha-junit-reporter": "^1.17.0",
+ "mocha-multi-reporters": "^1.1.7",
"ts-loader": "^4.0.1",
"typescript": "^2.7.2",
"vscode": "^1.1.10",
"webpack": "^4.1.0",
"webpack-cli": "^2.0.10"
}
-}
\ No newline at end of file
+}
diff --git a/extensions/markdown-language-features/src/commands/openDocumentLink.ts b/extensions/markdown-language-features/src/commands/openDocumentLink.ts
index 86828c02806..97303b4ecb7 100644
--- a/extensions/markdown-language-features/src/commands/openDocumentLink.ts
+++ b/extensions/markdown-language-features/src/commands/openDocumentLink.ts
@@ -63,7 +63,7 @@ export class OpenDocumentLinkCommand implements Command {
if (entry) {
return editor.revealRange(new vscode.Range(entry.line, 0, entry.line, 0), vscode.TextEditorRevealType.AtTop);
}
- const lineNumberFragment = fragment.match(/^L(\d+)$/);
+ const lineNumberFragment = fragment.match(/^L(\d+)$/i);
if (lineNumberFragment) {
const line = +lineNumberFragment[1] - 1;
if (!isNaN(line)) {
diff --git a/extensions/markdown-language-features/src/commands/showPreview.ts b/extensions/markdown-language-features/src/commands/showPreview.ts
index c522c2b5ddc..bd59d575bbb 100644
--- a/extensions/markdown-language-features/src/commands/showPreview.ts
+++ b/extensions/markdown-language-features/src/commands/showPreview.ts
@@ -10,27 +10,6 @@ import { MarkdownPreviewManager } from '../features/previewManager';
import { TelemetryReporter } from '../telemetryReporter';
import { PreviewSettings } from '../features/preview';
-
-function getViewColumn(sideBySide: boolean): vscode.ViewColumn | undefined {
- const active = vscode.window.activeTextEditor;
- if (!active) {
- return vscode.ViewColumn.One;
- }
-
- if (!sideBySide) {
- return active.viewColumn;
- }
-
- switch (active.viewColumn) {
- case vscode.ViewColumn.One:
- return vscode.ViewColumn.Two;
- case vscode.ViewColumn.Two:
- return vscode.ViewColumn.Three;
- }
-
- return active.viewColumn;
-}
-
interface ShowPreviewSettings {
readonly sideBySide?: boolean;
readonly locked?: boolean;
@@ -59,9 +38,10 @@ async function showPreview(
return;
}
+ const resourceColumn = (vscode.window.activeTextEditor && vscode.window.activeTextEditor.viewColumn) || vscode.ViewColumn.One;
webviewManager.preview(resource, {
- resourceColumn: (vscode.window.activeTextEditor && vscode.window.activeTextEditor.viewColumn) || vscode.ViewColumn.One,
- previewColumn: getViewColumn(!!previewSettings.sideBySide) || vscode.ViewColumn.Active,
+ resourceColumn: resourceColumn,
+ previewColumn: previewSettings.sideBySide ? resourceColumn + 1 : resourceColumn,
locked: !!previewSettings.locked
});
diff --git a/extensions/markdown-language-features/src/extension.ts b/extensions/markdown-language-features/src/extension.ts
index a9d95e36ce8..7786db20216 100644
--- a/extensions/markdown-language-features/src/extension.ts
+++ b/extensions/markdown-language-features/src/extension.ts
@@ -24,7 +24,7 @@ export function activate(context: vscode.ExtensionContext) {
const telemetryReporter = loadDefaultTelemetryReporter();
context.subscriptions.push(telemetryReporter);
- const contributions = getMarkdownExtensionContributions();
+ const contributions = getMarkdownExtensionContributions(context);
const cspArbiter = new ExtensionContentSecurityPolicyArbiter(context.globalState, context.workspaceState);
const engine = new MarkdownEngine(contributions, githubSlugifier);
diff --git a/extensions/markdown-language-features/src/features/documentSymbolProvider.ts b/extensions/markdown-language-features/src/features/documentSymbolProvider.ts
index 38b33197200..bf0d5edb852 100644
--- a/extensions/markdown-language-features/src/features/documentSymbolProvider.ts
+++ b/extensions/markdown-language-features/src/features/documentSymbolProvider.ts
@@ -5,8 +5,13 @@
import * as vscode from 'vscode';
import { MarkdownEngine } from '../markdownEngine';
-import { TableOfContentsProvider, SkinnyTextDocument } from '../tableOfContentsProvider';
+import { TableOfContentsProvider, SkinnyTextDocument, TocEntry } from '../tableOfContentsProvider';
+interface MarkdownSymbol {
+ readonly level: number;
+ readonly parent: MarkdownSymbol | undefined;
+ readonly children: vscode.DocumentSymbol[];
+}
export default class MDDocumentSymbolProvider implements vscode.DocumentSymbolProvider {
@@ -14,10 +19,57 @@ export default class MDDocumentSymbolProvider implements vscode.DocumentSymbolPr
private readonly engine: MarkdownEngine
) { }
- public async provideDocumentSymbols(document: SkinnyTextDocument): Promise {
+ public async provideDocumentSymbolInformation(document: SkinnyTextDocument): Promise {
const toc = await new TableOfContentsProvider(this.engine, document).getToc();
- return toc.map(entry => {
- return new vscode.SymbolInformation('#'.repeat(entry.level) + ' ' + entry.text, vscode.SymbolKind.String, '', entry.location);
- });
+ return toc.map(entry => this.toSymbolInformation(entry));
+ }
+
+ public async provideDocumentSymbols(document: SkinnyTextDocument): Promise {
+ const toc = await new TableOfContentsProvider(this.engine, document).getToc();
+ const root: MarkdownSymbol = {
+ level: -Infinity,
+ children: [],
+ parent: undefined
+ };
+ this.buildTree(root, toc);
+ return root.children;
+ }
+
+ private buildTree(parent: MarkdownSymbol, entries: TocEntry[]) {
+ if (!entries.length) {
+ return;
+ }
+
+ const entry = entries[0];
+ const symbol = this.toDocumentSymbol(entry);
+ symbol.children = [];
+
+ while (parent && entry.level <= parent.level) {
+ parent = parent.parent!;
+ }
+ parent.children.push(symbol);
+ this.buildTree({ level: entry.level, children: symbol.children, parent }, entries.slice(1));
+ }
+
+
+ private toSymbolInformation(entry: TocEntry): vscode.SymbolInformation {
+ return new vscode.SymbolInformation(
+ this.getSymbolName(entry),
+ vscode.SymbolKind.String,
+ '',
+ entry.location);
+ }
+
+ private toDocumentSymbol(entry: TocEntry) {
+ return new vscode.DocumentSymbol(
+ this.getSymbolName(entry),
+ '',
+ vscode.SymbolKind.String,
+ entry.location.range,
+ entry.location.range);
+ }
+
+ private getSymbolName(entry: TocEntry): string {
+ return '#'.repeat(entry.level) + ' ' + entry.text;
}
}
\ No newline at end of file
diff --git a/extensions/markdown-language-features/src/features/foldingProvider.ts b/extensions/markdown-language-features/src/features/foldingProvider.ts
index 236908a1f1f..2de47bd78ca 100644
--- a/extensions/markdown-language-features/src/features/foldingProvider.ts
+++ b/extensions/markdown-language-features/src/features/foldingProvider.ts
@@ -3,8 +3,8 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
+import { Token } from 'markdown-it';
import * as vscode from 'vscode';
-
import { MarkdownEngine } from '../markdownEngine';
import { TableOfContentsProvider } from '../tableOfContentsProvider';
@@ -16,35 +16,83 @@ export default class MarkdownFoldingProvider implements vscode.FoldingRangeProvi
private readonly engine: MarkdownEngine
) { }
+ private async getRegions(document: vscode.TextDocument): Promise {
+
+ const isStartRegion = (t: string) => /^\s*/.test(t);
+ const isEndRegion = (t: string) => /^\s*/.test(t);
+
+ const isRegionMarker = (token: Token) => token.type === 'html_block' &&
+ (isStartRegion(token.content) || isEndRegion(token.content));
+
+
+ const tokens = await this.engine.parse(document.uri, document.getText());
+ const regionMarkers = tokens.filter(isRegionMarker)
+ .map(token => ({ line: token.map[0], isStart: isStartRegion(token.content) }));
+
+ const nestingStack: { line: number, isStart: boolean }[] = [];
+ return regionMarkers
+ .map(marker => {
+ if (marker.isStart) {
+ nestingStack.push(marker);
+ } else if (nestingStack.length && nestingStack[nestingStack.length - 1].isStart) {
+ return new vscode.FoldingRange(nestingStack.pop()!.line, marker.line, vscode.FoldingRangeKind.Region);
+ } else {
+ // noop: invalid nesting (i.e. [end, start] or [start, end, end])
+ }
+ return null;
+ })
+ .filter((region: vscode.FoldingRange | null): region is vscode.FoldingRange => !!region);
+ }
+
public async provideFoldingRanges(
document: vscode.TextDocument,
_: vscode.FoldingContext,
_token: vscode.CancellationToken
): Promise {
- const tocProvider = new TableOfContentsProvider(this.engine, document);
- let toc = await tocProvider.getToc();
- if (toc.length > rangeLimit) {
- toc = toc.slice(0, rangeLimit);
- }
-
- const foldingRanges = toc.map((entry, startIndex) => {
- const start = entry.line;
- let end: number | undefined = undefined;
- for (let i = startIndex + 1; i < toc.length; ++i) {
- if (toc[i].level <= entry.level) {
- end = toc[i].line - 1;
- if (document.lineAt(end).isEmptyOrWhitespace && end >= start + 1) {
- end = end - 1;
- }
- break;
- }
- }
- return new vscode.FoldingRange(
- start,
- typeof end === 'number' ? end : document.lineCount - 1);
- });
-
-
- return foldingRanges;
+ const foldables = await Promise.all([
+ this.getRegions(document),
+ this.getHeaderFoldingRanges(document),
+ this.getBlockFoldingRanges(document)]);
+ return [].concat.apply([], foldables).slice(0, rangeLimit);
}
-}
\ No newline at end of file
+
+ private async getHeaderFoldingRanges(document: vscode.TextDocument) {
+ const tocProvider = new TableOfContentsProvider(this.engine, document);
+ const toc = await tocProvider.getToc();
+ return toc.map(entry => {
+ let endLine = entry.location.range.end.line;
+ if (document.lineAt(endLine).isEmptyOrWhitespace && endLine >= entry.line + 1) {
+ endLine = endLine - 1;
+ }
+ return new vscode.FoldingRange(entry.line, endLine);
+ });
+ }
+
+ private async getBlockFoldingRanges(document: vscode.TextDocument): Promise {
+
+ const isFoldableToken = (token: Token) => {
+ switch (token.type) {
+ case 'fence':
+ case 'list_item_open':
+ return token.map[1] > token.map[0];
+
+ case 'html_block':
+ return token.map[1] > token.map[0] + 1;
+
+ default:
+ return false;
+ }
+ };
+
+ const tokens = await this.engine.parse(document.uri, document.getText());
+ const multiLineListItems = tokens.filter(isFoldableToken);
+ return multiLineListItems.map(listItem => {
+ const start = listItem.map[0];
+ let end = listItem.map[1] - 1;
+ if (document.lineAt(end).isEmptyOrWhitespace && end >= start + 1) {
+ end = end - 1;
+ }
+ return new vscode.FoldingRange(start, end);
+ });
+ }
+}
diff --git a/extensions/markdown-language-features/src/features/preview.ts b/extensions/markdown-language-features/src/features/preview.ts
index c5b9b4809bd..f15efe24098 100644
--- a/extensions/markdown-language-features/src/features/preview.ts
+++ b/extensions/markdown-language-features/src/features/preview.ts
@@ -34,14 +34,14 @@ export class MarkdownPreview {
private isScrolling = false;
private _disposed: boolean = false;
-
public static async revive(
webview: vscode.WebviewPanel,
state: any,
contentProvider: MarkdownContentProvider,
previewConfigurations: MarkdownPreviewConfigurationManager,
logger: Logger,
- topmostLineMonitor: MarkdownFileTopmostLineMonitor
+ topmostLineMonitor: MarkdownFileTopmostLineMonitor,
+ contributions: MarkdownContributions,
): Promise {
const resource = vscode.Uri.parse(state.resource);
const locked = state.locked;
@@ -54,7 +54,10 @@ export class MarkdownPreview {
contentProvider,
previewConfigurations,
logger,
- topmostLineMonitor);
+ topmostLineMonitor,
+ contributions);
+
+ preview.editor.webview.options = MarkdownPreview.getWebviewOptions(resource, contributions);
if (!isNaN(line)) {
preview.line = line;
@@ -77,10 +80,8 @@ export class MarkdownPreview {
MarkdownPreview.viewType,
MarkdownPreview.getPreviewTitle(resource, locked),
previewColumn, {
- enableScripts: true,
- enableCommandUris: true,
enableFindWidget: true,
- localResourceRoots: MarkdownPreview.getLocalResourceRoots(resource, contributions)
+ ...MarkdownPreview.getWebviewOptions(resource, contributions)
});
return new MarkdownPreview(
@@ -90,7 +91,8 @@ export class MarkdownPreview {
contentProvider,
previewConfigurations,
logger,
- topmostLineMonitor);
+ topmostLineMonitor,
+ contributions);
}
private constructor(
@@ -100,7 +102,8 @@ export class MarkdownPreview {
private readonly _contentProvider: MarkdownContentProvider,
private readonly _previewConfigurations: MarkdownPreviewConfigurationManager,
private readonly _logger: Logger,
- topmostLineMonitor: MarkdownFileTopmostLineMonitor
+ topmostLineMonitor: MarkdownFileTopmostLineMonitor,
+ private readonly _contributions: MarkdownContributions,
) {
this._resource = resource;
this._locked = locked;
@@ -239,10 +242,6 @@ export class MarkdownPreview {
return this.editor.viewColumn;
}
- public isWebviewOf(webview: vscode.WebviewPanel): boolean {
- return this.editor === webview;
- }
-
public matchesResource(
otherResource: vscode.Uri,
otherPosition: vscode.ViewColumn | undefined,
@@ -272,6 +271,14 @@ export class MarkdownPreview {
this.editor.title = MarkdownPreview.getPreviewTitle(this._resource, this._locked);
}
+ private get iconPath() {
+ const root = path.join(this._contributions.extensionPath, 'media');
+ return {
+ light: vscode.Uri.file(path.join(root, 'Preview.svg')),
+ dark: vscode.Uri.file(path.join(root, 'Preview_inverse.svg'))
+ };
+ }
+
private isPreviewOf(resource: vscode.Uri): boolean {
return this._resource.fsPath === resource.fsPath;
}
@@ -328,10 +335,23 @@ export class MarkdownPreview {
const content = await this._contentProvider.provideTextDocumentContent(document, this._previewConfigurations, this.line, this.state);
if (this._resource === resource) {
this.editor.title = MarkdownPreview.getPreviewTitle(this._resource, this._locked);
+ this.editor.iconPath = this.iconPath;
+ this.editor.webview.options = MarkdownPreview.getWebviewOptions(resource, this._contributions);
this.editor.webview.html = content;
}
}
+ private static getWebviewOptions(
+ resource: vscode.Uri,
+ contributions: MarkdownContributions
+ ): vscode.WebviewOptions {
+ return {
+ enableScripts: true,
+ enableCommandUris: true,
+ localResourceRoots: MarkdownPreview.getLocalResourceRoots(resource, contributions)
+ };
+ }
+
private static getLocalResourceRoots(
resource: vscode.Uri,
contributions: MarkdownContributions
diff --git a/extensions/markdown-language-features/src/features/previewConfig.ts b/extensions/markdown-language-features/src/features/previewConfig.ts
index 5f120a1507f..d660bf10793 100644
--- a/extensions/markdown-language-features/src/features/previewConfig.ts
+++ b/extensions/markdown-language-features/src/features/previewConfig.ts
@@ -27,7 +27,7 @@ export class MarkdownPreviewConfiguration {
private constructor(resource: vscode.Uri) {
const editorConfig = vscode.workspace.getConfiguration('editor', resource);
const markdownConfig = vscode.workspace.getConfiguration('markdown', resource);
- const markdownEditorConfig = vscode.workspace.getConfiguration('[markdown]');
+ const markdownEditorConfig = vscode.workspace.getConfiguration('[markdown]', resource);
this.scrollBeyondLastLine = editorConfig.get('scrollBeyondLastLine', false);
diff --git a/extensions/markdown-language-features/src/features/previewManager.ts b/extensions/markdown-language-features/src/features/previewManager.ts
index aec8c251bc2..15e414f762e 100644
--- a/extensions/markdown-language-features/src/features/previewManager.ts
+++ b/extensions/markdown-language-features/src/features/previewManager.ts
@@ -16,33 +16,33 @@ import { MarkdownContentProvider } from './previewContentProvider';
export class MarkdownPreviewManager implements vscode.WebviewPanelSerializer {
private static readonly markdownPreviewActiveContextKey = 'markdownPreviewFocus';
- private readonly topmostLineMonitor = new MarkdownFileTopmostLineMonitor();
- private readonly previewConfigurations = new MarkdownPreviewConfigurationManager();
- private readonly previews: MarkdownPreview[] = [];
- private activePreview: MarkdownPreview | undefined = undefined;
- private readonly disposables: vscode.Disposable[] = [];
+ private readonly _topmostLineMonitor = new MarkdownFileTopmostLineMonitor();
+ private readonly _previewConfigurations = new MarkdownPreviewConfigurationManager();
+ private readonly _previews: MarkdownPreview[] = [];
+ private _activePreview: MarkdownPreview | undefined = undefined;
+ private readonly _disposables: vscode.Disposable[] = [];
public constructor(
- private readonly contentProvider: MarkdownContentProvider,
- private readonly logger: Logger,
- private readonly contributions: MarkdownContributions
+ private readonly _contentProvider: MarkdownContentProvider,
+ private readonly _logger: Logger,
+ private readonly _contributions: MarkdownContributions
) {
- this.disposables.push(vscode.window.registerWebviewPanelSerializer(MarkdownPreview.viewType, this));
+ this._disposables.push(vscode.window.registerWebviewPanelSerializer(MarkdownPreview.viewType, this));
}
public dispose(): void {
- disposeAll(this.disposables);
- disposeAll(this.previews);
+ disposeAll(this._disposables);
+ disposeAll(this._previews);
}
public refresh() {
- for (const preview of this.previews) {
+ for (const preview of this._previews) {
preview.refresh();
}
}
public updateConfiguration() {
- for (const preview of this.previews) {
+ for (const preview of this._previews) {
preview.updateConfiguration();
}
}
@@ -62,16 +62,16 @@ export class MarkdownPreviewManager implements vscode.WebviewPanelSerializer {
}
public get activePreviewResource() {
- return this.activePreview && this.activePreview.resource;
+ return this._activePreview && this._activePreview.resource;
}
public toggleLock() {
- const preview = this.activePreview;
+ const preview = this._activePreview;
if (preview) {
preview.toggleLock();
// Close any previews that are now redundant, such as having two dynamic previews in the same editor group
- for (const otherPreview of this.previews) {
+ for (const otherPreview of this._previews) {
if (otherPreview !== preview && preview.matches(otherPreview)) {
otherPreview.dispose();
}
@@ -86,10 +86,11 @@ export class MarkdownPreviewManager implements vscode.WebviewPanelSerializer {
const preview = await MarkdownPreview.revive(
webview,
state,
- this.contentProvider,
- this.previewConfigurations,
- this.logger,
- this.topmostLineMonitor);
+ this._contentProvider,
+ this._previewConfigurations,
+ this._logger,
+ this._topmostLineMonitor,
+ this._contributions);
this.registerPreview(preview);
}
@@ -98,7 +99,7 @@ export class MarkdownPreviewManager implements vscode.WebviewPanelSerializer {
resource: vscode.Uri,
previewSettings: PreviewSettings
): MarkdownPreview | undefined {
- return this.previews.find(preview =>
+ return this._previews.find(preview =>
preview.matchesResource(resource, previewSettings.previewColumn, previewSettings.locked));
}
@@ -110,39 +111,39 @@ export class MarkdownPreviewManager implements vscode.WebviewPanelSerializer {
resource,
previewSettings.previewColumn,
previewSettings.locked,
- this.contentProvider,
- this.previewConfigurations,
- this.logger,
- this.topmostLineMonitor,
- this.contributions);
+ this._contentProvider,
+ this._previewConfigurations,
+ this._logger,
+ this._topmostLineMonitor,
+ this._contributions);
this.setPreviewActiveContext(true);
- this.activePreview = preview;
+ this._activePreview = preview;
return this.registerPreview(preview);
}
private registerPreview(
preview: MarkdownPreview
): MarkdownPreview {
- this.previews.push(preview);
+ this._previews.push(preview);
preview.onDispose(() => {
- const existing = this.previews.indexOf(preview);
+ const existing = this._previews.indexOf(preview);
if (existing === -1) {
return;
}
- this.previews.splice(existing, 1);
- if (this.activePreview === preview) {
+ this._previews.splice(existing, 1);
+ if (this._activePreview === preview) {
this.setPreviewActiveContext(false);
- this.activePreview = undefined;
+ this._activePreview = undefined;
}
});
preview.onDidChangeViewState(({ webviewPanel }) => {
- disposeAll(this.previews.filter(otherPreview => preview !== otherPreview && preview!.matches(otherPreview)));
- this.setPreviewActiveContext(webviewPanel.visible);
- this.activePreview = webviewPanel.visible ? preview : undefined;
+ disposeAll(this._previews.filter(otherPreview => preview !== otherPreview && preview!.matches(otherPreview)));
+ this.setPreviewActiveContext(webviewPanel.active);
+ this._activePreview = webviewPanel.active ? preview : undefined;
});
return preview;
diff --git a/extensions/markdown-language-features/src/features/workspaceSymbolProvider.ts b/extensions/markdown-language-features/src/features/workspaceSymbolProvider.ts
index 9cbce783e12..12e51c75d76 100644
--- a/extensions/markdown-language-features/src/features/workspaceSymbolProvider.ts
+++ b/extensions/markdown-language-features/src/features/workspaceSymbolProvider.ts
@@ -136,7 +136,7 @@ export default class MarkdownWorkspaceSymbolProvider implements vscode.Workspace
private getSymbols(document: SkinnyTextDocument): Lazy> {
return lazy(async () => {
- return this._symbolProvider.provideDocumentSymbols(document);
+ return this._symbolProvider.provideDocumentSymbolInformation(document);
});
}
diff --git a/extensions/markdown-language-features/src/logger.ts b/extensions/markdown-language-features/src/logger.ts
index f5a4a776533..4ee89cbb811 100644
--- a/extensions/markdown-language-features/src/logger.ts
+++ b/extensions/markdown-language-features/src/logger.ts
@@ -3,7 +3,8 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
-import { OutputChannel, window, workspace } from 'vscode';
+import * as vscode from 'vscode';
+import { lazy } from './util/lazy';
enum Trace {
Off,
@@ -31,7 +32,8 @@ function isString(value: any): value is string {
export class Logger {
private trace?: Trace;
- private _output?: OutputChannel;
+
+ private readonly outputChannel = lazy(() => vscode.window.createOutputChannel('Markdown'));
constructor() {
this.updateConfiguration();
@@ -39,9 +41,9 @@ export class Logger {
public log(message: string, data?: any): void {
if (this.trace === Trace.Verbose) {
- this.output.appendLine(`[Log - ${(new Date().toLocaleTimeString())}] ${message}`);
+ this.appendLine(`[Log - ${(new Date().toLocaleTimeString())}] ${message}`);
if (data) {
- this.output.appendLine(Logger.data2String(data));
+ this.appendLine(Logger.data2String(data));
}
}
}
@@ -50,15 +52,12 @@ export class Logger {
this.trace = this.readTrace();
}
- private get output(): OutputChannel {
- if (!this._output) {
- this._output = window.createOutputChannel('Markdown');
- }
- return this._output;
+ private appendLine(value: string) {
+ return this.outputChannel.value.appendLine(value);
}
private readTrace(): Trace {
- return Trace.fromString(workspace.getConfiguration().get('markdown.trace', 'off'));
+ return Trace.fromString(vscode.workspace.getConfiguration().get('markdown.trace', 'off'));
}
private static data2String(data: any): string {
@@ -73,4 +72,4 @@ export class Logger {
}
return JSON.stringify(data, undefined, 2);
}
-}
\ No newline at end of file
+}
diff --git a/extensions/markdown-language-features/src/markdownEngine.ts b/extensions/markdown-language-features/src/markdownEngine.ts
index e6c422c14ce..bc67e0bee18 100644
--- a/extensions/markdown-language-features/src/markdownEngine.ts
+++ b/extensions/markdown-language-features/src/markdownEngine.ts
@@ -47,7 +47,7 @@ export class MarkdownEngine {
return `${hljs.highlight(lang, str, true).value}
`;
} catch (error) { }
}
- return `${this.md!.utils.escapeHtml(str)}
`;
+ return `${this.md!.utils.escapeHtml(str)}
`;
}
}).use(mdnh, {
slugify: (header: string) => this.slugifier.fromHeading(header).value
@@ -107,6 +107,7 @@ export class MarkdownEngine {
return engine.parse(text, {}).map(token => {
if (token.map) {
token.map[0] += offset;
+ token.map[1] += offset;
}
return token;
});
diff --git a/extensions/markdown-language-features/src/markdownExtensions.ts b/extensions/markdown-language-features/src/markdownExtensions.ts
index a9ef207cf38..55c8d76e7a4 100644
--- a/extensions/markdown-language-features/src/markdownExtensions.ts
+++ b/extensions/markdown-language-features/src/markdownExtensions.ts
@@ -26,6 +26,7 @@ const resolveExtensionResources = (extension: vscode.Extension, resourcePat
};
export interface MarkdownContributions {
+ readonly extensionPath: string;
readonly previewScripts: vscode.Uri[];
readonly previewStyles: vscode.Uri[];
readonly markdownItPlugins: Thenable<(md: any) => any>[];
@@ -40,6 +41,10 @@ class MarkdownExtensionContributions implements MarkdownContributions {
private _loaded = false;
+ public constructor(
+ public readonly extensionPath: string,
+ ) { }
+
public get previewScripts(): vscode.Uri[] {
this.ensureLoaded();
return this._scripts;
@@ -111,6 +116,6 @@ class MarkdownExtensionContributions implements MarkdownContributions {
}
}
-export function getMarkdownExtensionContributions(): MarkdownContributions {
- return new MarkdownExtensionContributions();
+export function getMarkdownExtensionContributions(context: vscode.ExtensionContext): MarkdownContributions {
+ return new MarkdownExtensionContributions(context.extensionPath);
}
\ No newline at end of file
diff --git a/extensions/markdown-language-features/src/security.ts b/extensions/markdown-language-features/src/security.ts
index a09ce1f538a..3a62eed2dbd 100644
--- a/extensions/markdown-language-features/src/security.ts
+++ b/extensions/markdown-language-features/src/security.ts
@@ -11,7 +11,7 @@ import * as nls from 'vscode-nls';
const localize = nls.loadMessageBundle();
-export enum MarkdownPreviewSecurityLevel {
+export const enum MarkdownPreviewSecurityLevel {
Strict = 0,
AllowInsecureContent = 1,
AllowScriptsAndAllContent = 2,
diff --git a/extensions/markdown-language-features/src/slugify.ts b/extensions/markdown-language-features/src/slugify.ts
index c3e167e89e0..5b9146b602f 100644
--- a/extensions/markdown-language-features/src/slugify.ts
+++ b/extensions/markdown-language-features/src/slugify.ts
@@ -23,7 +23,7 @@ export const githubSlugifier: Slugifier = new class implements Slugifier {
heading.trim()
.toLowerCase()
.replace(/\s+/g, '-') // Replace whitespace with -
- .replace(/[\]\[\!\'\#\$\%\&\'\(\)\*\+\,\.\/\:\;\<\=\>\?\@\\\^\_\{\|\}\~\`]/g, '') // Remove known puctuators
+ .replace(/[\]\[\!\'\#\$\%\&\'\(\)\*\+\,\.\/\:\;\<\=\>\?\@\\\^\_\{\|\}\~\`。,、;:?!…—·ˉ¨‘’“”々~‖∶"'`|〃〔〕〈〉《》「」『』.〖〗【】()[]{}]/g, '') // Remove known punctuators
.replace(/^\-+/, '') // Remove leading -
.replace(/\-+$/, '') // Remove trailing -
);
diff --git a/extensions/markdown-language-features/src/tableOfContentsProvider.ts b/extensions/markdown-language-features/src/tableOfContentsProvider.ts
index ff2cd01ad24..944fc750734 100644
--- a/extensions/markdown-language-features/src/tableOfContentsProvider.ts
+++ b/extensions/markdown-language-features/src/tableOfContentsProvider.ts
@@ -17,6 +17,7 @@ export interface TocEntry {
export interface SkinnyTextDocument {
readonly uri: vscode.Uri;
+ readonly lineCount: number;
getText(): string;
lineAt(line: number): vscode.TextLine;
}
@@ -61,7 +62,25 @@ export class TableOfContentsProvider {
location: new vscode.Location(document.uri, line.range)
});
}
- return toc;
+
+ // Get full range of section
+ return toc.map((entry, startIndex): TocEntry => {
+ let end: number | undefined = undefined;
+ for (let i = startIndex + 1; i < toc.length; ++i) {
+ if (toc[i].level <= entry.level) {
+ end = toc[i].line - 1;
+ break;
+ }
+ }
+ const endLine = typeof end === 'number' ? end : document.lineCount - 1;
+ return {
+ ...entry,
+ location: new vscode.Location(document.uri,
+ new vscode.Range(
+ entry.location.range.start,
+ new vscode.Position(endLine, document.lineAt(endLine).range.end.character)))
+ };
+ });
}
private static getHeaderLevel(markup: string): number {
diff --git a/extensions/markdown-language-features/src/test/documentLinkProvider.test.ts b/extensions/markdown-language-features/src/test/documentLinkProvider.test.ts
index 910ed3c9bdf..5a1d0c87880 100644
--- a/extensions/markdown-language-features/src/test/documentLinkProvider.test.ts
+++ b/extensions/markdown-language-features/src/test/documentLinkProvider.test.ts
@@ -10,7 +10,7 @@ import LinkProvider from '../features/documentLinkProvider';
import { InMemoryDocument } from './inMemoryDocument';
-const testFileName = vscode.Uri.parse('test.md');
+const testFileName = vscode.Uri.file('test.md');
const noopToken = new class implements vscode.CancellationToken {
private _onCancellationRequestedEmitter = new vscode.EventEmitter();
diff --git a/extensions/markdown-language-features/src/test/documentSymbolProvider.test.ts b/extensions/markdown-language-features/src/test/documentSymbolProvider.test.ts
new file mode 100644
index 00000000000..9533f807cf9
--- /dev/null
+++ b/extensions/markdown-language-features/src/test/documentSymbolProvider.test.ts
@@ -0,0 +1,86 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import * as assert from 'assert';
+import 'mocha';
+import * as vscode from 'vscode';
+import SymbolProvider from '../features/documentSymbolProvider';
+import { InMemoryDocument } from './inMemoryDocument';
+import { createNewMarkdownEngine } from './engine';
+
+
+const testFileName = vscode.Uri.file('test.md');
+
+
+function getSymbolsForFile(fileContents: string) {
+ const doc = new InMemoryDocument(testFileName, fileContents);
+ const provider = new SymbolProvider(createNewMarkdownEngine());
+ return provider.provideDocumentSymbols(doc);
+}
+
+
+suite('markdown.DocumentSymbolProvider', () => {
+ test('Should not return anything for empty document', async () => {
+ const symbols = await getSymbolsForFile('');
+ assert.strictEqual(symbols.length, 0);
+ });
+
+ test('Should not return anything for document with no headers', async () => {
+ const symbols = await getSymbolsForFile('a\na');
+ assert.strictEqual(symbols.length, 0);
+ });
+
+ test('Should not return anything for document with # but no real headers', async () => {
+ const symbols = await getSymbolsForFile('a#a\na#');
+ assert.strictEqual(symbols.length, 0);
+ });
+
+ test('Should return single symbol for single header', async () => {
+ const symbols = await getSymbolsForFile('# h');
+ assert.strictEqual(symbols.length, 1);
+ assert.strictEqual(symbols[0].name, '# h');
+ });
+
+ test('Should not care about symbol level for single header', async () => {
+ const symbols = await getSymbolsForFile('### h');
+ assert.strictEqual(symbols.length, 1);
+ assert.strictEqual(symbols[0].name, '### h');
+ });
+
+ test('Should put symbols of same level in flat list', async () => {
+ const symbols = await getSymbolsForFile('## h\n## h2');
+ assert.strictEqual(symbols.length, 2);
+ assert.strictEqual(symbols[0].name, '## h');
+ assert.strictEqual(symbols[1].name, '## h2');
+ });
+
+ test('Should nest symbol of level - 1 under parent', async () => {
+
+ const symbols = await getSymbolsForFile('# h\n## h2\n## h3');
+ assert.strictEqual(symbols.length, 1);
+ assert.strictEqual(symbols[0].name, '# h');
+ assert.strictEqual(symbols[0].children.length, 2);
+ assert.strictEqual(symbols[0].children[0].name, '## h2');
+ assert.strictEqual(symbols[0].children[1].name, '## h3');
+ });
+
+ test('Should nest symbol of level - n under parent', async () => {
+ const symbols = await getSymbolsForFile('# h\n#### h2');
+ assert.strictEqual(symbols.length, 1);
+ assert.strictEqual(symbols[0].name, '# h');
+ assert.strictEqual(symbols[0].children.length, 1);
+ assert.strictEqual(symbols[0].children[0].name, '#### h2');
+ });
+
+ test('Should flatten children where lower level occurs first', async () => {
+ const symbols = await getSymbolsForFile('# h\n### h2\n## h3');
+ assert.strictEqual(symbols.length, 1);
+ assert.strictEqual(symbols[0].name, '# h');
+ assert.strictEqual(symbols[0].children.length, 2);
+ assert.strictEqual(symbols[0].children[0].name, '### h2');
+ assert.strictEqual(symbols[0].children[1].name, '## h3');
+ });
+});
+
diff --git a/extensions/markdown-language-features/src/test/engine.ts b/extensions/markdown-language-features/src/test/engine.ts
index 860bafad7cc..a1834e057a2 100644
--- a/extensions/markdown-language-features/src/test/engine.ts
+++ b/extensions/markdown-language-features/src/test/engine.ts
@@ -9,6 +9,7 @@ import { MarkdownContributions } from '../markdownExtensions';
import { githubSlugifier } from '../slugify';
const emptyContributions = new class implements MarkdownContributions {
+ readonly extensionPath = '';
readonly previewScripts: vscode.Uri[] = [];
readonly previewStyles: vscode.Uri[] = [];
readonly previewResourceRoots: vscode.Uri[] = [];
diff --git a/extensions/markdown-language-features/src/test/foldingProvider.test.ts b/extensions/markdown-language-features/src/test/foldingProvider.test.ts
index 44c570d64d4..2ad8444d967 100644
--- a/extensions/markdown-language-features/src/test/foldingProvider.test.ts
+++ b/extensions/markdown-language-features/src/test/foldingProvider.test.ts
@@ -11,7 +11,7 @@ import MarkdownFoldingProvider from '../features/foldingProvider';
import { InMemoryDocument } from './inMemoryDocument';
import { createNewMarkdownEngine } from './engine';
-const testFileName = vscode.Uri.parse('test.md');
+const testFileName = vscode.Uri.file('test.md');
suite('markdown.FoldingProvider', () => {
test('Should not return anything for empty document', async () => {
@@ -78,6 +78,103 @@ y`);
assert.strictEqual(firstFold.end, 2);
});
+ test('Should fold nested markers', async () => {
+ const folds = await getFoldsForDocument(`a
+
+b
+
+b.a
+
+b
+
+b.b
+
+b
+
+a`);
+ assert.strictEqual(folds.length, 3);
+ const [outer, first, second] = folds.sort((a, b) => a.start - b.start);
+
+ assert.strictEqual(outer.start, 1);
+ assert.strictEqual(outer.end, 11);
+ assert.strictEqual(first.start, 3);
+ assert.strictEqual(first.end, 5);
+ assert.strictEqual(second.start, 7);
+ assert.strictEqual(second.end, 9);
+ });
+
+ test('Should fold from list to end of document', async () => {
+ const folds = await getFoldsForDocument(`a
+- b
+c
+d`);
+ assert.strictEqual(folds.length, 1);
+ const firstFold = folds[0];
+ assert.strictEqual(firstFold.start, 1);
+ assert.strictEqual(firstFold.end, 3);
+ });
+
+ test('lists folds should span multiple lines of content', async () => {
+ const folds = await getFoldsForDocument(`a
+- This list item\n spans multiple\n lines.`);
+ assert.strictEqual(folds.length, 1);
+ const firstFold = folds[0];
+ assert.strictEqual(firstFold.start, 1);
+ assert.strictEqual(firstFold.end, 3);
+ });
+
+ test('List should leave single blankline before new element', async () => {
+ const folds = await getFoldsForDocument(`- a
+a
+
+
+b`);
+ assert.strictEqual(folds.length, 1);
+ const firstFold = folds[0];
+ assert.strictEqual(firstFold.start, 0);
+ assert.strictEqual(firstFold.end, 3);
+ });
+
+ test('Should fold fenced code blocks', async () => {
+ const folds = await getFoldsForDocument(`~~~ts
+a
+~~~
+b`);
+ assert.strictEqual(folds.length, 1);
+ const firstFold = folds[0];
+ assert.strictEqual(firstFold.start, 0);
+ assert.strictEqual(firstFold.end, 2);
+ });
+
+ test('Should fold fenced code blocks with yaml front matter', async () => {
+ const folds = await getFoldsForDocument(`---
+title: bla
+---
+
+~~~ts
+a
+~~~
+
+a
+a
+b
+a`);
+ assert.strictEqual(folds.length, 1);
+ const firstFold = folds[0];
+ assert.strictEqual(firstFold.start, 4);
+ assert.strictEqual(firstFold.end, 6);
+ });
+
+ test('Should fold html blocks', async () => {
+ const folds = await getFoldsForDocument(`x
+
+ fa
+
`);
+ assert.strictEqual(folds.length, 1);
+ const firstFold = folds[0];
+ assert.strictEqual(firstFold.start, 1);
+ assert.strictEqual(firstFold.end, 3);
+ });
});
diff --git a/extensions/markdown-language-features/src/test/index.ts b/extensions/markdown-language-features/src/test/index.ts
index f65a756a8de..bd7e03c9a52 100644
--- a/extensions/markdown-language-features/src/test/index.ts
+++ b/extensions/markdown-language-features/src/test/index.ts
@@ -3,26 +3,28 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
-//
-// PLEASE DO NOT MODIFY / DELETE UNLESS YOU KNOW WHAT YOU ARE DOING
-//
-// This file is providing the test runner to use when running extension tests.
-// By default the test runner in use is Mocha based.
-//
-// You can provide your own test runner if you want to override it by exporting
-// a function run(testRoot: string, clb: (error:Error) => void) that the extension
-// host can call to run the tests. The test runner is expected to use console.log
-// to report the results back to the caller. When the tests are finished, return
-// a possible error to the callback or null if none.
-
+const path = require('path');
const testRunner = require('vscode/lib/testrunner');
-// You can directly control Mocha options by uncommenting the following lines
-// See https://github.com/mochajs/mocha/wiki/Using-mocha-programmatically#set-options for more info
-testRunner.configure({
- ui: 'tdd', // the TDD UI is being used in extension.test.ts (suite, test, etc.)
- useColors: process.platform !== 'win32', // colored output from test results (only windows cannot handle)
+const suite = 'Integration Markdown Tests';
+
+const options: any = {
+ ui: 'tdd',
+ useColors: true,
timeout: 60000
-});
+};
+
+if (process.env.BUILD_ARTIFACTSTAGINGDIRECTORY) {
+ options.reporter = 'mocha-multi-reporters';
+ options.reporterOptions = {
+ reporterEnabled: 'spec, mocha-junit-reporter',
+ mochaJunitReporterReporterOptions: {
+ testsuitesTitle: `${suite} ${process.platform}`,
+ mochaFile: path.join(process.env.BUILD_ARTIFACTSTAGINGDIRECTORY, `test-results/${process.platform}-${suite.toLowerCase().replace(/[^\w]/g, '-')}-results.xml`)
+ }
+ };
+}
+
+testRunner.configure(options);
export = testRunner;
diff --git a/extensions/markdown-language-features/src/test/tableOfContentsProvider.test.ts b/extensions/markdown-language-features/src/test/tableOfContentsProvider.test.ts
index 6d6f382ae7e..ee103b294ca 100644
--- a/extensions/markdown-language-features/src/test/tableOfContentsProvider.test.ts
+++ b/extensions/markdown-language-features/src/test/tableOfContentsProvider.test.ts
@@ -11,7 +11,7 @@ import { TableOfContentsProvider } from '../tableOfContentsProvider';
import { InMemoryDocument } from './inMemoryDocument';
import { createNewMarkdownEngine } from './engine';
-const testFileName = vscode.Uri.parse('test.md');
+const testFileName = vscode.Uri.file('test.md');
suite('markdown.TableOfContentsProvider', () => {
test('Lookup should not return anything for empty document', async () => {
diff --git a/extensions/markdown-language-features/src/test/workspaceSymbolProvider.test.ts b/extensions/markdown-language-features/src/test/workspaceSymbolProvider.test.ts
index 2ee12a7979c..f5b3eb0ea4a 100644
--- a/extensions/markdown-language-features/src/test/workspaceSymbolProvider.test.ts
+++ b/extensions/markdown-language-features/src/test/workspaceSymbolProvider.test.ts
@@ -22,7 +22,7 @@ suite('markdown.WorkspaceSymbolProvider', () => {
});
test('Should return symbols from workspace with one markdown file', async () => {
- const testFileName = vscode.Uri.parse('test.md');
+ const testFileName = vscode.Uri.file('test.md');
const provider = new MarkdownWorkspaceSymbolProvider(symbolProvider, new InMemoryWorkspaceMarkdownDocumentProvider([
new InMemoryDocument(testFileName, `# header1\nabc\n## header2`)
@@ -49,7 +49,7 @@ suite('markdown.WorkspaceSymbolProvider', () => {
});
test('Should update results when markdown file changes symbols', async () => {
- const testFileName = vscode.Uri.parse('test.md');
+ const testFileName = vscode.Uri.file('test.md');
const workspaceFileProvider = new InMemoryWorkspaceMarkdownDocumentProvider([
new InMemoryDocument(testFileName, `# header1`)
@@ -68,7 +68,7 @@ suite('markdown.WorkspaceSymbolProvider', () => {
});
test('Should remove results when file is deleted', async () => {
- const testFileName = vscode.Uri.parse('test.md');
+ const testFileName = vscode.Uri.file('test.md');
const workspaceFileProvider = new InMemoryWorkspaceMarkdownDocumentProvider([
new InMemoryDocument(testFileName, `# header1`)
@@ -84,7 +84,7 @@ suite('markdown.WorkspaceSymbolProvider', () => {
});
test('Should update results when markdown file is created', async () => {
- const testFileName = vscode.Uri.parse('test.md');
+ const testFileName = vscode.Uri.file('test.md');
const workspaceFileProvider = new InMemoryWorkspaceMarkdownDocumentProvider([
new InMemoryDocument(testFileName, `# header1`)
@@ -94,7 +94,7 @@ suite('markdown.WorkspaceSymbolProvider', () => {
assert.strictEqual((await provider.provideWorkspaceSymbols('')).length, 1);
// Creat file
- workspaceFileProvider.createDocument(new InMemoryDocument(vscode.Uri.parse('test2.md'), `# new header\nabc\n## header2`));
+ workspaceFileProvider.createDocument(new InMemoryDocument(vscode.Uri.file('test2.md'), `# new header\nabc\n## header2`));
const newSymbols = await provider.provideWorkspaceSymbols('');
assert.strictEqual(newSymbols.length, 3);
});
@@ -105,7 +105,7 @@ class InMemoryWorkspaceMarkdownDocumentProvider implements WorkspaceMarkdownDocu
private readonly _documents = new Map();
constructor(documents: vscode.TextDocument[]) {
- for( const doc of documents) {
+ for (const doc of documents) {
this._documents.set(doc.fileName, doc);
}
}
diff --git a/extensions/markdown-language-features/src/util/topmostLineMonitor.ts b/extensions/markdown-language-features/src/util/topmostLineMonitor.ts
index 700a3e376c1..4348e142f59 100644
--- a/extensions/markdown-language-features/src/util/topmostLineMonitor.ts
+++ b/extensions/markdown-language-features/src/util/topmostLineMonitor.ts
@@ -4,16 +4,16 @@
*--------------------------------------------------------------------------------------------*/
import * as vscode from 'vscode';
-
import { disposeAll } from '../util/dispose';
import { isMarkdownFile } from './file';
-
export class MarkdownFileTopmostLineMonitor {
private readonly disposables: vscode.Disposable[] = [];
private readonly pendingUpdates = new Map();
+ private readonly throttle = 50;
+
constructor() {
vscode.window.onDidChangeTextEditorVisibleRanges(event => {
if (isMarkdownFile(event.textEditor.document)) {
@@ -47,7 +47,7 @@ export class MarkdownFileTopmostLineMonitor {
});
this.pendingUpdates.delete(key);
}
- }, 50);
+ }, this.throttle);
}
this.pendingUpdates.set(key, line);
diff --git a/extensions/markdown-language-features/yarn.lock b/extensions/markdown-language-features/yarn.lock
index 98047a5cefd..36dd88648f1 100644
--- a/extensions/markdown-language-features/yarn.lock
+++ b/extensions/markdown-language-features/yarn.lock
@@ -24,9 +24,9 @@
version "0.0.2"
resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-0.0.2.tgz#5d9ad19e6e6508cdd2f2596df86fd0aade598660"
-"@types/node@7.0.43":
- version "7.0.43"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.43.tgz#a187e08495a075f200ca946079c914e1a5fe962c"
+"@types/node@^8.10.25":
+ version "8.10.25"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.25.tgz#801fe4e39372cef18f268db880a5fbfcf71adc7e"
abbrev@1:
version "1.1.1"
@@ -1153,6 +1153,10 @@ chardet@^0.4.0:
version "0.4.2"
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
+charenc@~0.0.1:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
+
chokidar@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.2.tgz#4dc65139eeb2714977735b6a35d06e97b494dfd7"
@@ -1439,6 +1443,10 @@ cross-spawn@^6.0.4:
shebang-command "^1.2.0"
which "^1.2.9"
+crypt@~0.0.1:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
+
cryptiles@2.x.x:
version "2.0.5"
resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
@@ -2536,9 +2544,9 @@ he@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
-highlight.js@9.5.0:
- version "9.5.0"
- resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.5.0.tgz#46ae51b9db00f70052bcdf196cd404757b6582ae"
+highlight.js@9.12.0:
+ version "9.12.0"
+ resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e"
hmac-drbg@^1.0.0:
version "1.0.1"
@@ -2745,7 +2753,7 @@ is-binary-path@^1.0.0:
dependencies:
binary-extensions "^1.0.0"
-is-buffer@^1.1.5:
+is-buffer@^1.1.5, is-buffer@~1.1.1:
version "1.1.6"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
@@ -3295,6 +3303,10 @@ lodash@^4.11.1, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.4,
version "4.17.5"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511"
+lodash@^4.16.4:
+ version "4.17.10"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7"
+
log-symbols@2.2.0, log-symbols@^2.1.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
@@ -3357,15 +3369,15 @@ markdown-it-named-headers@0.0.4:
dependencies:
string "^3.0.1"
-markdown-it@^8.4.0:
- version "8.4.0"
- resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.4.0.tgz#e2400881bf171f7018ed1bd9da441dac8af6306d"
+markdown-it@^8.4.1:
+ version "8.4.1"
+ resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.4.1.tgz#206fe59b0e4e1b78a7c73250af9b34a4ad0aaf44"
dependencies:
argparse "^1.0.7"
entities "~1.1.1"
linkify-it "^2.0.0"
mdurl "^1.0.1"
- uc.micro "^1.0.3"
+ uc.micro "^1.0.5"
md5.js@^1.3.4:
version "1.3.4"
@@ -3374,6 +3386,14 @@ md5.js@^1.3.4:
hash-base "^3.0.0"
inherits "^2.0.1"
+md5@^2.1.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9"
+ dependencies:
+ charenc "~0.0.1"
+ crypt "~0.0.1"
+ is-buffer "~1.1.1"
+
mdurl@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
@@ -3535,12 +3555,29 @@ mixin-deep@^1.2.0:
for-in "^1.0.2"
is-extendable "^1.0.1"
-mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0:
+mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
dependencies:
minimist "0.0.8"
+mocha-junit-reporter@^1.17.0:
+ version "1.17.0"
+ resolved "https://registry.yarnpkg.com/mocha-junit-reporter/-/mocha-junit-reporter-1.17.0.tgz#2e5149ed40fc5d2e3ca71e42db5ab1fec9c6d85c"
+ dependencies:
+ debug "^2.2.0"
+ md5 "^2.1.0"
+ mkdirp "~0.5.1"
+ strip-ansi "^4.0.0"
+ xml "^1.0.0"
+
+mocha-multi-reporters@^1.1.7:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/mocha-multi-reporters/-/mocha-multi-reporters-1.1.7.tgz#cc7f3f4d32f478520941d852abb64d9988587d82"
+ dependencies:
+ debug "^3.1.0"
+ lodash "^4.16.4"
+
mocha@^4.0.1:
version "4.1.0"
resolved "https://registry.yarnpkg.com/mocha/-/mocha-4.1.0.tgz#7d86cfbcf35cb829e2754c32e17355ec05338794"
@@ -5159,10 +5196,14 @@ typescript@^2.7.2:
version "2.7.2"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.7.2.tgz#2d615a1ef4aee4f574425cdff7026edf81919836"
-uc.micro@^1.0.1, uc.micro@^1.0.3:
+uc.micro@^1.0.1:
version "1.0.3"
resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.3.tgz#7ed50d5e0f9a9fb0a573379259f2a77458d50192"
+uc.micro@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.5.tgz#0c65f15f815aa08b560a61ce8b4db7ffc3f45376"
+
uglify-es@^3.3.4:
version "3.3.10"
resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.10.tgz#8b0b7992cebe20edc26de1bf325cef797b8f3fa5"
@@ -5415,15 +5456,15 @@ vm-browserify@0.0.4:
dependencies:
indexof "0.0.1"
-vscode-extension-telemetry@0.0.17:
- version "0.0.17"
- resolved "https://registry.yarnpkg.com/vscode-extension-telemetry/-/vscode-extension-telemetry-0.0.17.tgz#15123e7edb34e7b9724b6056f54a869bbb922cb7"
+vscode-extension-telemetry@0.0.18:
+ version "0.0.18"
+ resolved "https://registry.yarnpkg.com/vscode-extension-telemetry/-/vscode-extension-telemetry-0.0.18.tgz#602ba20d8c71453aa34533a291e7638f6e5c0327"
dependencies:
applicationinsights "1.0.1"
-vscode-nls@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.1.tgz#b1f3e04e8a94a715d5a7bcbc8339c51e6d74ca51"
+vscode-nls@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-4.0.0.tgz#4001c8a6caba5cedb23a9c5ce1090395c0e44002"
vscode@^1.1.10:
version "1.1.10"
@@ -5565,6 +5606,10 @@ write-file-atomic@^1.2.0:
imurmurhash "^0.1.4"
slide "^1.1.5"
+xml@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5"
+
"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
diff --git a/extensions/merge-conflict/README.md b/extensions/merge-conflict/README.md
index a2f874bcb42..8077ecd6517 100644
--- a/extensions/merge-conflict/README.md
+++ b/extensions/merge-conflict/README.md
@@ -1,5 +1,7 @@
# Merge Conflict
-See [documentation](https://code.visualstudio.com/docs/editor/versioncontrol#_merge-conflicts).
+**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.
-**Notice** This is a an extension that is bundled with Visual Studio Code.
+## Features
+
+See [Merge Conflicts in VS Code](https://code.visualstudio.com/docs/editor/versioncontrol#_merge-conflicts) to learn about features of this extension.
diff --git a/extensions/merge-conflict/package.json b/extensions/merge-conflict/package.json
index f58bb6f2a90..cbf3b4755bd 100644
--- a/extensions/merge-conflict/package.json
+++ b/extensions/merge-conflict/package.json
@@ -79,7 +79,7 @@
{
"category": "%command.category%",
"title": "%command.compare%",
- "original":"Compare Current Conflict",
+ "original": "Compare Current Conflict",
"command": "merge-conflict.compare"
}
],
@@ -100,9 +100,9 @@
}
},
"dependencies": {
- "vscode-nls": "^3.2.1"
+ "vscode-nls": "^4.0.0"
},
"devDependencies": {
"@types/node": "8.0.33"
}
-}
\ No newline at end of file
+}
diff --git a/extensions/merge-conflict/package.nls.json b/extensions/merge-conflict/package.nls.json
index 66076bd7a87..ed7430674cb 100644
--- a/extensions/merge-conflict/package.nls.json
+++ b/extensions/merge-conflict/package.nls.json
@@ -13,6 +13,6 @@
"command.previous": "Previous Conflict",
"command.compare": "Compare Current Conflict",
"config.title": "Merge Conflict",
- "config.codeLensEnabled": "Enable/disable merge conflict block CodeLens within editor",
- "config.decoratorsEnabled": "Enable/disable merge conflict decorators within editor"
+ "config.codeLensEnabled": "Create a Code Lens for merge conflict blocks within editor.",
+ "config.decoratorsEnabled": "Create decorators for merge conflict blocks within editor."
}
\ No newline at end of file
diff --git a/extensions/merge-conflict/src/interfaces.ts b/extensions/merge-conflict/src/interfaces.ts
index b45cd252c9d..bab96d13318 100644
--- a/extensions/merge-conflict/src/interfaces.ts
+++ b/extensions/merge-conflict/src/interfaces.ts
@@ -11,7 +11,7 @@ export interface IMergeRegion {
decoratorContent: vscode.Range;
}
-export enum CommitType {
+export const enum CommitType {
Current,
Incoming,
Both
diff --git a/extensions/merge-conflict/yarn.lock b/extensions/merge-conflict/yarn.lock
index 355d778c63c..888e8da826d 100644
--- a/extensions/merge-conflict/yarn.lock
+++ b/extensions/merge-conflict/yarn.lock
@@ -6,6 +6,6 @@
version "8.0.33"
resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.33.tgz#1126e94374014e54478092830704f6ea89df04cd"
-vscode-nls@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.1.tgz#b1f3e04e8a94a715d5a7bcbc8339c51e6d74ca51"
+vscode-nls@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-4.0.0.tgz#4001c8a6caba5cedb23a9c5ce1090395c0e44002"
diff --git a/extensions/npm/.vscode/tasks.json b/extensions/npm/.vscode/tasks.json
index 0a411c1c867..b7c8a281635 100644
--- a/extensions/npm/.vscode/tasks.json
+++ b/extensions/npm/.vscode/tasks.json
@@ -1,8 +1,10 @@
{
- "version": "0.1.0",
+ "version": "2.0.0",
"command": "npm",
- "isShellCommand": true,
- "showOutput": "silent",
+ "type": "shell",
+ "presentation": {
+ "reveal": "silent",
+ },
"args": ["run", "compile"],
"isBackground": true,
"problemMatcher": "$tsc-watch"
diff --git a/extensions/npm/README.md b/extensions/npm/README.md
index 625002ee7ee..a24a7d69d6e 100644
--- a/extensions/npm/README.md
+++ b/extensions/npm/README.md
@@ -1,18 +1,38 @@
# Node npm
-**Notice** This is a an extension that is bundled with Visual Studio Code.
+**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.
+
+## Features
+
+### Task Running
This extension supports running npm scripts defined in the `package.json` as [tasks](https://code.visualstudio.com/docs/editor/tasks). Scripts with the name 'build', 'compile', or 'watch'
are treated as build tasks.
-To run scripts as tasks you use the `Tasks` menu.
+To run scripts as tasks, use the **Tasks** menu.
-For more information about auto detection of Tasks pls see the [documentation](https://code.visualstudio.com/Docs/editor/tasks#_task-autodetection).
+For more information about auto detection of Tasks, see the [documentation](https://code.visualstudio.com/Docs/editor/tasks#_task-autodetection).
+
+### Script Explorer
+
+The Npm Script Explorer shows the npm scripts found in your workspace. The explorer view is enabled by the setting `npm.enableScriptExplorer`. A script can be opened, run, or debug from the explorer.
+
+### Run Scripts from the Editor
+
+The extension supports to run the selected script as a task when editing the `package.json`file. You can either run a script from
+the hover shown on a script or using the command `Run Selected Npm Script`.
+
+### Others
+
+The extension fetches data from https://registry.npmjs/org and https://registry.bower.io to provide auto-completion and information on hover features on npm dependencies.
## Settings
-- `npm.autoDetect` enable detecting scripts as tasks, the default is `on`.
-- `npm.runSilent` run npm script with the `--silent` option, the default is `false`.
-- `npm.packageManager` the package manager used to run the scripts: `npm` or `yarn`, the default is `npm`.
-- `npm.exclude` glob patterns for folders that should be excluded from automatic script detection. The pattern is matched against the **absolute path** of the package.json. For example, to exclude all test folders use '**/test/**'.
-- `npm.enableScriptExplorer` enable an explorer view for npm scripts.
-- `npm.scriptExplorerAction` the default click action: `open` or `run`, the default is `open`.
+
+- `npm.autoDetect` - Enable detecting scripts as tasks, the default is `on`.
+- `npm.runSilent` - Run npm script with the `--silent` option, the default is `false`.
+- `npm.packageManager` - The package manager used to run the scripts: `npm` or `yarn`, the default is `npm`.
+- `npm.exclude` - Glob patterns for folders that should be excluded from automatic script detection. The pattern is matched against the **absolute path** of the package.json. For example, to exclude all test folders use '**/test/**'.
+- `npm.enableScriptExplorer` - Enable an explorer view for npm scripts.
+- `npm.scriptExplorerAction` - The default click action: `open` or `run`, the default is `open`.
+- `npm.scriptCodeLens.enable` - Enable/disable the code lenses to run a script, the default is `false`.
+
diff --git a/extensions/npm/package.json b/extensions/npm/package.json
index 32e2402c4c1..ebaa3f9cd69 100644
--- a/extensions/npm/package.json
+++ b/extensions/npm/package.json
@@ -20,11 +20,11 @@
"jsonc-parser": "^1.0.0",
"minimatch": "^3.0.4",
"request-light": "^0.2.2",
- "vscode-nls": "^3.2.1"
+ "vscode-nls": "^4.0.0"
},
"devDependencies": {
"@types/minimatch": "^3.0.3",
- "@types/node": "7.0.43"
+ "@types/node": "^8.10.25"
},
"main": "./out/main",
"activationEvents": [
@@ -82,9 +82,46 @@
"light": "resources/light/refresh.svg",
"dark": "resources/dark/refresh.svg"
}
+ },
+ {
+ "command": "npm.runSelectedScript",
+ "title": "%command.runSelectedScript%"
}
],
"menus": {
+ "commandPalette": [
+ {
+ "command": "npm.refresh",
+ "when": "false"
+ },
+ {
+ "command": "npm.runScript",
+ "when": "false"
+ },
+ {
+ "command": "npm.debugScript",
+ "when": "false"
+ },
+ {
+ "command": "npm.openScript",
+ "when": "false"
+ },
+ {
+ "command": "npm.runInstall",
+ "when": "false"
+ },
+ {
+ "command": "npm.runSelectedScript",
+ "when": "false"
+ }
+ ],
+ "editor/context": [
+ {
+ "command": "npm.runSelectedScript",
+ "when": "resourceFilename == 'package.json'",
+ "group": "navigation@+1"
+ }
+ ],
"view/title": [
{
"command": "npm.refresh",
@@ -102,7 +139,8 @@
"command": "npm.runInstall",
"when": "view == npm && viewItem == packageJSON",
"group": "navigation@2"
- }, {
+ },
+ {
"command": "npm.openScript",
"when": "view == npm && viewItem == script",
"group": "navigation@1"
@@ -153,7 +191,7 @@
"type": "boolean",
"default": false,
"scope": "resource",
- "description": "%config.npm.runSilent%"
+ "markdownDescription": "%config.npm.runSilent%"
},
"npm.packageManager": {
"scope": "resource",
@@ -188,9 +226,18 @@
"open",
"run"
],
- "description": "%config.npm.scriptExplorerAction%",
+ "markdownDescription": "%config.npm.scriptExplorerAction%",
"scope": "window",
"default": "open"
+ },
+ "npm.fetchOnlinePackageInfo": {
+ "type": "boolean",
+ "description": "%config.npm.fetchOnlinePackageInfo%",
+ "default": true,
+ "scope": "window",
+ "tags": [
+ "usesOnlineServices"
+ ]
}
}
},
@@ -223,4 +270,4 @@
}
]
}
-}
\ No newline at end of file
+}
diff --git a/extensions/npm/package.nls.json b/extensions/npm/package.nls.json
index ccc6aa3114c..4a33bcc0bc3 100644
--- a/extensions/npm/package.nls.json
+++ b/extensions/npm/package.nls.json
@@ -1,12 +1,13 @@
{
"description": "Extension to add task support for npm scripts.",
- "displayName": "Npm support for VSCode",
- "config.npm.autoDetect": "Controls whether auto detection of npm scripts is on or off. Default is on.",
+ "displayName": "Npm support for VS Code",
+ "config.npm.autoDetect": "Controls whether npm scripts should be automatically detected.",
"config.npm.runSilent": "Run npm commands with the `--silent` option.",
"config.npm.packageManager": "The package manager used to run scripts.",
"config.npm.exclude": "Configure glob patterns for folders that should be excluded from automatic script detection.",
"config.npm.enableScriptExplorer": "Enable an explorer view for npm scripts.",
- "config.npm.scriptExplorerAction": "The default click action used in the scripts explorer: 'open' or 'run', the default is 'open'.",
+ "config.npm.scriptExplorerAction": "The default click action used in the scripts explorer: `open` or `run`, the default is `open`.",
+ "config.npm.fetchOnlinePackageInfo": "Fetch data from https://registry.npmjs/org and https://registry.bower.io to provide auto-completion and information on hover features on npm dependencies.",
"npm.parseError": "Npm task detection: failed to parse the file {0}",
"taskdef.script": "The npm script to customize.",
"taskdef.path": "The path to the folder of the package.json file that provides the script. Can be omitted.",
@@ -15,5 +16,6 @@
"command.run": "Run",
"command.debug": "Debug",
"command.openScript": "Open",
- "command.runInstall": "Run Install"
+ "command.runInstall": "Run Install",
+ "command.runSelectedScript": "Run Script"
}
diff --git a/extensions/npm/src/commands.ts b/extensions/npm/src/commands.ts
new file mode 100644
index 00000000000..509d536db92
--- /dev/null
+++ b/extensions/npm/src/commands.ts
@@ -0,0 +1,32 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+'use strict';
+
+import * as vscode from 'vscode';
+import {
+ runScript, findScriptAtPosition
+} from './tasks';
+import * as nls from 'vscode-nls';
+
+const localize = nls.loadMessageBundle();
+
+export function runSelectedScript() {
+ let editor = vscode.window.activeTextEditor;
+ if (!editor) {
+ return;
+ }
+ let document = editor.document;
+ let contents = document.getText();
+ let selection = editor.selection;
+ let offset = document.offsetAt(selection.anchor);
+
+ let script = findScriptAtPosition(contents, offset);
+ if (script) {
+ runScript(script, document);
+ } else {
+ let message = localize('noScriptFound', 'Could not find an npm script at the selection.');
+ vscode.window.showErrorMessage(message);
+ }
+}
\ No newline at end of file
diff --git a/extensions/npm/src/features/bowerJSONContribution.ts b/extensions/npm/src/features/bowerJSONContribution.ts
index a00f347078c..300d7dad1f0 100644
--- a/extensions/npm/src/features/bowerJSONContribution.ts
+++ b/extensions/npm/src/features/bowerJSONContribution.ts
@@ -4,8 +4,8 @@
*--------------------------------------------------------------------------------------------*/
'use strict';
-import { MarkedString, CompletionItemKind, CompletionItem, DocumentSelector, SnippetString } from 'vscode';
-import { IJSONContribution, ISuggestionsCollector } from './jsonContributions';
+import { MarkedString, CompletionItemKind, CompletionItem, DocumentSelector, SnippetString, workspace } from 'vscode';
+import { IJSONContribution, ISuggestionsCollector, xhrDisabled } from './jsonContributions';
import { XHRRequest } from 'request-light';
import { Location } from 'jsonc-parser';
import { textToMarkedString } from './markedTextUtil';
@@ -25,13 +25,20 @@ export class BowerJSONContribution implements IJSONContribution {
'hui', 'bootstrap-languages', 'async', 'gulp', 'jquery-pjax', 'coffeescript', 'hammer.js', 'ace', 'leaflet', 'jquery-mobile', 'sweetalert', 'typeahead.js', 'soup', 'typehead.js',
'sails', 'codeigniter2'];
- public constructor(private xhr: XHRRequest) {
+ private xhr: XHRRequest;
+
+ public constructor(xhr: XHRRequest) {
+ this.xhr = xhr;
}
public getDocumentSelector(): DocumentSelector {
return [{ language: 'json', scheme: '*', pattern: '**/bower.json' }, { language: 'json', scheme: '*', pattern: '**/.bower.json' }];
}
+ private onlineEnabled() {
+ return !!workspace.getConfiguration('npm').get('fetchOnlinePackageInfo');
+ }
+
public collectDefaultSuggestions(_resource: string, collector: ISuggestionsCollector): Thenable {
const defaultValue = {
'name': '${1:name}',
@@ -50,7 +57,7 @@ export class BowerJSONContribution implements IJSONContribution {
public collectPropertySuggestions(_resource: string, location: Location, currentWord: string, addValue: boolean, isLast: boolean, collector: ISuggestionsCollector): Thenable | null {
if ((location.matches(['dependencies']) || location.matches(['devDependencies']))) {
- if (currentWord.length > 0) {
+ if (currentWord.length > 0 && this.onlineEnabled()) {
const queryUrl = 'https://registry.bower.io/packages/search/' + encodeURIComponent(currentWord);
return this.xhr({
@@ -144,6 +151,10 @@ export class BowerJSONContribution implements IJSONContribution {
}
private getInfo(pack: string): Thenable {
+ if (!this.onlineEnabled()) {
+ return Promise.resolve(undefined);
+ }
+
const queryUrl = 'https://registry.bower.io/packages/' + encodeURIComponent(pack);
return this.xhr({
diff --git a/extensions/npm/src/features/jsonContributions.ts b/extensions/npm/src/features/jsonContributions.ts
index 81f8a66f2c2..a18bccf28ff 100644
--- a/extensions/npm/src/features/jsonContributions.ts
+++ b/extensions/npm/src/features/jsonContributions.ts
@@ -164,3 +164,5 @@ export class JSONCompletionItemProvider implements CompletionItemProvider {
return nextToken === SyntaxKind.CloseBraceToken || nextToken === SyntaxKind.EOF;
}
}
+
+export const xhrDisabled = () => Promise.reject({ responseText: 'Use of online resources is disabled.' });
\ No newline at end of file
diff --git a/extensions/npm/src/features/packageJSONContribution.ts b/extensions/npm/src/features/packageJSONContribution.ts
index b060290eb51..38e4ce05310 100644
--- a/extensions/npm/src/features/packageJSONContribution.ts
+++ b/extensions/npm/src/features/packageJSONContribution.ts
@@ -4,8 +4,8 @@
*--------------------------------------------------------------------------------------------*/
'use strict';
-import { MarkedString, CompletionItemKind, CompletionItem, DocumentSelector, SnippetString } from 'vscode';
-import { IJSONContribution, ISuggestionsCollector } from './jsonContributions';
+import { MarkedString, CompletionItemKind, CompletionItem, DocumentSelector, SnippetString, workspace } from 'vscode';
+import { IJSONContribution, ISuggestionsCollector, xhrDisabled } from './jsonContributions';
import { XHRRequest } from 'request-light';
import { Location } from 'jsonc-parser';
import { textToMarkedString } from './markedTextUtil';
@@ -28,12 +28,14 @@ export class PackageJSONContribution implements IJSONContribution {
'jsdom', 'stylus', 'when', 'readable-stream', 'aws-sdk', 'concat-stream', 'chai', 'Thenable', 'wrench'];
private knownScopes = ['@types', '@angular'];
+ private xhr: XHRRequest;
public getDocumentSelector(): DocumentSelector {
return [{ language: 'json', scheme: '*', pattern: '**/package.json' }];
}
- public constructor(private xhr: XHRRequest) {
+ public constructor(xhr: XHRRequest) {
+ this.xhr = xhr;
}
public collectDefaultSuggestions(_fileName: string, result: ISuggestionsCollector): Thenable {
@@ -52,6 +54,10 @@ export class PackageJSONContribution implements IJSONContribution {
return Promise.resolve(null);
}
+ private onlineEnabled() {
+ return !!workspace.getConfiguration('npm').get('fetchOnlinePackageInfo');
+ }
+
public collectPropertySuggestions(
_resource: string,
location: Location,
@@ -60,6 +66,10 @@ export class PackageJSONContribution implements IJSONContribution {
isLast: boolean,
collector: ISuggestionsCollector
): Thenable | null {
+ if (!this.onlineEnabled()) {
+ return null;
+ }
+
if ((location.matches(['dependencies']) || location.matches(['devDependencies']) || location.matches(['optionalDependencies']) || location.matches(['peerDependencies']))) {
let queryUrl: string;
if (currentWord.length > 0) {
@@ -209,6 +219,10 @@ export class PackageJSONContribution implements IJSONContribution {
location: Location,
result: ISuggestionsCollector
): Thenable | null {
+ if (!this.onlineEnabled()) {
+ return null;
+ }
+
if ((location.matches(['dependencies', '*']) || location.matches(['devDependencies', '*']) || location.matches(['optionalDependencies', '*']) || location.matches(['peerDependencies', '*']))) {
const currentKey = location.path[location.path.length - 1];
if (typeof currentKey === 'string') {
diff --git a/extensions/npm/src/main.ts b/extensions/npm/src/main.ts
index 023fddbffb6..02e22490fd7 100644
--- a/extensions/npm/src/main.ts
+++ b/extensions/npm/src/main.ts
@@ -6,21 +6,22 @@
import * as httpRequest from 'request-light';
import * as vscode from 'vscode';
-
import { addJSONProviders } from './features/jsonContributions';
import { NpmScriptsTreeDataProvider } from './npmView';
-import { provideNpmScripts, invalidateScriptsCache } from './tasks';
-
-let taskProvider: vscode.Disposable | undefined;
+import { invalidateTasksCache, NpmTaskProvider } from './tasks';
+import { invalidateHoverScriptsCache, NpmScriptHoverProvider } from './scriptHover';
+import { runSelectedScript } from './commands';
export async function activate(context: vscode.ExtensionContext): Promise {
- taskProvider = registerTaskProvider(context);
+ const taskProvider = registerTaskProvider(context);
const treeDataProvider = registerExplorer(context);
+ const hoverProvider = registerHoverProvider(context);
+
configureHttpRequest();
- vscode.workspace.onDidChangeConfiguration((e) => {
+ let d = vscode.workspace.onDidChangeConfiguration((e) => {
configureHttpRequest();
if (e.affectsConfiguration('npm.exclude')) {
- invalidateScriptsCache();
+ invalidateTasksCache();
if (treeDataProvider) {
treeDataProvider.refresh();
}
@@ -31,26 +32,34 @@ export async function activate(context: vscode.ExtensionContext): Promise
}
}
});
+ context.subscriptions.push(d);
+
+ d = vscode.workspace.onDidChangeTextDocument((e) => {
+ invalidateHoverScriptsCache(e.document);
+ });
+ context.subscriptions.push(d);
+ context.subscriptions.push(vscode.commands.registerCommand('npm.runSelectedScript', runSelectedScript));
context.subscriptions.push(addJSONProviders(httpRequest.xhr));
}
function registerTaskProvider(context: vscode.ExtensionContext): vscode.Disposable | undefined {
+
+ function invalidateScriptCaches() {
+ invalidateHoverScriptsCache();
+ invalidateTasksCache();
+ }
+
if (vscode.workspace.workspaceFolders) {
let watcher = vscode.workspace.createFileSystemWatcher('**/package.json');
- watcher.onDidChange((_e) => invalidateScriptsCache());
- watcher.onDidDelete((_e) => invalidateScriptsCache());
- watcher.onDidCreate((_e) => invalidateScriptsCache());
+ watcher.onDidChange((_e) => invalidateScriptCaches());
+ watcher.onDidDelete((_e) => invalidateScriptCaches());
+ watcher.onDidCreate((_e) => invalidateScriptCaches());
context.subscriptions.push(watcher);
- let provider: vscode.TaskProvider = {
- provideTasks: async () => {
- return provideNpmScripts();
- },
- resolveTask(_task: vscode.Task): vscode.Task | undefined {
- return undefined;
- }
- };
- return vscode.workspace.registerTaskProvider('npm', provider);
+ let provider: vscode.TaskProvider = new NpmTaskProvider(context);
+ let disposable = vscode.workspace.registerTaskProvider('npm', provider);
+ context.subscriptions.push(disposable);
+ return disposable;
}
return undefined;
}
@@ -65,13 +74,24 @@ function registerExplorer(context: vscode.ExtensionContext): NpmScriptsTreeDataP
return undefined;
}
+function registerHoverProvider(context: vscode.ExtensionContext): NpmScriptHoverProvider | undefined {
+ if (vscode.workspace.workspaceFolders) {
+ let npmSelector: vscode.DocumentSelector = {
+ language: 'json',
+ scheme: 'file',
+ pattern: '**/package.json'
+ };
+ let provider = new NpmScriptHoverProvider(context);
+ context.subscriptions.push(vscode.languages.registerHoverProvider(npmSelector, provider));
+ return provider;
+ }
+ return undefined;
+}
+
function configureHttpRequest() {
const httpSettings = vscode.workspace.getConfiguration('http');
httpRequest.configure(httpSettings.get('proxy', ''), httpSettings.get('proxyStrictSSL', true));
}
export function deactivate(): void {
- if (taskProvider) {
- taskProvider.dispose();
- }
}
diff --git a/extensions/npm/src/npmView.ts b/extensions/npm/src/npmView.ts
index 3bf86c5b1e2..f737df23e1b 100644
--- a/extensions/npm/src/npmView.ts
+++ b/extensions/npm/src/npmView.ts
@@ -6,14 +6,14 @@
import * as path from 'path';
import {
- DebugConfiguration, Event, EventEmitter, ExtensionContext, Task,
+ Event, EventEmitter, ExtensionContext, Task,
TextDocument, ThemeIcon, TreeDataProvider, TreeItem, TreeItemCollapsibleState, Uri,
- WorkspaceFolder, commands, debug, window, workspace, tasks, Selection, TaskGroup
+ WorkspaceFolder, commands, window, workspace, tasks, Selection, TaskGroup
} from 'vscode';
import { visit, JSONVisitor } from 'jsonc-parser';
import {
NpmTaskDefinition, getPackageJsonUriFromTask, getScripts,
- isWorkspaceFolder, getPackageManager, getTaskName, createTask
+ isWorkspaceFolder, getTaskName, createTask, extractDebugArgFromScript, startDebugging
} from './tasks';
import * as nls from 'vscode-nls';
@@ -162,21 +162,7 @@ export class NpmScriptsTreeDataProvider implements TreeDataProvider {
}
private extractDebugArg(scripts: any, task: Task): [string, number] | undefined {
- let script: string = scripts[task.name];
-
- let match = script.match(/--(inspect|debug)(-brk)?(=(\d*))?/);
- if (match) {
- if (match[4]) {
- return [match[1], parseInt(match[4])];
- }
- if (match[1] === 'inspect') {
- return [match[1], 9229];
- }
- if (match[1] === 'debug') {
- return [match[1], 5858];
- }
- }
- return undefined;
+ return extractDebugArgFromScript(scripts[task.name]);
}
private async debugScript(script: NpmScript) {
@@ -189,7 +175,7 @@ export class NpmScriptsTreeDataProvider implements TreeDataProvider {
return;
}
- let debugArg = await this.extractDebugArg(scripts, task);
+ let debugArg = this.extractDebugArg(scripts, task);
if (!debugArg) {
let message = localize('noDebugOptions', 'Could not launch "{0}" for debugging because the scripts lacks a node debug option, e.g. "--inspect-brk".', task.name);
let learnMore = localize('learnMore', 'Learn More');
@@ -200,29 +186,7 @@ export class NpmScriptsTreeDataProvider implements TreeDataProvider {
}
return;
}
-
- let protocol = 'inspector';
- if (debugArg[0] === 'debug') {
- protocol = 'legacy';
- }
-
- let packageManager = getPackageManager(script.getFolder());
- const config: DebugConfiguration = {
- type: 'node',
- request: 'launch',
- name: `Debug ${task.name}`,
- runtimeExecutable: packageManager,
- runtimeArgs: [
- 'run-script',
- task.name,
- ],
- port: debugArg[1],
- protocol: protocol
- };
-
- if (isWorkspaceFolder(task.scope)) {
- debug.startDebugging(task.scope, config);
- }
+ startDebugging(task.name, debugArg[0], debugArg[1], script.getFolder());
}
private scriptNotValid(task: Task) {
@@ -354,7 +318,6 @@ export class NpmScriptsTreeDataProvider implements TreeDataProvider {
private buildTaskTree(tasks: Task[]): Folder[] | PackageJSON[] | NoScripts[] {
let folders: Map = new Map();
let packages: Map = new Map();
- let scripts: Map = new Map();
let folder = null;
let packageJson = null;
@@ -376,11 +339,8 @@ export class NpmScriptsTreeDataProvider implements TreeDataProvider {
packages.set(fullPath, packageJson);
}
let fullScriptPath = path.join(packageJson.path, each.name);
- if (!scripts.get(fullScriptPath)) {
- let script = new NpmScript(this.extensionContext, packageJson, each);
- packageJson.addScript(script);
- scripts.set(fullScriptPath, script);
- }
+ let script = new NpmScript(this.extensionContext, packageJson, each);
+ packageJson.addScript(script);
}
});
if (folders.size === 1) {
diff --git a/extensions/npm/src/scriptHover.ts b/extensions/npm/src/scriptHover.ts
new file mode 100644
index 00000000000..d81ceee0807
--- /dev/null
+++ b/extensions/npm/src/scriptHover.ts
@@ -0,0 +1,126 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+'use strict';
+
+import {
+ ExtensionContext, TextDocument, commands, ProviderResult, CancellationToken,
+ workspace, tasks, Range, HoverProvider, Hover, Position, MarkdownString, Uri
+} from 'vscode';
+import {
+ createTask, startDebugging, findAllScriptRanges, extractDebugArgFromScript
+} from './tasks';
+import * as nls from 'vscode-nls';
+
+const localize = nls.loadMessageBundle();
+
+let cachedDocument: Uri | undefined = undefined;
+let cachedScriptsMap: Map | undefined = undefined;
+
+export function invalidateHoverScriptsCache(document?: TextDocument) {
+ if (!document) {
+ cachedDocument = undefined;
+ return;
+ }
+ if (document.uri === cachedDocument) {
+ cachedDocument = undefined;
+ }
+}
+
+export class NpmScriptHoverProvider implements HoverProvider {
+ private extensionContext: ExtensionContext;
+
+ constructor(context: ExtensionContext) {
+ this.extensionContext = context;
+ context.subscriptions.push(commands.registerCommand('npm.runScriptFromHover', this.runScriptFromHover, this));
+ context.subscriptions.push(commands.registerCommand('npm.debugScriptFromHover', this.debugScriptFromHover, this));
+ }
+
+ public provideHover(document: TextDocument, position: Position, _token: CancellationToken): ProviderResult {
+ let hover: Hover | undefined = undefined;
+
+ if (!cachedDocument || cachedDocument.fsPath !== document.uri.fsPath) {
+ cachedScriptsMap = findAllScriptRanges(document.getText());
+ cachedDocument = document.uri;
+ }
+
+ cachedScriptsMap!.forEach((value, key) => {
+ let start = document.positionAt(value[0]);
+ let end = document.positionAt(value[0] + value[1]);
+ let range = new Range(start, end);
+
+ if (range.contains(position)) {
+ let contents: MarkdownString = new MarkdownString();
+ contents.isTrusted = true;
+ contents.appendMarkdown(this.createRunScriptMarkdown(key, document.uri));
+
+ let debugArgs = extractDebugArgFromScript(value[2]);
+ if (debugArgs) {
+ contents.appendMarkdown(this.createDebugScriptMarkdown(key, document.uri, debugArgs[0], debugArgs[1]));
+ }
+ hover = new Hover(contents);
+ }
+ });
+ return hover;
+ }
+
+ private createRunScriptMarkdown(script: string, documentUri: Uri): string {
+ let args = {
+ documentUri: documentUri,
+ script: script,
+ };
+ return this.createMarkdownLink(
+ localize('runScript', 'Run Script'),
+ 'npm.runScriptFromHover',
+ args,
+ localize('runScript.tooltip', 'Run the script as a task')
+ );
+ }
+
+ private createDebugScriptMarkdown(script: string, documentUri: Uri, protocol: string, port: number): string {
+ let args = {
+ documentUri: documentUri,
+ script: script,
+ protocol: protocol,
+ port: port
+ };
+ return this.createMarkdownLink(
+ localize('debugScript', 'Debug Script'),
+ 'npm.debugScriptFromHover',
+ args,
+ localize('debugScript.tooltip', 'Runs the script under the debugger'),
+ '|'
+ );
+ }
+
+ private createMarkdownLink(label: string, cmd: string, args: any, tooltip: string, separator?: string): string {
+ let encodedArgs = encodeURIComponent(JSON.stringify(args));
+ let prefix = '';
+ if (separator) {
+ prefix = ` ${separator} `;
+ }
+ return `${prefix}[${label}](command:${cmd}?${encodedArgs} "${tooltip}")`;
+ }
+
+ public runScriptFromHover(args: any) {
+ let script = args.script;
+ let documentUri = args.documentUri;
+ let folder = workspace.getWorkspaceFolder(documentUri);
+ if (folder) {
+ let task = createTask(script, `run ${script}`, folder, documentUri);
+ tasks.executeTask(task);
+ }
+ }
+
+ public debugScriptFromHover(args: any) {
+ let script = args.script;
+ let documentUri = args.documentUri;
+ let protocol = args.protocol;
+ let port = args.port;
+ let folder = workspace.getWorkspaceFolder(documentUri);
+ if (folder) {
+ startDebugging(script, protocol, port, folder);
+ }
+ }
+}
diff --git a/extensions/npm/src/tasks.ts b/extensions/npm/src/tasks.ts
index 88fa3c82824..189fd98baec 100644
--- a/extensions/npm/src/tasks.ts
+++ b/extensions/npm/src/tasks.ts
@@ -4,7 +4,10 @@
*--------------------------------------------------------------------------------------------*/
'use strict';
-import { TaskDefinition, Task, TaskGroup, WorkspaceFolder, RelativePattern, ShellExecution, Uri, workspace } from 'vscode';
+import {
+ TaskDefinition, Task, TaskGroup, WorkspaceFolder, RelativePattern, ShellExecution, Uri, workspace,
+ DebugConfiguration, debug, TaskProvider, ExtensionContext, TextDocument, tasks
+} from 'vscode';
import * as path from 'path';
import * as fs from 'fs';
import * as minimatch from 'minimatch';
@@ -22,7 +25,23 @@ type AutoDetect = 'on' | 'off';
let cachedTasks: Task[] | undefined = undefined;
-export function invalidateScriptsCache() {
+export class NpmTaskProvider implements TaskProvider {
+ private extensionContext: ExtensionContext;
+
+ constructor(context: ExtensionContext) {
+ this.extensionContext = context;
+ }
+
+ public provideTasks() {
+ return provideNpmScripts();
+ }
+
+ public resolveTask(_task: Task): Task | undefined {
+ return undefined;
+ }
+}
+
+export function invalidateTasksCache() {
cachedTasks = undefined;
}
@@ -100,6 +119,7 @@ async function detectNpmScripts(): Promise {
let emptyTasks: Task[] = [];
let allTasks: Task[] = [];
+ let visitedPackageJsonFiles: Set = new Set();
let folders = workspace.workspaceFolders;
if (!folders) {
@@ -112,8 +132,10 @@ async function detectNpmScripts(): Promise {
let relativePattern = new RelativePattern(folder, '**/package.json');
let paths = await workspace.findFiles(relativePattern, '**/node_modules/**');
for (let j = 0; j < paths.length; j++) {
- if (!isExcluded(folder, paths[j])) {
- let tasks = await provideNpmScriptsForFolder(paths[j]);
+ let path = paths[j];
+ if (!isExcluded(folder, path) && !visitedPackageJsonFiles.has(path.fsPath)) {
+ let tasks = await provideNpmScriptsForFolder(path);
+ visitedPackageJsonFiles.add(path.fsPath);
allTasks.push(...tasks);
}
}
@@ -159,7 +181,7 @@ function isExcluded(folder: WorkspaceFolder, packageJsonUri: Uri) {
}
function isDebugScript(script: string): boolean {
- let match = script.match(/--(inspect|debug)(-brk)?(=(\d*))?/);
+ let match = script.match(/--(inspect|debug)(-brk)?(=((\[[0-9a-fA-F:]*\]|[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+|[a-zA-Z0-9\.]*):)?(\d+))?/);
return match !== null;
}
@@ -266,6 +288,61 @@ async function readFile(file: string): Promise {
});
}
+export function runScript(script: string, document: TextDocument) {
+ let uri = document.uri;
+ let folder = workspace.getWorkspaceFolder(uri);
+ if (folder) {
+ let task = createTask(script, `run ${script}`, folder, uri);
+ tasks.executeTask(task);
+ }
+}
+
+export function extractDebugArgFromScript(scriptValue: string): [string, number] | undefined {
+ // matches --debug, --debug=1234, --debug-brk, debug-brk=1234, --inspect,
+ // --inspect=1234, --inspect-brk, --inspect-brk=1234,
+ // --inspect=localhost:1245, --inspect=127.0.0.1:1234, --inspect=[aa:1:0:0:0]:1234, --inspect=:1234
+ let match = scriptValue.match(/--(inspect|debug)(-brk)?(=((\[[0-9a-fA-F:]*\]|[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+|[a-zA-Z0-9\.]*):)?(\d+))?/);
+
+ if (match) {
+ if (match[6]) {
+ return [match[1], parseInt(match[6])];
+ }
+ if (match[1] === 'inspect') {
+ return [match[1], 9229];
+ }
+ if (match[1] === 'debug') {
+ return [match[1], 5858];
+ }
+ }
+ return undefined;
+}
+
+export function startDebugging(scriptName: string, protocol: string, port: number, folder: WorkspaceFolder) {
+ let p = 'inspector';
+ if (protocol === 'debug') {
+ p = 'legacy';
+ }
+
+ let packageManager = getPackageManager(folder);
+ const config: DebugConfiguration = {
+ type: 'node',
+ request: 'launch',
+ name: `Debug ${scriptName}`,
+ runtimeExecutable: packageManager,
+ runtimeArgs: [
+ 'run',
+ scriptName,
+ ],
+ port: port,
+ protocol: p
+ };
+
+ if (folder) {
+ debug.startDebugging(folder, config);
+ }
+}
+
+
export type StringMap = { [s: string]: string; };
async function findAllScripts(buffer: string): Promise {
@@ -275,7 +352,6 @@ async function findAllScripts(buffer: string): Promise {
let visitor: JSONVisitor = {
onError(_error: ParseErrorCode, _offset: number, _length: number) {
- // TODO: inform user about the parse error
},
onObjectEnd() {
if (inScripts) {
@@ -301,6 +377,80 @@ async function findAllScripts(buffer: string): Promise {
return scripts;
}
+export function findAllScriptRanges(buffer: string): Map {
+ var scripts: Map = new Map();
+ let script: string | undefined = undefined;
+ let offset: number;
+ let length: number;
+
+ let inScripts = false;
+
+ let visitor: JSONVisitor = {
+ onError(_error: ParseErrorCode, _offset: number, _length: number) {
+ },
+ onObjectEnd() {
+ if (inScripts) {
+ inScripts = false;
+ }
+ },
+ onLiteralValue(value: any, _offset: number, _length: number) {
+ if (script) {
+ scripts.set(script, [offset, length, value]);
+ script = undefined;
+ }
+ },
+ onObjectProperty(property: string, off: number, len: number) {
+ if (property === 'scripts') {
+ inScripts = true;
+ }
+ else if (inScripts) {
+ script = property;
+ offset = off;
+ length = len;
+ }
+ }
+ };
+ visit(buffer, visitor);
+ return scripts;
+}
+
+export function findScriptAtPosition(buffer: string, offset: number): string | undefined {
+ let script: string | undefined = undefined;
+ let inScripts = false;
+ let scriptStart: number | undefined;
+ let visitor: JSONVisitor = {
+ onError(_error: ParseErrorCode, _offset: number, _length: number) {
+ },
+ onObjectEnd() {
+ if (inScripts) {
+ inScripts = false;
+ scriptStart = undefined;
+ }
+ },
+ onLiteralValue(value: any, nodeOffset: number, nodeLength: number) {
+ if (inScripts && scriptStart) {
+ if (offset >= scriptStart && offset < nodeOffset + nodeLength) {
+ // found the script
+ inScripts = false;
+ } else {
+ script = undefined;
+ }
+ }
+ },
+ onObjectProperty(property: string, nodeOffset: number, nodeLength: number) {
+ if (property === 'scripts') {
+ inScripts = true;
+ }
+ else if (inScripts) {
+ scriptStart = nodeOffset;
+ script = property;
+ }
+ }
+ };
+ visit(buffer, visitor);
+ return script;
+}
+
export async function getScripts(packageJsonUri: Uri): Promise {
if (packageJsonUri.scheme !== 'file') {
diff --git a/extensions/npm/yarn.lock b/extensions/npm/yarn.lock
index 741a6fe9a22..0cb54a6c9ba 100644
--- a/extensions/npm/yarn.lock
+++ b/extensions/npm/yarn.lock
@@ -6,9 +6,9 @@
version "3.0.3"
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
-"@types/node@7.0.43":
- version "7.0.43"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.43.tgz#a187e08495a075f200ca946079c914e1a5fe962c"
+"@types/node@^8.10.25":
+ version "8.10.25"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.25.tgz#801fe4e39372cef18f268db880a5fbfcf71adc7e"
agent-base@4, agent-base@^4.1.0:
version "4.2.0"
@@ -93,6 +93,6 @@ vscode-nls@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-2.0.2.tgz#808522380844b8ad153499af5c3b03921aea02da"
-vscode-nls@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.1.tgz#b1f3e04e8a94a715d5a7bcbc8339c51e6d74ca51"
+vscode-nls@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-4.0.0.tgz#4001c8a6caba5cedb23a9c5ce1090395c0e44002"
diff --git a/extensions/objective-c/test/colorize-results/test_m.json b/extensions/objective-c/test/colorize-results/test_m.json
index ed1bda084e3..691fe71e9a5 100644
--- a/extensions/objective-c/test/colorize-results/test_m.json
+++ b/extensions/objective-c/test/colorize-results/test_m.json
@@ -3,9 +3,9 @@
"c": "//",
"t": "source.objc comment.line.double-slash.cpp punctuation.definition.comment.cpp",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -14,9 +14,9 @@
"c": "//",
"t": "source.objc comment.line.double-slash.cpp punctuation.definition.comment.cpp",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -25,9 +25,9 @@
"c": " Copyright (c) Microsoft Corporation. All rights reserved.",
"t": "source.objc comment.line.double-slash.cpp",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -36,9 +36,9 @@
"c": "//",
"t": "source.objc comment.line.double-slash.cpp punctuation.definition.comment.cpp",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -179,9 +179,9 @@
"c": "/*",
"t": "source.objc comment.block.c punctuation.definition.comment.begin.c",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -190,9 +190,9 @@
"c": "\tMulti",
"t": "source.objc comment.block.c",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -201,9 +201,9 @@
"c": "\tLine",
"t": "source.objc comment.block.c",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -212,9 +212,9 @@
"c": "\tComments",
"t": "source.objc comment.block.c",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -223,9 +223,9 @@
"c": "*/",
"t": "source.objc comment.block.c punctuation.definition.comment.end.c",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2225,9 +2225,9 @@
"c": "//",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c comment.line.double-slash.cpp punctuation.definition.comment.cpp",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2236,9 +2236,9 @@
"c": " add a tap gesture recognizer",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c comment.line.double-slash.cpp",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
diff --git a/extensions/package.json b/extensions/package.json
index fa2015e1e6f..6c03d54ee8d 100644
--- a/extensions/package.json
+++ b/extensions/package.json
@@ -3,9 +3,9 @@
"version": "0.0.1",
"description": "Dependencies shared by all extensions",
"dependencies": {
- "typescript": "2.9.1"
+ "typescript": "3.0.3"
},
"scripts": {
"postinstall": "node ./postinstall"
}
-}
\ No newline at end of file
+}
diff --git a/extensions/perl/test/colorize-results/test_pl.json b/extensions/perl/test/colorize-results/test_pl.json
index 7e575aa4652..ecfd9660ad8 100644
--- a/extensions/perl/test/colorize-results/test_pl.json
+++ b/extensions/perl/test/colorize-results/test_pl.json
@@ -278,9 +278,9 @@
"c": "#",
"t": "source.perl comment.line.number-sign.perl punctuation.definition.comment.perl",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -289,9 +289,9 @@
"c": " Check for that =.",
"t": "source.perl comment.line.number-sign.perl",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1015,9 +1015,9 @@
"c": "#",
"t": "source.perl comment.line.number-sign.perl punctuation.definition.comment.perl",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1026,9 +1026,9 @@
"c": "#",
"t": "source.perl comment.line.number-sign.perl punctuation.definition.comment.perl",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1037,9 +1037,9 @@
"c": " This function opens and reads one file, and calls",
"t": "source.perl comment.line.number-sign.perl",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1048,9 +1048,9 @@
"c": "#",
"t": "source.perl comment.line.number-sign.perl punctuation.definition.comment.perl",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1059,9 +1059,9 @@
"c": " check_line to analyze each line. Call it with the",
"t": "source.perl comment.line.number-sign.perl",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1070,9 +1070,9 @@
"c": "#",
"t": "source.perl comment.line.number-sign.perl punctuation.definition.comment.perl",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1081,9 +1081,9 @@
"c": " file name.",
"t": "source.perl comment.line.number-sign.perl",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1092,9 +1092,9 @@
"c": "#",
"t": "source.perl comment.line.number-sign.perl punctuation.definition.comment.perl",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1939,9 +1939,9 @@
"c": "#",
"t": "source.perl comment.line.number-sign.perl punctuation.definition.comment.perl",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1950,9 +1950,9 @@
"c": "#",
"t": "source.perl comment.line.number-sign.perl punctuation.definition.comment.perl",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1961,9 +1961,9 @@
"c": " Go through the argument list and check each file",
"t": "source.perl comment.line.number-sign.perl",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1972,9 +1972,9 @@
"c": "#",
"t": "source.perl comment.line.number-sign.perl punctuation.definition.comment.perl",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
diff --git a/extensions/php-language-features/.vscodeignore b/extensions/php-language-features/.vscodeignore
index d43a539fddf..5e3da7eecc7 100644
--- a/extensions/php-language-features/.vscodeignore
+++ b/extensions/php-language-features/.vscodeignore
@@ -1,2 +1,3 @@
src/**
-tsconfig.json
\ No newline at end of file
+tsconfig.json
+out/test/**
\ No newline at end of file
diff --git a/extensions/php-language-features/README.md b/extensions/php-language-features/README.md
new file mode 100644
index 00000000000..c00be6a964e
--- /dev/null
+++ b/extensions/php-language-features/README.md
@@ -0,0 +1,7 @@
+# Language Features for PHP files
+
+**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.
+
+## Features
+
+See [PHP in Visual Studio Code](https://code.visualstudio.com/docs/languages/php) to learn about the features of this extension.
\ No newline at end of file
diff --git a/extensions/php-language-features/package.json b/extensions/php-language-features/package.json
index dc2332a328f..fa6865ec982 100644
--- a/extensions/php-language-features/package.json
+++ b/extensions/php-language-features/package.json
@@ -77,9 +77,9 @@
"watch": "gulp watch-extension:php"
},
"dependencies": {
- "vscode-nls": "^3.2.1"
+ "vscode-nls": "^4.0.0"
},
"devDependencies": {
- "@types/node": "7.0.43"
+ "@types/node": "^8.10.25"
}
}
diff --git a/extensions/php-language-features/package.nls.json b/extensions/php-language-features/package.nls.json
index c991103e41d..3920760d1d2 100644
--- a/extensions/php-language-features/package.nls.json
+++ b/extensions/php-language-features/package.nls.json
@@ -1,5 +1,5 @@
{
- "configuration.suggest.basic": "Configures if the built-in PHP language suggestions are enabled. The support suggests PHP globals and variables.",
+ "configuration.suggest.basic": "Controls whether the built-in PHP language suggestions are enabled. The support suggests PHP globals and variables.",
"configuration.validate.enable": "Enable/disable built-in PHP validation.",
"configuration.validate.executablePath": "Points to the PHP executable.",
"configuration.validate.run": "Whether the linter is run on save or on type.",
diff --git a/extensions/php-language-features/src/features/validationProvider.ts b/extensions/php-language-features/src/features/validationProvider.ts
index d139fde1121..c3c513d3220 100644
--- a/extensions/php-language-features/src/features/validationProvider.ts
+++ b/extensions/php-language-features/src/features/validationProvider.ts
@@ -23,7 +23,7 @@ export class LineDecoder {
this.remaining = null;
}
- public write(buffer: NodeBuffer): string[] {
+ public write(buffer: Buffer): string[] {
var result: string[] = [];
var value = this.remaining
? this.remaining + this.stringDecoder.write(buffer)
diff --git a/extensions/php-language-features/yarn.lock b/extensions/php-language-features/yarn.lock
index 112e5f2ac8d..913d2622d18 100644
--- a/extensions/php-language-features/yarn.lock
+++ b/extensions/php-language-features/yarn.lock
@@ -2,10 +2,10 @@
# yarn lockfile v1
-"@types/node@7.0.43":
- version "7.0.43"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.43.tgz#a187e08495a075f200ca946079c914e1a5fe962c"
+"@types/node@^8.10.25":
+ version "8.10.25"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.25.tgz#801fe4e39372cef18f268db880a5fbfcf71adc7e"
-vscode-nls@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.1.tgz#b1f3e04e8a94a715d5a7bcbc8339c51e6d74ca51"
+vscode-nls@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-4.0.0.tgz#4001c8a6caba5cedb23a9c5ce1090395c0e44002"
diff --git a/extensions/php/package.json b/extensions/php/package.json
index 64b788d2010..53d0b2ebe45 100644
--- a/extensions/php/package.json
+++ b/extensions/php/package.json
@@ -22,7 +22,7 @@
"PHP",
"php"
],
- "firstLine": "^#!/.*\\bphp\\b",
+ "firstLine": "^#!\\s*/.*\\bphp\\b",
"mimetypes": [
"application/x-php"
],
diff --git a/extensions/php/syntaxes/html.tmLanguage.json b/extensions/php/syntaxes/html.tmLanguage.json
index 1ed6de8d2c9..59db289a2d5 100644
--- a/extensions/php/syntaxes/html.tmLanguage.json
+++ b/extensions/php/syntaxes/html.tmLanguage.json
@@ -4,10 +4,111 @@
"If you want to provide a fix or improvement, please create a pull request against the original repository.",
"Once accepted there, we are happy to receive an update request."
],
- "version": "https://github.com/atom/language-php/commit/29c140e1531e0b5e842e5bfd4377f879d8b79cd4",
+ "version": "https://github.com/atom/language-php/commit/72bfa9592e689fdcb70562ff7d882ad5308e79f7",
"name": "PHP",
"scopeName": "text.html.php",
"injections": {
+ "L:source.php string.quoted.single.sql.php source.sql.embedded.php": {
+ "patterns": [
+ {
+ "match": "(#)(\\\\'|[^'])*(?='|$)",
+ "name": "comment.line.number-sign.sql",
+ "captures": {
+ "1": {
+ "name": "punctuation.definition.comment.sql"
+ }
+ }
+ },
+ {
+ "match": "(--)(\\\\'|[^'])*(?='|$)",
+ "name": "comment.line.double-dash.sql",
+ "captures": {
+ "1": {
+ "name": "punctuation.definition.comment.sql"
+ }
+ }
+ },
+ {
+ "match": "\\\\[\\\\'`\"]",
+ "name": "constant.character.escape.php"
+ },
+ {
+ "match": "\"(?=((\\\\\")|[^\"'])*('|$))",
+ "name": "string.quoted.double.unclosed.sql"
+ }
+ ]
+ },
+ "L:source.php string.quoted.double.sql.php source.sql.embedded.php": {
+ "patterns": [
+ {
+ "match": "(#)(\\\\\"|[^\"])*(?=\"|$)",
+ "name": "comment.line.number-sign.sql",
+ "captures": {
+ "1": {
+ "name": "punctuation.definition.comment.sql"
+ }
+ }
+ },
+ {
+ "match": "(--)(\\\\\"|[^\"])*(?=\"|$)",
+ "name": "comment.line.double-dash.sql",
+ "captures": {
+ "1": {
+ "name": "punctuation.definition.comment.sql"
+ }
+ }
+ },
+ {
+ "match": "\\\\[\\\\'`\"]",
+ "name": "constant.character.escape.php"
+ },
+ {
+ "match": "(')([^'\\\\]*)(')",
+ "name": "string.quoted.single.sql",
+ "captures": {
+ "1": {
+ "name": "punctuation.definition.string.begin.sql"
+ },
+ "2": {
+ "patterns": [
+ {
+ "include": "source.php#interpolation_double_quoted"
+ }
+ ]
+ },
+ "3": {
+ "name": "punctuation.definition.string.end.sql"
+ }
+ }
+ },
+ {
+ "match": "(`)([^`\\\\]*)(`)",
+ "name": "string.quoted.other.backtick.sql",
+ "captures": {
+ "1": {
+ "name": "punctuation.definition.string.begin.sql"
+ },
+ "2": {
+ "patterns": [
+ {
+ "include": "source.php#interpolation_double_quoted"
+ }
+ ]
+ },
+ "3": {
+ "name": "punctuation.definition.string.end.sql"
+ }
+ }
+ },
+ {
+ "match": "'(?=((\\\\')|[^'\"])*(\"|$))",
+ "name": "string.quoted.single.unclosed.sql"
+ },
+ {
+ "include": "source.php#interpolation_double_quoted"
+ }
+ ]
+ },
"text.html.php - (meta.embedded | meta.tag), L:text.html.php meta.tag, L:text.html.php source.js": {
"patterns": [
{
diff --git a/extensions/php/syntaxes/php.tmLanguage.json b/extensions/php/syntaxes/php.tmLanguage.json
index 3bc1a69114d..62153a2b04b 100644
--- a/extensions/php/syntaxes/php.tmLanguage.json
+++ b/extensions/php/syntaxes/php.tmLanguage.json
@@ -4,7 +4,7 @@
"If you want to provide a fix or improvement, please create a pull request against the original repository.",
"Once accepted there, we are happy to receive an update request."
],
- "version": "https://github.com/atom/language-php/commit/b054176835218c446d22b3c1b9dcfdcf8cacf49f",
+ "version": "https://github.com/atom/language-php/commit/13842b6dfb4568f76e8fa0c08dbff74347ee13c6",
"scopeName": "source.php",
"patterns": [
{
@@ -2544,59 +2544,6 @@
},
"name": "string.quoted.double.sql.php",
"patterns": [
- {
- "match": "(#)(\\\\\"|[^\"])*(?=\"|$)",
- "name": "comment.line.number-sign.sql",
- "captures": {
- "1": {
- "name": "punctuation.definition.comment.sql"
- }
- }
- },
- {
- "match": "(--)(\\\\\"|[^\"])*(?=\"|$)",
- "name": "comment.line.double-dash.sql",
- "captures": {
- "1": {
- "name": "punctuation.definition.comment.sql"
- }
- }
- },
- {
- "match": "\\\\[\\\\\"`']",
- "name": "constant.character.escape.php"
- },
- {
- "match": "'(?=((\\\\')|[^'\"])*(\"|$))",
- "name": "string.quoted.single.unclosed.sql"
- },
- {
- "match": "`(?=((\\\\`)|[^`\"])*(\"|$))",
- "name": "string.quoted.other.backtick.unclosed.sql"
- },
- {
- "begin": "'",
- "end": "'",
- "name": "string.quoted.single.sql",
- "patterns": [
- {
- "include": "#interpolation_double_quoted"
- }
- ]
- },
- {
- "begin": "`",
- "end": "`",
- "name": "string.quoted.other.backtick.sql",
- "patterns": [
- {
- "include": "#interpolation_double_quoted"
- }
- ]
- },
- {
- "include": "#interpolation_double_quoted"
- },
{
"include": "source.sql"
}
@@ -2618,36 +2565,6 @@
},
"name": "string.quoted.single.sql.php",
"patterns": [
- {
- "match": "(#)(\\\\'|[^'])*(?='|$)",
- "name": "comment.line.number-sign.sql",
- "captures": {
- "1": {
- "name": "punctuation.definition.comment.sql"
- }
- }
- },
- {
- "match": "(--)(\\\\'|[^'])*(?='|$)",
- "name": "comment.line.double-dash.sql",
- "captures": {
- "1": {
- "name": "punctuation.definition.comment.sql"
- }
- }
- },
- {
- "match": "\\\\[\\\\'`\"]",
- "name": "constant.character.escape.php"
- },
- {
- "match": "`(?=((\\\\`)|[^`'])*('|$))",
- "name": "string.quoted.other.backtick.unclosed.sql"
- },
- {
- "match": "\"(?=((\\\\\")|[^\"'])*('|$))",
- "name": "string.quoted.double.unclosed.sql"
- },
{
"include": "source.sql"
}
diff --git a/extensions/php/test/colorize-results/issue-28354_php.json b/extensions/php/test/colorize-results/issue-28354_php.json
index cc9924d3945..12e439430fb 100644
--- a/extensions/php/test/colorize-results/issue-28354_php.json
+++ b/extensions/php/test/colorize-results/issue-28354_php.json
@@ -1,7 +1,7 @@
[
{
"c": "<",
- "t": "text.html.php meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.begin.html",
+ "t": "text.html.php meta.embedded.block.html meta.tag.metadata.script.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -12,7 +12,7 @@
},
{
"c": "script",
- "t": "text.html.php meta.embedded.block.html meta.tag.metadata.script.html entity.name.tag.html",
+ "t": "text.html.php meta.embedded.block.html meta.tag.metadata.script.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -23,7 +23,7 @@
},
{
"c": ">",
- "t": "text.html.php meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.end.html",
+ "t": "text.html.php meta.embedded.block.html meta.tag.metadata.script.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -496,7 +496,7 @@
},
{
"c": "<",
- "t": "text.html.php meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.begin.html source.js",
+ "t": "text.html.php meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.begin.html source.js",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -507,7 +507,7 @@
},
{
"c": "/",
- "t": "text.html.php meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.begin.html",
+ "t": "text.html.php meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -518,7 +518,7 @@
},
{
"c": "script",
- "t": "text.html.php meta.embedded.block.html meta.tag.metadata.script.html entity.name.tag.html",
+ "t": "text.html.php meta.embedded.block.html meta.tag.metadata.script.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -529,7 +529,7 @@
},
{
"c": ">",
- "t": "text.html.php meta.embedded.block.html meta.tag.metadata.script.html punctuation.definition.tag.end.html",
+ "t": "text.html.php meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
diff --git a/extensions/php/test/colorize-results/test_php.json b/extensions/php/test/colorize-results/test_php.json
index 4cb58182b1a..277428ac11b 100644
--- a/extensions/php/test/colorize-results/test_php.json
+++ b/extensions/php/test/colorize-results/test_php.json
@@ -1,7 +1,7 @@
[
{
"c": "<",
- "t": "text.html.php meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.php meta.tag.structure.html.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -12,7 +12,7 @@
},
{
"c": "html",
- "t": "text.html.php meta.tag.structure.any.html entity.name.tag.structure.any.html",
+ "t": "text.html.php meta.tag.structure.html.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -23,7 +23,7 @@
},
{
"c": ">",
- "t": "text.html.php meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.php meta.tag.structure.html.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -34,7 +34,7 @@
},
{
"c": "<",
- "t": "text.html.php meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.php meta.tag.structure.head.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -45,7 +45,7 @@
},
{
"c": "head",
- "t": "text.html.php meta.tag.structure.any.html entity.name.tag.structure.any.html",
+ "t": "text.html.php meta.tag.structure.head.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -56,7 +56,7 @@
},
{
"c": ">",
- "t": "text.html.php meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.php meta.tag.structure.head.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -78,7 +78,7 @@
},
{
"c": "<",
- "t": "text.html.php meta.tag.inline.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.php meta.tag.metadata.title.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -89,7 +89,7 @@
},
{
"c": "title",
- "t": "text.html.php meta.tag.inline.any.html entity.name.tag.inline.any.html",
+ "t": "text.html.php meta.tag.metadata.title.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -100,7 +100,7 @@
},
{
"c": ">",
- "t": "text.html.php meta.tag.inline.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.php meta.tag.metadata.title.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -122,7 +122,7 @@
},
{
"c": "",
- "t": "text.html.php meta.tag.inline.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.php meta.tag.metadata.title.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -133,7 +133,7 @@
},
{
"c": "title",
- "t": "text.html.php meta.tag.inline.any.html entity.name.tag.inline.any.html",
+ "t": "text.html.php meta.tag.metadata.title.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -144,7 +144,7 @@
},
{
"c": ">",
- "t": "text.html.php meta.tag.inline.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.php meta.tag.metadata.title.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -155,7 +155,7 @@
},
{
"c": "",
- "t": "text.html.php meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.php meta.tag.structure.head.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -166,7 +166,7 @@
},
{
"c": "head",
- "t": "text.html.php meta.tag.structure.any.html entity.name.tag.structure.any.html",
+ "t": "text.html.php meta.tag.structure.head.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -177,7 +177,7 @@
},
{
"c": ">",
- "t": "text.html.php meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.php meta.tag.structure.head.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -188,7 +188,7 @@
},
{
"c": "<",
- "t": "text.html.php meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.php meta.tag.structure.body.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -199,7 +199,7 @@
},
{
"c": "body",
- "t": "text.html.php meta.tag.structure.any.html entity.name.tag.structure.any.html",
+ "t": "text.html.php meta.tag.structure.body.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -210,7 +210,7 @@
},
{
"c": ">",
- "t": "text.html.php meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.php meta.tag.structure.body.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -322,9 +322,9 @@
"c": "//",
"t": "text.html.php meta.embedded.block.php source.php comment.line.double-slash.php punctuation.definition.comment.php",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -333,9 +333,9 @@
"c": " Code to be executed",
"t": "text.html.php meta.embedded.block.php source.php comment.line.double-slash.php",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -377,9 +377,9 @@
"c": "/*",
"t": "text.html.php meta.embedded.block.php source.php comment.block.php punctuation.definition.comment.php",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -388,9 +388,9 @@
"c": " Example PHP file",
"t": "text.html.php meta.embedded.block.php source.php comment.block.php",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -399,9 +399,9 @@
"c": "\tmultiline comment",
"t": "text.html.php meta.embedded.block.php source.php comment.block.php",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -410,9 +410,9 @@
"c": "\t",
"t": "text.html.php meta.embedded.block.php source.php comment.block.php",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -421,9 +421,9 @@
"c": "*/",
"t": "text.html.php meta.embedded.block.php source.php comment.block.php punctuation.definition.comment.php",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2654,9 +2654,9 @@
"c": "//",
"t": "text.html.php meta.embedded.block.php source.php comment.line.double-slash.php punctuation.definition.comment.php",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2665,9 +2665,9 @@
"c": " display shuffled cards (EXAMPLE ONLY)",
"t": "text.html.php meta.embedded.block.php source.php comment.line.double-slash.php",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -3565,7 +3565,7 @@
},
{
"c": "",
- "t": "text.html.php meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.php meta.tag.structure.body.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -3576,7 +3576,7 @@
},
{
"c": "body",
- "t": "text.html.php meta.tag.structure.any.html entity.name.tag.structure.any.html",
+ "t": "text.html.php meta.tag.structure.body.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -3587,7 +3587,7 @@
},
{
"c": ">",
- "t": "text.html.php meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.php meta.tag.structure.body.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -3598,7 +3598,7 @@
},
{
"c": "",
- "t": "text.html.php meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.php meta.tag.structure.html.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -3609,7 +3609,7 @@
},
{
"c": "html",
- "t": "text.html.php meta.tag.structure.any.html entity.name.tag.structure.any.html",
+ "t": "text.html.php meta.tag.structure.html.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -3620,7 +3620,7 @@
},
{
"c": ">",
- "t": "text.html.php meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.php meta.tag.structure.html.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
diff --git a/extensions/powershell/package.json b/extensions/powershell/package.json
index 5fcb928726d..399f6fc5601 100644
--- a/extensions/powershell/package.json
+++ b/extensions/powershell/package.json
@@ -10,7 +10,7 @@
"id": "powershell",
"extensions": [ ".ps1", ".psm1", ".psd1", ".pssc", ".psrc" ],
"aliases": [ "PowerShell", "powershell", "ps", "ps1" ],
- "firstLine": "^#!/.*\\bpwsh\\b",
+ "firstLine": "^#!\\s*/.*\\bpwsh\\b",
"configuration": "./language-configuration.json"
}],
"grammars": [{
diff --git a/extensions/powershell/syntaxes/powershell.tmLanguage.json b/extensions/powershell/syntaxes/powershell.tmLanguage.json
index 194627d46a5..60dee137b19 100644
--- a/extensions/powershell/syntaxes/powershell.tmLanguage.json
+++ b/extensions/powershell/syntaxes/powershell.tmLanguage.json
@@ -4,7 +4,7 @@
"If you want to provide a fix or improvement, please create a pull request against the original repository.",
"Once accepted there, we are happy to receive an update request."
],
- "version": "https://github.com/PowerShell/EditorSyntax/commit/529562fbe4ba9abde22282ee8b00141284968f4b",
+ "version": "https://github.com/PowerShell/EditorSyntax/commit/6f5438611c54922ea94c81532a2dcfee72190039",
"name": "PowerShell",
"scopeName": "source.powershell",
"patterns": [
@@ -157,16 +157,16 @@
}
]
},
- {
- "match": "(?",
- "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml meta.tag.other.html punctuation.definition.tag.end.html",
+ "c": "><",
+ "t": "text.html.cshtml keyword.operator.relational.cs",
"r": {
- "dark_plus": "punctuation.definition.tag: #808080",
- "light_plus": "punctuation.definition.tag: #800000",
- "dark_vs": "punctuation.definition.tag: #808080",
- "light_vs": "punctuation.definition.tag: #800000",
- "hc_black": "punctuation.definition.tag: #808080"
- }
- },
- {
- "c": "<",
- "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml meta.tag.other.html punctuation.definition.tag.begin.html",
- "r": {
- "dark_plus": "punctuation.definition.tag: #808080",
- "light_plus": "punctuation.definition.tag: #800000",
- "dark_vs": "punctuation.definition.tag: #808080",
- "light_vs": "punctuation.definition.tag: #800000",
- "hc_black": "punctuation.definition.tag: #808080"
+ "dark_plus": "keyword.operator: #D4D4D4",
+ "light_plus": "keyword.operator: #000000",
+ "dark_vs": "keyword.operator: #D4D4D4",
+ "light_vs": "keyword.operator: #000000",
+ "hc_black": "keyword.operator: #D4D4D4"
}
},
{
"c": "bold",
- "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml meta.tag.other.html entity.name.tag.other.html",
+ "t": "text.html.cshtml variable.other.readwrite.cs",
"r": {
- "dark_plus": "entity.name.tag: #569CD6",
- "light_plus": "entity.name.tag: #800000",
- "dark_vs": "entity.name.tag: #569CD6",
- "light_vs": "entity.name.tag: #800000",
- "hc_black": "entity.name.tag: #569CD6"
+ "dark_plus": "variable: #9CDCFE",
+ "light_plus": "variable: #001080",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "variable: #9CDCFE"
}
},
{
"c": ">",
- "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml meta.tag.other.html punctuation.definition.tag.end.html",
+ "t": "text.html.cshtml keyword.operator.relational.cs",
"r": {
- "dark_plus": "punctuation.definition.tag: #808080",
- "light_plus": "punctuation.definition.tag: #800000",
- "dark_vs": "punctuation.definition.tag: #808080",
- "light_vs": "punctuation.definition.tag: #800000",
- "hc_black": "punctuation.definition.tag: #808080"
+ "dark_plus": "keyword.operator: #D4D4D4",
+ "light_plus": "keyword.operator: #000000",
+ "dark_vs": "keyword.operator: #D4D4D4",
+ "light_vs": "keyword.operator: #000000",
+ "hc_black": "keyword.operator: #D4D4D4"
}
},
{
"c": "totalMessage",
- "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml keyword.control.cshtml",
+ "t": "text.html.cshtml variable.other.readwrite.cs",
"r": {
- "dark_plus": "keyword.control: #C586C0",
- "light_plus": "keyword.control: #AF00DB",
- "dark_vs": "keyword.control: #569CD6",
- "light_vs": "keyword.control: #0000FF",
- "hc_black": "keyword.control: #C586C0"
+ "dark_plus": "variable: #9CDCFE",
+ "light_plus": "variable: #001080",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "variable: #9CDCFE"
}
},
{
"c": " ",
- "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml",
+ "t": "text.html.cshtml",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -958,7 +1189,7 @@
},
{
"c": "=",
- "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml keyword.operator.assignment.cs",
+ "t": "text.html.cshtml keyword.operator.assignment.cs",
"r": {
"dark_plus": "keyword.operator: #D4D4D4",
"light_plus": "keyword.operator: #000000",
@@ -969,7 +1200,7 @@
},
{
"c": " ",
- "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml",
+ "t": "text.html.cshtml",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -979,8 +1210,30 @@
}
},
{
- "c": "\"Total = \"",
- "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml string.quoted.double.cshtml",
+ "c": "\"",
+ "t": "text.html.cshtml string.quoted.double.cs punctuation.definition.string.begin.cs",
+ "r": {
+ "dark_plus": "string: #CE9178",
+ "light_plus": "string: #A31515",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "string: #CE9178"
+ }
+ },
+ {
+ "c": "Total = ",
+ "t": "text.html.cshtml string.quoted.double.cs",
+ "r": {
+ "dark_plus": "string: #CE9178",
+ "light_plus": "string: #A31515",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "string: #CE9178"
+ }
+ },
+ {
+ "c": "\"",
+ "t": "text.html.cshtml string.quoted.double.cs punctuation.definition.string.end.cs",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string: #A31515",
@@ -991,7 +1244,7 @@
},
{
"c": " ",
- "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml",
+ "t": "text.html.cshtml",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1002,7 +1255,7 @@
},
{
"c": "+",
- "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml keyword.operator.arithmetic.cs",
+ "t": "text.html.cshtml keyword.operator.arithmetic.cs",
"r": {
"dark_plus": "keyword.operator: #D4D4D4",
"light_plus": "keyword.operator: #000000",
@@ -1013,7 +1266,7 @@
},
{
"c": " ",
- "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml",
+ "t": "text.html.cshtml",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1024,7 +1277,128 @@
},
{
"c": "total",
- "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml keyword.control.cshtml",
+ "t": "text.html.cshtml variable.other.readwrite.cs",
+ "r": {
+ "dark_plus": "variable: #9CDCFE",
+ "light_plus": "variable: #001080",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "variable: #9CDCFE"
+ }
+ },
+ {
+ "c": ";",
+ "t": "text.html.cshtml punctuation.terminator.statement.cs",
+ "r": {
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
+ }
+ },
+ {
+ "c": "<",
+ "t": "text.html.cshtml keyword.operator.relational.cs",
+ "r": {
+ "dark_plus": "keyword.operator: #D4D4D4",
+ "light_plus": "keyword.operator: #000000",
+ "dark_vs": "keyword.operator: #D4D4D4",
+ "light_vs": "keyword.operator: #000000",
+ "hc_black": "keyword.operator: #D4D4D4"
+ }
+ },
+ {
+ "c": "/",
+ "t": "text.html.cshtml keyword.operator.arithmetic.cs",
+ "r": {
+ "dark_plus": "keyword.operator: #D4D4D4",
+ "light_plus": "keyword.operator: #000000",
+ "dark_vs": "keyword.operator: #D4D4D4",
+ "light_vs": "keyword.operator: #000000",
+ "hc_black": "keyword.operator: #D4D4D4"
+ }
+ },
+ {
+ "c": "bold",
+ "t": "text.html.cshtml variable.other.readwrite.cs",
+ "r": {
+ "dark_plus": "variable: #9CDCFE",
+ "light_plus": "variable: #001080",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "variable: #9CDCFE"
+ }
+ },
+ {
+ "c": "><",
+ "t": "text.html.cshtml keyword.operator.relational.cs",
+ "r": {
+ "dark_plus": "keyword.operator: #D4D4D4",
+ "light_plus": "keyword.operator: #000000",
+ "dark_vs": "keyword.operator: #D4D4D4",
+ "light_vs": "keyword.operator: #000000",
+ "hc_black": "keyword.operator: #D4D4D4"
+ }
+ },
+ {
+ "c": "/",
+ "t": "text.html.cshtml keyword.operator.arithmetic.cs",
+ "r": {
+ "dark_plus": "keyword.operator: #D4D4D4",
+ "light_plus": "keyword.operator: #000000",
+ "dark_vs": "keyword.operator: #D4D4D4",
+ "light_vs": "keyword.operator: #000000",
+ "hc_black": "keyword.operator: #D4D4D4"
+ }
+ },
+ {
+ "c": "italic",
+ "t": "text.html.cshtml variable.other.readwrite.cs",
+ "r": {
+ "dark_plus": "variable: #9CDCFE",
+ "light_plus": "variable: #001080",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "variable: #9CDCFE"
+ }
+ },
+ {
+ "c": ">",
+ "t": "text.html.cshtml keyword.operator.relational.cs",
+ "r": {
+ "dark_plus": "keyword.operator: #D4D4D4",
+ "light_plus": "keyword.operator: #000000",
+ "dark_vs": "keyword.operator: #D4D4D4",
+ "light_vs": "keyword.operator: #000000",
+ "hc_black": "keyword.operator: #D4D4D4"
+ }
+ },
+ {
+ "c": " ",
+ "t": "text.html.cshtml",
+ "r": {
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
+ }
+ },
+ {
+ "c": "}",
+ "t": "text.html.cshtml punctuation.curlybrace.close.cs",
+ "r": {
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
+ }
+ },
+ {
+ "c": "}",
+ "t": "text.html.cshtml keyword.control.cshtml",
"r": {
"dark_plus": "keyword.control: #C586C0",
"light_plus": "keyword.control: #AF00DB",
@@ -1033,119 +1407,9 @@
"hc_black": "keyword.control: #C586C0"
}
},
- {
- "c": ";",
- "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml punctuation.terminator.statement.cs",
- "r": {
- "dark_plus": "default: #D4D4D4",
- "light_plus": "default: #000000",
- "dark_vs": "default: #D4D4D4",
- "light_vs": "default: #000000",
- "hc_black": "default: #FFFFFF"
- }
- },
- {
- "c": "",
- "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml meta.tag.other.html punctuation.definition.tag.begin.html",
- "r": {
- "dark_plus": "punctuation.definition.tag: #808080",
- "light_plus": "punctuation.definition.tag: #800000",
- "dark_vs": "punctuation.definition.tag: #808080",
- "light_vs": "punctuation.definition.tag: #800000",
- "hc_black": "punctuation.definition.tag: #808080"
- }
- },
- {
- "c": "bold",
- "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml meta.tag.other.html entity.name.tag.other.html",
- "r": {
- "dark_plus": "entity.name.tag: #569CD6",
- "light_plus": "entity.name.tag: #800000",
- "dark_vs": "entity.name.tag: #569CD6",
- "light_vs": "entity.name.tag: #800000",
- "hc_black": "entity.name.tag: #569CD6"
- }
- },
- {
- "c": ">",
- "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml meta.tag.other.html punctuation.definition.tag.end.html",
- "r": {
- "dark_plus": "punctuation.definition.tag: #808080",
- "light_plus": "punctuation.definition.tag: #800000",
- "dark_vs": "punctuation.definition.tag: #808080",
- "light_vs": "punctuation.definition.tag: #800000",
- "hc_black": "punctuation.definition.tag: #808080"
- }
- },
- {
- "c": "",
- "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml meta.tag.other.html punctuation.definition.tag.begin.html",
- "r": {
- "dark_plus": "punctuation.definition.tag: #808080",
- "light_plus": "punctuation.definition.tag: #800000",
- "dark_vs": "punctuation.definition.tag: #808080",
- "light_vs": "punctuation.definition.tag: #800000",
- "hc_black": "punctuation.definition.tag: #808080"
- }
- },
- {
- "c": "italic",
- "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml meta.tag.other.html entity.name.tag.other.html",
- "r": {
- "dark_plus": "entity.name.tag: #569CD6",
- "light_plus": "entity.name.tag: #800000",
- "dark_vs": "entity.name.tag: #569CD6",
- "light_vs": "entity.name.tag: #800000",
- "hc_black": "entity.name.tag: #569CD6"
- }
- },
- {
- "c": ">",
- "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml meta.tag.other.html punctuation.definition.tag.end.html",
- "r": {
- "dark_plus": "punctuation.definition.tag: #808080",
- "light_plus": "punctuation.definition.tag: #800000",
- "dark_vs": "punctuation.definition.tag: #808080",
- "light_vs": "punctuation.definition.tag: #800000",
- "hc_black": "punctuation.definition.tag: #808080"
- }
- },
- {
- "c": " ",
- "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml",
- "r": {
- "dark_plus": "default: #D4D4D4",
- "light_plus": "default: #000000",
- "dark_vs": "default: #D4D4D4",
- "light_vs": "default: #000000",
- "hc_black": "default: #FFFFFF"
- }
- },
- {
- "c": "}",
- "t": "text.html.cshtml section.embedded.source.cshtml section.embedded.source.cshtml punctuation.section.embedded.begin.cshtml",
- "r": {
- "dark_plus": "punctuation.section.embedded: #569CD6",
- "light_plus": "punctuation.section.embedded: #0000FF",
- "dark_vs": "punctuation.section.embedded: #569CD6",
- "light_vs": "punctuation.section.embedded: #0000FF",
- "hc_black": "punctuation.section.embedded: #569CD6"
- }
- },
- {
- "c": "}",
- "t": "text.html.cshtml section.embedded.source.cshtml punctuation.section.embedded.begin.cshtml",
- "r": {
- "dark_plus": "punctuation.section.embedded: #569CD6",
- "light_plus": "punctuation.section.embedded: #0000FF",
- "dark_vs": "punctuation.section.embedded: #569CD6",
- "light_vs": "punctuation.section.embedded: #0000FF",
- "hc_black": "punctuation.section.embedded: #569CD6"
- }
- },
{
"c": "",
- "t": "text.html.cshtml meta.tag.sgml.html punctuation.definition.tag.html",
- "r": {
- "dark_plus": "punctuation.definition.tag: #808080",
- "light_plus": "punctuation.definition.tag: #800000",
- "dark_vs": "punctuation.definition.tag: #808080",
- "light_vs": "punctuation.definition.tag: #800000",
- "hc_black": "punctuation.definition.tag: #808080"
- }
- },
- {
- "c": "<",
- "t": "text.html.cshtml meta.tag.structure.any.html punctuation.definition.tag.html",
- "r": {
- "dark_plus": "punctuation.definition.tag: #808080",
- "light_plus": "punctuation.definition.tag: #800000",
- "dark_vs": "punctuation.definition.tag: #808080",
- "light_vs": "punctuation.definition.tag: #800000",
- "hc_black": "punctuation.definition.tag: #808080"
- }
- },
- {
- "c": "html",
- "t": "text.html.cshtml meta.tag.structure.any.html entity.name.tag.structure.any.html",
+ "c": "DOCTYPE",
+ "t": "text.html.cshtml meta.tag.metadata.doctype.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -1200,7 +1431,62 @@
},
{
"c": " ",
- "t": "text.html.cshtml meta.tag.structure.any.html",
+ "t": "text.html.cshtml meta.tag.metadata.doctype.html",
+ "r": {
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
+ }
+ },
+ {
+ "c": "html",
+ "t": "text.html.cshtml meta.tag.metadata.doctype.html entity.other.attribute-name.html",
+ "r": {
+ "dark_plus": "entity.other.attribute-name: #9CDCFE",
+ "light_plus": "entity.other.attribute-name: #FF0000",
+ "dark_vs": "entity.other.attribute-name: #9CDCFE",
+ "light_vs": "entity.other.attribute-name: #FF0000",
+ "hc_black": "entity.other.attribute-name: #9CDCFE"
+ }
+ },
+ {
+ "c": ">",
+ "t": "text.html.cshtml meta.tag.metadata.doctype.html punctuation.definition.tag.end.html",
+ "r": {
+ "dark_plus": "punctuation.definition.tag: #808080",
+ "light_plus": "punctuation.definition.tag: #800000",
+ "dark_vs": "punctuation.definition.tag: #808080",
+ "light_vs": "punctuation.definition.tag: #800000",
+ "hc_black": "punctuation.definition.tag: #808080"
+ }
+ },
+ {
+ "c": "<",
+ "t": "text.html.cshtml meta.tag.structure.html.start.html punctuation.definition.tag.begin.html",
+ "r": {
+ "dark_plus": "punctuation.definition.tag: #808080",
+ "light_plus": "punctuation.definition.tag: #800000",
+ "dark_vs": "punctuation.definition.tag: #808080",
+ "light_vs": "punctuation.definition.tag: #800000",
+ "hc_black": "punctuation.definition.tag: #808080"
+ }
+ },
+ {
+ "c": "html",
+ "t": "text.html.cshtml meta.tag.structure.html.start.html entity.name.tag.html",
+ "r": {
+ "dark_plus": "entity.name.tag: #569CD6",
+ "light_plus": "entity.name.tag: #800000",
+ "dark_vs": "entity.name.tag: #569CD6",
+ "light_vs": "entity.name.tag: #800000",
+ "hc_black": "entity.name.tag: #569CD6"
+ }
+ },
+ {
+ "c": " ",
+ "t": "text.html.cshtml meta.tag.structure.html.start.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1211,7 +1497,7 @@
},
{
"c": "lang",
- "t": "text.html.cshtml meta.tag.structure.any.html entity.other.attribute-name.html",
+ "t": "text.html.cshtml meta.tag.structure.html.start.html meta.attribute.lang.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -1222,7 +1508,7 @@
},
{
"c": "=",
- "t": "text.html.cshtml meta.tag.structure.any.html",
+ "t": "text.html.cshtml meta.tag.structure.html.start.html meta.attribute.lang.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1233,7 +1519,7 @@
},
{
"c": "\"",
- "t": "text.html.cshtml meta.tag.structure.any.html string.quoted.double.html punctuation.definition.string.begin.html",
+ "t": "text.html.cshtml meta.tag.structure.html.start.html meta.attribute.lang.html string.quoted.double.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -1244,7 +1530,7 @@
},
{
"c": "en",
- "t": "text.html.cshtml meta.tag.structure.any.html string.quoted.double.html",
+ "t": "text.html.cshtml meta.tag.structure.html.start.html meta.attribute.lang.html string.quoted.double.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -1255,7 +1541,7 @@
},
{
"c": "\"",
- "t": "text.html.cshtml meta.tag.structure.any.html string.quoted.double.html punctuation.definition.string.end.html",
+ "t": "text.html.cshtml meta.tag.structure.html.start.html meta.attribute.lang.html string.quoted.double.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -1266,7 +1552,7 @@
},
{
"c": ">",
- "t": "text.html.cshtml meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.cshtml meta.tag.structure.html.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1288,7 +1574,7 @@
},
{
"c": "<",
- "t": "text.html.cshtml meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.cshtml meta.tag.structure.head.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1299,7 +1585,7 @@
},
{
"c": "head",
- "t": "text.html.cshtml meta.tag.structure.any.html entity.name.tag.structure.any.html",
+ "t": "text.html.cshtml meta.tag.structure.head.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -1310,7 +1596,7 @@
},
{
"c": ">",
- "t": "text.html.cshtml meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.cshtml meta.tag.structure.head.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1332,7 +1618,7 @@
},
{
"c": "<",
- "t": "text.html.cshtml meta.tag.inline.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.cshtml meta.tag.metadata.title.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1343,7 +1629,7 @@
},
{
"c": "title",
- "t": "text.html.cshtml meta.tag.inline.any.html entity.name.tag.inline.any.html",
+ "t": "text.html.cshtml meta.tag.metadata.title.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -1354,7 +1640,7 @@
},
{
"c": ">",
- "t": "text.html.cshtml meta.tag.inline.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.cshtml meta.tag.metadata.title.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1376,7 +1662,7 @@
},
{
"c": "",
- "t": "text.html.cshtml meta.tag.inline.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.cshtml meta.tag.metadata.title.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1387,7 +1673,7 @@
},
{
"c": "title",
- "t": "text.html.cshtml meta.tag.inline.any.html entity.name.tag.inline.any.html",
+ "t": "text.html.cshtml meta.tag.metadata.title.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -1398,7 +1684,7 @@
},
{
"c": ">",
- "t": "text.html.cshtml meta.tag.inline.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.cshtml meta.tag.metadata.title.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1420,7 +1706,7 @@
},
{
"c": "<",
- "t": "text.html.cshtml meta.tag.inline.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.cshtml meta.tag.metadata.meta.void.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1431,7 +1717,7 @@
},
{
"c": "meta",
- "t": "text.html.cshtml meta.tag.inline.any.html entity.name.tag.inline.any.html",
+ "t": "text.html.cshtml meta.tag.metadata.meta.void.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -1442,7 +1728,7 @@
},
{
"c": " ",
- "t": "text.html.cshtml meta.tag.inline.any.html",
+ "t": "text.html.cshtml meta.tag.metadata.meta.void.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1453,7 +1739,7 @@
},
{
"c": "charset",
- "t": "text.html.cshtml meta.tag.inline.any.html entity.other.attribute-name.html",
+ "t": "text.html.cshtml meta.tag.metadata.meta.void.html meta.attribute.charset.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -1464,7 +1750,7 @@
},
{
"c": "=",
- "t": "text.html.cshtml meta.tag.inline.any.html",
+ "t": "text.html.cshtml meta.tag.metadata.meta.void.html meta.attribute.charset.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1475,7 +1761,7 @@
},
{
"c": "\"",
- "t": "text.html.cshtml meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.begin.html",
+ "t": "text.html.cshtml meta.tag.metadata.meta.void.html meta.attribute.charset.html string.quoted.double.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -1486,7 +1772,7 @@
},
{
"c": "utf-8",
- "t": "text.html.cshtml meta.tag.inline.any.html string.quoted.double.html",
+ "t": "text.html.cshtml meta.tag.metadata.meta.void.html meta.attribute.charset.html string.quoted.double.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -1497,7 +1783,7 @@
},
{
"c": "\"",
- "t": "text.html.cshtml meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.end.html",
+ "t": "text.html.cshtml meta.tag.metadata.meta.void.html meta.attribute.charset.html string.quoted.double.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -1507,8 +1793,19 @@
}
},
{
- "c": " />",
- "t": "text.html.cshtml meta.tag.inline.any.html punctuation.definition.tag.end.html",
+ "c": " ",
+ "t": "text.html.cshtml meta.tag.metadata.meta.void.html",
+ "r": {
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
+ }
+ },
+ {
+ "c": "/>",
+ "t": "text.html.cshtml meta.tag.metadata.meta.void.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1530,7 +1827,7 @@
},
{
"c": "",
- "t": "text.html.cshtml meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.cshtml meta.tag.structure.head.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1541,7 +1838,7 @@
},
{
"c": "head",
- "t": "text.html.cshtml meta.tag.structure.any.html entity.name.tag.structure.any.html",
+ "t": "text.html.cshtml meta.tag.structure.head.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -1552,7 +1849,7 @@
},
{
"c": ">",
- "t": "text.html.cshtml meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.cshtml meta.tag.structure.head.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1563,7 +1860,7 @@
},
{
"c": "<",
- "t": "text.html.cshtml meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.cshtml meta.tag.structure.body.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1574,7 +1871,7 @@
},
{
"c": "body",
- "t": "text.html.cshtml meta.tag.structure.any.html entity.name.tag.structure.any.html",
+ "t": "text.html.cshtml meta.tag.structure.body.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -1585,7 +1882,7 @@
},
{
"c": ">",
- "t": "text.html.cshtml meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.cshtml meta.tag.structure.body.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1607,7 +1904,7 @@
},
{
"c": "<",
- "t": "text.html.cshtml meta.tag.block.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.cshtml meta.tag.structure.p.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1618,7 +1915,7 @@
},
{
"c": "p",
- "t": "text.html.cshtml meta.tag.block.any.html entity.name.tag.block.any.html",
+ "t": "text.html.cshtml meta.tag.structure.p.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -1629,7 +1926,7 @@
},
{
"c": ">",
- "t": "text.html.cshtml meta.tag.block.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.cshtml meta.tag.structure.p.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1651,7 +1948,7 @@
},
{
"c": "<",
- "t": "text.html.cshtml meta.tag.inline.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.cshtml meta.tag.inline.strong.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1662,7 +1959,7 @@
},
{
"c": "strong",
- "t": "text.html.cshtml meta.tag.inline.any.html entity.name.tag.inline.any.html",
+ "t": "text.html.cshtml meta.tag.inline.strong.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -1673,7 +1970,7 @@
},
{
"c": ">",
- "t": "text.html.cshtml meta.tag.inline.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.cshtml meta.tag.inline.strong.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1695,7 +1992,7 @@
},
{
"c": "",
- "t": "text.html.cshtml meta.tag.inline.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.cshtml meta.tag.inline.strong.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1706,7 +2003,7 @@
},
{
"c": "strong",
- "t": "text.html.cshtml meta.tag.inline.any.html entity.name.tag.inline.any.html",
+ "t": "text.html.cshtml meta.tag.inline.strong.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -1717,7 +2014,7 @@
},
{
"c": ">",
- "t": "text.html.cshtml meta.tag.inline.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.cshtml meta.tag.inline.strong.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1739,7 +2036,7 @@
},
{
"c": "",
- "t": "text.html.cshtml meta.tag.block.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.cshtml meta.tag.structure.p.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1750,7 +2047,7 @@
},
{
"c": "p",
- "t": "text.html.cshtml meta.tag.block.any.html entity.name.tag.block.any.html",
+ "t": "text.html.cshtml meta.tag.structure.p.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -1761,7 +2058,7 @@
},
{
"c": ">",
- "t": "text.html.cshtml meta.tag.block.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.cshtml meta.tag.structure.p.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1783,7 +2080,7 @@
},
{
"c": "<",
- "t": "text.html.cshtml meta.tag.block.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.cshtml meta.tag.structure.form.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1794,7 +2091,7 @@
},
{
"c": "form",
- "t": "text.html.cshtml meta.tag.block.any.html entity.name.tag.block.any.html",
+ "t": "text.html.cshtml meta.tag.structure.form.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -1805,7 +2102,7 @@
},
{
"c": " ",
- "t": "text.html.cshtml meta.tag.block.any.html",
+ "t": "text.html.cshtml meta.tag.structure.form.start.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1816,7 +2113,7 @@
},
{
"c": "action",
- "t": "text.html.cshtml meta.tag.block.any.html entity.other.attribute-name.html",
+ "t": "text.html.cshtml meta.tag.structure.form.start.html meta.attribute.action.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -1827,7 +2124,7 @@
},
{
"c": "=",
- "t": "text.html.cshtml meta.tag.block.any.html",
+ "t": "text.html.cshtml meta.tag.structure.form.start.html meta.attribute.action.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1838,7 +2135,7 @@
},
{
"c": "\"",
- "t": "text.html.cshtml meta.tag.block.any.html string.quoted.double.html punctuation.definition.string.begin.html",
+ "t": "text.html.cshtml meta.tag.structure.form.start.html meta.attribute.action.html string.quoted.double.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -1849,7 +2146,7 @@
},
{
"c": "\"",
- "t": "text.html.cshtml meta.tag.block.any.html string.quoted.double.html punctuation.definition.string.end.html",
+ "t": "text.html.cshtml meta.tag.structure.form.start.html meta.attribute.action.html string.quoted.double.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -1860,7 +2157,7 @@
},
{
"c": " ",
- "t": "text.html.cshtml meta.tag.block.any.html",
+ "t": "text.html.cshtml meta.tag.structure.form.start.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1871,7 +2168,7 @@
},
{
"c": "method",
- "t": "text.html.cshtml meta.tag.block.any.html entity.other.attribute-name.html",
+ "t": "text.html.cshtml meta.tag.structure.form.start.html meta.attribute.method.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -1882,7 +2179,7 @@
},
{
"c": "=",
- "t": "text.html.cshtml meta.tag.block.any.html",
+ "t": "text.html.cshtml meta.tag.structure.form.start.html meta.attribute.method.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1893,7 +2190,7 @@
},
{
"c": "\"",
- "t": "text.html.cshtml meta.tag.block.any.html string.quoted.double.html punctuation.definition.string.begin.html",
+ "t": "text.html.cshtml meta.tag.structure.form.start.html meta.attribute.method.html string.quoted.double.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -1904,7 +2201,7 @@
},
{
"c": "post",
- "t": "text.html.cshtml meta.tag.block.any.html string.quoted.double.html",
+ "t": "text.html.cshtml meta.tag.structure.form.start.html meta.attribute.method.html string.quoted.double.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -1915,7 +2212,7 @@
},
{
"c": "\"",
- "t": "text.html.cshtml meta.tag.block.any.html string.quoted.double.html punctuation.definition.string.end.html",
+ "t": "text.html.cshtml meta.tag.structure.form.start.html meta.attribute.method.html string.quoted.double.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -1926,7 +2223,7 @@
},
{
"c": ">",
- "t": "text.html.cshtml meta.tag.block.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.cshtml meta.tag.structure.form.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1948,7 +2245,7 @@
},
{
"c": "<",
- "t": "text.html.cshtml meta.tag.block.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.cshtml meta.tag.structure.p.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1959,7 +2256,7 @@
},
{
"c": "p",
- "t": "text.html.cshtml meta.tag.block.any.html entity.name.tag.block.any.html",
+ "t": "text.html.cshtml meta.tag.structure.p.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -1970,7 +2267,7 @@
},
{
"c": ">",
- "t": "text.html.cshtml meta.tag.block.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.cshtml meta.tag.structure.p.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1981,7 +2278,7 @@
},
{
"c": "<",
- "t": "text.html.cshtml meta.tag.inline.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.cshtml meta.tag.structure.label.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -1992,7 +2289,7 @@
},
{
"c": "label",
- "t": "text.html.cshtml meta.tag.inline.any.html entity.name.tag.inline.any.html",
+ "t": "text.html.cshtml meta.tag.structure.label.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -2003,7 +2300,7 @@
},
{
"c": " ",
- "t": "text.html.cshtml meta.tag.inline.any.html",
+ "t": "text.html.cshtml meta.tag.structure.label.start.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2014,7 +2311,7 @@
},
{
"c": "for",
- "t": "text.html.cshtml meta.tag.inline.any.html entity.other.attribute-name.html",
+ "t": "text.html.cshtml meta.tag.structure.label.start.html meta.attribute.for.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -2025,7 +2322,7 @@
},
{
"c": "=",
- "t": "text.html.cshtml meta.tag.inline.any.html",
+ "t": "text.html.cshtml meta.tag.structure.label.start.html meta.attribute.for.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2036,7 +2333,7 @@
},
{
"c": "\"",
- "t": "text.html.cshtml meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.begin.html",
+ "t": "text.html.cshtml meta.tag.structure.label.start.html meta.attribute.for.html string.quoted.double.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2047,7 +2344,7 @@
},
{
"c": "text1",
- "t": "text.html.cshtml meta.tag.inline.any.html string.quoted.double.html",
+ "t": "text.html.cshtml meta.tag.structure.label.start.html meta.attribute.for.html string.quoted.double.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2058,7 +2355,7 @@
},
{
"c": "\"",
- "t": "text.html.cshtml meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.end.html",
+ "t": "text.html.cshtml meta.tag.structure.label.start.html meta.attribute.for.html string.quoted.double.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2069,7 +2366,7 @@
},
{
"c": ">",
- "t": "text.html.cshtml meta.tag.inline.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.cshtml meta.tag.structure.label.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2091,7 +2388,7 @@
},
{
"c": "",
- "t": "text.html.cshtml meta.tag.inline.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.cshtml meta.tag.structure.label.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2102,7 +2399,7 @@
},
{
"c": "label",
- "t": "text.html.cshtml meta.tag.inline.any.html entity.name.tag.inline.any.html",
+ "t": "text.html.cshtml meta.tag.structure.label.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -2113,7 +2410,7 @@
},
{
"c": ">",
- "t": "text.html.cshtml meta.tag.inline.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.cshtml meta.tag.structure.label.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2135,7 +2432,7 @@
},
{
"c": "<",
- "t": "text.html.cshtml meta.tag.inline.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2146,7 +2443,7 @@
},
{
"c": "input",
- "t": "text.html.cshtml meta.tag.inline.any.html entity.name.tag.inline.any.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -2157,7 +2454,7 @@
},
{
"c": " ",
- "t": "text.html.cshtml meta.tag.inline.any.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2168,7 +2465,7 @@
},
{
"c": "type",
- "t": "text.html.cshtml meta.tag.inline.any.html entity.other.attribute-name.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html meta.attribute.type.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -2179,7 +2476,7 @@
},
{
"c": "=",
- "t": "text.html.cshtml meta.tag.inline.any.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html meta.attribute.type.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2190,7 +2487,7 @@
},
{
"c": "\"",
- "t": "text.html.cshtml meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.begin.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html meta.attribute.type.html string.quoted.double.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2201,7 +2498,7 @@
},
{
"c": "text",
- "t": "text.html.cshtml meta.tag.inline.any.html string.quoted.double.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html meta.attribute.type.html string.quoted.double.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2212,7 +2509,7 @@
},
{
"c": "\"",
- "t": "text.html.cshtml meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.end.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html meta.attribute.type.html string.quoted.double.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2223,7 +2520,7 @@
},
{
"c": " ",
- "t": "text.html.cshtml meta.tag.inline.any.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2234,7 +2531,7 @@
},
{
"c": "name",
- "t": "text.html.cshtml meta.tag.inline.any.html entity.other.attribute-name.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html meta.attribute.name.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -2245,7 +2542,7 @@
},
{
"c": "=",
- "t": "text.html.cshtml meta.tag.inline.any.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html meta.attribute.name.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2256,7 +2553,7 @@
},
{
"c": "\"",
- "t": "text.html.cshtml meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.begin.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html meta.attribute.name.html string.quoted.double.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2267,7 +2564,7 @@
},
{
"c": "text1",
- "t": "text.html.cshtml meta.tag.inline.any.html string.quoted.double.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html meta.attribute.name.html string.quoted.double.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2278,7 +2575,7 @@
},
{
"c": "\"",
- "t": "text.html.cshtml meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.end.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html meta.attribute.name.html string.quoted.double.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2288,8 +2585,19 @@
}
},
{
- "c": " />",
- "t": "text.html.cshtml meta.tag.inline.any.html punctuation.definition.tag.end.html",
+ "c": " ",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html",
+ "r": {
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
+ }
+ },
+ {
+ "c": "/>",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2311,7 +2619,7 @@
},
{
"c": "",
- "t": "text.html.cshtml meta.tag.block.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.cshtml meta.tag.structure.p.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2322,7 +2630,7 @@
},
{
"c": "p",
- "t": "text.html.cshtml meta.tag.block.any.html entity.name.tag.block.any.html",
+ "t": "text.html.cshtml meta.tag.structure.p.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -2333,7 +2641,7 @@
},
{
"c": ">",
- "t": "text.html.cshtml meta.tag.block.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.cshtml meta.tag.structure.p.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2355,7 +2663,7 @@
},
{
"c": "<",
- "t": "text.html.cshtml meta.tag.block.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.cshtml meta.tag.structure.p.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2366,7 +2674,7 @@
},
{
"c": "p",
- "t": "text.html.cshtml meta.tag.block.any.html entity.name.tag.block.any.html",
+ "t": "text.html.cshtml meta.tag.structure.p.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -2377,7 +2685,7 @@
},
{
"c": ">",
- "t": "text.html.cshtml meta.tag.block.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.cshtml meta.tag.structure.p.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2388,7 +2696,7 @@
},
{
"c": "<",
- "t": "text.html.cshtml meta.tag.inline.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.cshtml meta.tag.structure.label.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2399,7 +2707,7 @@
},
{
"c": "label",
- "t": "text.html.cshtml meta.tag.inline.any.html entity.name.tag.inline.any.html",
+ "t": "text.html.cshtml meta.tag.structure.label.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -2410,7 +2718,7 @@
},
{
"c": " ",
- "t": "text.html.cshtml meta.tag.inline.any.html",
+ "t": "text.html.cshtml meta.tag.structure.label.start.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2421,7 +2729,7 @@
},
{
"c": "for",
- "t": "text.html.cshtml meta.tag.inline.any.html entity.other.attribute-name.html",
+ "t": "text.html.cshtml meta.tag.structure.label.start.html meta.attribute.for.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -2432,7 +2740,7 @@
},
{
"c": "=",
- "t": "text.html.cshtml meta.tag.inline.any.html",
+ "t": "text.html.cshtml meta.tag.structure.label.start.html meta.attribute.for.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2443,7 +2751,7 @@
},
{
"c": "\"",
- "t": "text.html.cshtml meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.begin.html",
+ "t": "text.html.cshtml meta.tag.structure.label.start.html meta.attribute.for.html string.quoted.double.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2454,7 +2762,7 @@
},
{
"c": "text2",
- "t": "text.html.cshtml meta.tag.inline.any.html string.quoted.double.html",
+ "t": "text.html.cshtml meta.tag.structure.label.start.html meta.attribute.for.html string.quoted.double.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2465,7 +2773,7 @@
},
{
"c": "\"",
- "t": "text.html.cshtml meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.end.html",
+ "t": "text.html.cshtml meta.tag.structure.label.start.html meta.attribute.for.html string.quoted.double.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2476,7 +2784,7 @@
},
{
"c": ">",
- "t": "text.html.cshtml meta.tag.inline.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.cshtml meta.tag.structure.label.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2498,7 +2806,7 @@
},
{
"c": "",
- "t": "text.html.cshtml meta.tag.inline.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.cshtml meta.tag.structure.label.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2509,7 +2817,7 @@
},
{
"c": "label",
- "t": "text.html.cshtml meta.tag.inline.any.html entity.name.tag.inline.any.html",
+ "t": "text.html.cshtml meta.tag.structure.label.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -2520,7 +2828,7 @@
},
{
"c": ">",
- "t": "text.html.cshtml meta.tag.inline.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.cshtml meta.tag.structure.label.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2542,7 +2850,7 @@
},
{
"c": "<",
- "t": "text.html.cshtml meta.tag.inline.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2553,7 +2861,7 @@
},
{
"c": "input",
- "t": "text.html.cshtml meta.tag.inline.any.html entity.name.tag.inline.any.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -2564,7 +2872,7 @@
},
{
"c": " ",
- "t": "text.html.cshtml meta.tag.inline.any.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2575,7 +2883,7 @@
},
{
"c": "type",
- "t": "text.html.cshtml meta.tag.inline.any.html entity.other.attribute-name.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html meta.attribute.type.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -2586,7 +2894,7 @@
},
{
"c": "=",
- "t": "text.html.cshtml meta.tag.inline.any.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html meta.attribute.type.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2597,7 +2905,7 @@
},
{
"c": "\"",
- "t": "text.html.cshtml meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.begin.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html meta.attribute.type.html string.quoted.double.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2608,7 +2916,7 @@
},
{
"c": "text",
- "t": "text.html.cshtml meta.tag.inline.any.html string.quoted.double.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html meta.attribute.type.html string.quoted.double.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2619,7 +2927,7 @@
},
{
"c": "\"",
- "t": "text.html.cshtml meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.end.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html meta.attribute.type.html string.quoted.double.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2630,7 +2938,7 @@
},
{
"c": " ",
- "t": "text.html.cshtml meta.tag.inline.any.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2641,7 +2949,7 @@
},
{
"c": "name",
- "t": "text.html.cshtml meta.tag.inline.any.html entity.other.attribute-name.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html meta.attribute.name.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -2652,7 +2960,7 @@
},
{
"c": "=",
- "t": "text.html.cshtml meta.tag.inline.any.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html meta.attribute.name.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2663,7 +2971,7 @@
},
{
"c": "\"",
- "t": "text.html.cshtml meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.begin.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html meta.attribute.name.html string.quoted.double.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2674,7 +2982,7 @@
},
{
"c": "text2",
- "t": "text.html.cshtml meta.tag.inline.any.html string.quoted.double.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html meta.attribute.name.html string.quoted.double.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2685,7 +2993,7 @@
},
{
"c": "\"",
- "t": "text.html.cshtml meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.end.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html meta.attribute.name.html string.quoted.double.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2695,8 +3003,19 @@
}
},
{
- "c": " />",
- "t": "text.html.cshtml meta.tag.inline.any.html punctuation.definition.tag.end.html",
+ "c": " ",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html",
+ "r": {
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
+ }
+ },
+ {
+ "c": "/>",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2718,7 +3037,7 @@
},
{
"c": "",
- "t": "text.html.cshtml meta.tag.block.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.cshtml meta.tag.structure.p.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2729,7 +3048,7 @@
},
{
"c": "p",
- "t": "text.html.cshtml meta.tag.block.any.html entity.name.tag.block.any.html",
+ "t": "text.html.cshtml meta.tag.structure.p.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -2740,7 +3059,7 @@
},
{
"c": ">",
- "t": "text.html.cshtml meta.tag.block.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.cshtml meta.tag.structure.p.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2762,7 +3081,7 @@
},
{
"c": "<",
- "t": "text.html.cshtml meta.tag.block.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.cshtml meta.tag.structure.p.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2773,7 +3092,7 @@
},
{
"c": "p",
- "t": "text.html.cshtml meta.tag.block.any.html entity.name.tag.block.any.html",
+ "t": "text.html.cshtml meta.tag.structure.p.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -2784,7 +3103,7 @@
},
{
"c": ">",
- "t": "text.html.cshtml meta.tag.block.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.cshtml meta.tag.structure.p.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2795,7 +3114,7 @@
},
{
"c": "<",
- "t": "text.html.cshtml meta.tag.inline.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2806,7 +3125,7 @@
},
{
"c": "input",
- "t": "text.html.cshtml meta.tag.inline.any.html entity.name.tag.inline.any.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -2817,7 +3136,7 @@
},
{
"c": " ",
- "t": "text.html.cshtml meta.tag.inline.any.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2828,7 +3147,7 @@
},
{
"c": "type",
- "t": "text.html.cshtml meta.tag.inline.any.html entity.other.attribute-name.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html meta.attribute.type.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -2839,7 +3158,7 @@
},
{
"c": "=",
- "t": "text.html.cshtml meta.tag.inline.any.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html meta.attribute.type.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2850,7 +3169,7 @@
},
{
"c": "\"",
- "t": "text.html.cshtml meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.begin.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html meta.attribute.type.html string.quoted.double.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2861,7 +3180,7 @@
},
{
"c": "submit",
- "t": "text.html.cshtml meta.tag.inline.any.html string.quoted.double.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html meta.attribute.type.html string.quoted.double.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2872,7 +3191,7 @@
},
{
"c": "\"",
- "t": "text.html.cshtml meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.end.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html meta.attribute.type.html string.quoted.double.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2883,7 +3202,7 @@
},
{
"c": " ",
- "t": "text.html.cshtml meta.tag.inline.any.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2894,7 +3213,7 @@
},
{
"c": "value",
- "t": "text.html.cshtml meta.tag.inline.any.html entity.other.attribute-name.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html meta.attribute.value.html entity.other.attribute-name.html",
"r": {
"dark_plus": "entity.other.attribute-name: #9CDCFE",
"light_plus": "entity.other.attribute-name: #FF0000",
@@ -2905,7 +3224,7 @@
},
{
"c": "=",
- "t": "text.html.cshtml meta.tag.inline.any.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html meta.attribute.value.html punctuation.separator.key-value.html",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2916,7 +3235,7 @@
},
{
"c": "\"",
- "t": "text.html.cshtml meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.begin.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html meta.attribute.value.html string.quoted.double.html punctuation.definition.string.begin.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2927,7 +3246,7 @@
},
{
"c": "Add",
- "t": "text.html.cshtml meta.tag.inline.any.html string.quoted.double.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html meta.attribute.value.html string.quoted.double.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2938,7 +3257,7 @@
},
{
"c": "\"",
- "t": "text.html.cshtml meta.tag.inline.any.html string.quoted.double.html punctuation.definition.string.end.html",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html meta.attribute.value.html string.quoted.double.html punctuation.definition.string.end.html",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string.quoted.double.html: #0000FF",
@@ -2948,8 +3267,19 @@
}
},
{
- "c": " />",
- "t": "text.html.cshtml meta.tag.inline.any.html punctuation.definition.tag.end.html",
+ "c": " ",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html",
+ "r": {
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
+ }
+ },
+ {
+ "c": "/>",
+ "t": "text.html.cshtml meta.tag.structure.input.void.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2960,7 +3290,7 @@
},
{
"c": "",
- "t": "text.html.cshtml meta.tag.block.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.cshtml meta.tag.structure.p.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -2971,7 +3301,7 @@
},
{
"c": "p",
- "t": "text.html.cshtml meta.tag.block.any.html entity.name.tag.block.any.html",
+ "t": "text.html.cshtml meta.tag.structure.p.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -2982,7 +3312,7 @@
},
{
"c": ">",
- "t": "text.html.cshtml meta.tag.block.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.cshtml meta.tag.structure.p.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -3004,7 +3334,7 @@
},
{
"c": "",
- "t": "text.html.cshtml meta.tag.block.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.cshtml meta.tag.structure.form.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -3015,7 +3345,7 @@
},
{
"c": "form",
- "t": "text.html.cshtml meta.tag.block.any.html entity.name.tag.block.any.html",
+ "t": "text.html.cshtml meta.tag.structure.form.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -3026,7 +3356,7 @@
},
{
"c": ">",
- "t": "text.html.cshtml meta.tag.block.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.cshtml meta.tag.structure.form.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -3036,7 +3366,7 @@
}
},
{
- "c": "\t",
+ "c": "\t@* now we call the totalMessage method",
"t": "text.html.cshtml",
"r": {
"dark_plus": "default: #D4D4D4",
@@ -3047,47 +3377,14 @@
}
},
{
- "c": "@*",
- "t": "text.html.cshtml comment.block.cshtml punctuation.definition.comment.source.cshtml",
+ "c": "\t (a multi line razor comment outside code) *@",
+ "t": "text.html.cshtml",
"r": {
- "dark_plus": "comment: #608B4E",
- "light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
- "light_vs": "comment: #008000",
- "hc_black": "comment: #7CA668"
- }
- },
- {
- "c": " now we call the totalMessage method",
- "t": "text.html.cshtml comment.block.cshtml",
- "r": {
- "dark_plus": "comment: #608B4E",
- "light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
- "light_vs": "comment: #008000",
- "hc_black": "comment: #7CA668"
- }
- },
- {
- "c": "\t (a multi line razor comment outside code) ",
- "t": "text.html.cshtml comment.block.cshtml",
- "r": {
- "dark_plus": "comment: #608B4E",
- "light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
- "light_vs": "comment: #008000",
- "hc_black": "comment: #7CA668"
- }
- },
- {
- "c": "*@",
- "t": "text.html.cshtml comment.block.cshtml punctuation.definition.comment.source.cshtml",
- "r": {
- "dark_plus": "comment: #608B4E",
- "light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
- "light_vs": "comment: #008000",
- "hc_black": "comment: #7CA668"
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
}
},
{
@@ -3103,7 +3400,7 @@
},
{
"c": "<",
- "t": "text.html.cshtml meta.tag.block.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.cshtml meta.tag.structure.p.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -3114,7 +3411,7 @@
},
{
"c": "p",
- "t": "text.html.cshtml meta.tag.block.any.html entity.name.tag.block.any.html",
+ "t": "text.html.cshtml meta.tag.structure.p.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -3125,7 +3422,7 @@
},
{
"c": ">",
- "t": "text.html.cshtml meta.tag.block.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.cshtml meta.tag.structure.p.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -3136,7 +3433,7 @@
},
{
"c": "@totalMessage",
- "t": "text.html.cshtml section.embedded.begin.cshtml keyword.control.cshtml",
+ "t": "text.html.cshtml meta.expression.implicit.cshtml keyword.control.cshtml",
"r": {
"dark_plus": "keyword.control: #C586C0",
"light_plus": "keyword.control: #AF00DB",
@@ -3146,36 +3443,14 @@
}
},
{
- "c": "",
- "t": "text.html.cshtml meta.tag.block.any.html punctuation.definition.tag.begin.html",
+ "c": "
",
+ "t": "text.html.cshtml meta.expression.implicit.cshtml",
"r": {
- "dark_plus": "punctuation.definition.tag: #808080",
- "light_plus": "punctuation.definition.tag: #800000",
- "dark_vs": "punctuation.definition.tag: #808080",
- "light_vs": "punctuation.definition.tag: #800000",
- "hc_black": "punctuation.definition.tag: #808080"
- }
- },
- {
- "c": "p",
- "t": "text.html.cshtml meta.tag.block.any.html entity.name.tag.block.any.html",
- "r": {
- "dark_plus": "entity.name.tag: #569CD6",
- "light_plus": "entity.name.tag: #800000",
- "dark_vs": "entity.name.tag: #569CD6",
- "light_vs": "entity.name.tag: #800000",
- "hc_black": "entity.name.tag: #569CD6"
- }
- },
- {
- "c": ">",
- "t": "text.html.cshtml meta.tag.block.any.html punctuation.definition.tag.end.html",
- "r": {
- "dark_plus": "punctuation.definition.tag: #808080",
- "light_plus": "punctuation.definition.tag: #800000",
- "dark_vs": "punctuation.definition.tag: #808080",
- "light_vs": "punctuation.definition.tag: #800000",
- "hc_black": "punctuation.definition.tag: #808080"
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
}
},
{
@@ -3191,7 +3466,7 @@
},
{
"c": "<",
- "t": "text.html.cshtml meta.tag.block.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.cshtml meta.tag.structure.p.start.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -3202,7 +3477,7 @@
},
{
"c": "p",
- "t": "text.html.cshtml meta.tag.block.any.html entity.name.tag.block.any.html",
+ "t": "text.html.cshtml meta.tag.structure.p.start.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -3213,7 +3488,7 @@
},
{
"c": ">",
- "t": "text.html.cshtml meta.tag.block.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.cshtml meta.tag.structure.p.start.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -3224,18 +3499,7 @@
},
{
"c": "@(",
- "t": "text.html.cshtml punctuation.section.embedded.begin.cshtml",
- "r": {
- "dark_plus": "punctuation.section.embedded: #569CD6",
- "light_plus": "punctuation.section.embedded: #0000FF",
- "dark_vs": "punctuation.section.embedded: #569CD6",
- "light_vs": "punctuation.section.embedded: #0000FF",
- "hc_black": "punctuation.section.embedded: #569CD6"
- }
- },
- {
- "c": "totalMessage",
- "t": "text.html.cshtml keyword.control.cshtml",
+ "t": "text.html.cshtml meta.expression.explicit.cshtml keyword.control.cshtml",
"r": {
"dark_plus": "keyword.control: #C586C0",
"light_plus": "keyword.control: #AF00DB",
@@ -3244,9 +3508,20 @@
"hc_black": "keyword.control: #C586C0"
}
},
+ {
+ "c": "totalMessage",
+ "t": "text.html.cshtml meta.expression.explicit.cshtml variable.other.readwrite.cs",
+ "r": {
+ "dark_plus": "variable: #9CDCFE",
+ "light_plus": "variable: #001080",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "variable: #9CDCFE"
+ }
+ },
{
"c": "+",
- "t": "text.html.cshtml keyword.operator.arithmetic.cs",
+ "t": "text.html.cshtml meta.expression.explicit.cshtml keyword.operator.arithmetic.cs",
"r": {
"dark_plus": "keyword.operator: #D4D4D4",
"light_plus": "keyword.operator: #000000",
@@ -3256,8 +3531,30 @@
}
},
{
- "c": "\"!\"",
- "t": "text.html.cshtml string.quoted.double.cshtml",
+ "c": "\"",
+ "t": "text.html.cshtml meta.expression.explicit.cshtml string.quoted.double.cs punctuation.definition.string.begin.cs",
+ "r": {
+ "dark_plus": "string: #CE9178",
+ "light_plus": "string: #A31515",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "string: #CE9178"
+ }
+ },
+ {
+ "c": "!",
+ "t": "text.html.cshtml meta.expression.explicit.cshtml string.quoted.double.cs",
+ "r": {
+ "dark_plus": "string: #CE9178",
+ "light_plus": "string: #A31515",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "string: #CE9178"
+ }
+ },
+ {
+ "c": "\"",
+ "t": "text.html.cshtml meta.expression.explicit.cshtml string.quoted.double.cs punctuation.definition.string.end.cs",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string: #A31515",
@@ -3268,18 +3565,18 @@
},
{
"c": ")",
- "t": "text.html.cshtml punctuation.section.embedded.begin.cshtml",
+ "t": "text.html.cshtml meta.expression.explicit.cshtml keyword.control.cshtml",
"r": {
- "dark_plus": "punctuation.section.embedded: #569CD6",
- "light_plus": "punctuation.section.embedded: #0000FF",
- "dark_vs": "punctuation.section.embedded: #569CD6",
- "light_vs": "punctuation.section.embedded: #0000FF",
- "hc_black": "punctuation.section.embedded: #569CD6"
+ "dark_plus": "keyword.control: #C586C0",
+ "light_plus": "keyword.control: #AF00DB",
+ "dark_vs": "keyword.control: #569CD6",
+ "light_vs": "keyword.control: #0000FF",
+ "hc_black": "keyword.control: #C586C0"
}
},
{
"c": "",
- "t": "text.html.cshtml meta.tag.block.any.html punctuation.definition.tag.begin.html",
+ "t": "text.html.cshtml meta.tag.structure.p.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -3290,7 +3587,7 @@
},
{
"c": "p",
- "t": "text.html.cshtml meta.tag.block.any.html entity.name.tag.block.any.html",
+ "t": "text.html.cshtml meta.tag.structure.p.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -3301,7 +3598,7 @@
},
{
"c": ">",
- "t": "text.html.cshtml meta.tag.block.any.html punctuation.definition.tag.end.html",
+ "t": "text.html.cshtml meta.tag.structure.p.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -3322,8 +3619,8 @@
}
},
{
- "c": "@domain",
- "t": "text.html.cshtml section.embedded.begin.cshtml keyword.control.cshtml",
+ "c": "@domain.com",
+ "t": "text.html.cshtml meta.expression.implicit.cshtml keyword.control.cshtml",
"r": {
"dark_plus": "keyword.control: #C586C0",
"light_plus": "keyword.control: #AF00DB",
@@ -3332,31 +3629,9 @@
"hc_black": "keyword.control: #C586C0"
}
},
- {
- "c": ".",
- "t": "text.html.cshtml",
- "r": {
- "dark_plus": "default: #D4D4D4",
- "light_plus": "default: #000000",
- "dark_vs": "default: #D4D4D4",
- "light_vs": "default: #000000",
- "hc_black": "default: #FFFFFF"
- }
- },
- {
- "c": "com",
- "t": "text.html.cshtml entity.name.tag.source.cshtml",
- "r": {
- "dark_plus": "entity.name.tag: #569CD6",
- "light_plus": "entity.name.tag: #800000",
- "dark_vs": "entity.name.tag: #569CD6",
- "light_vs": "entity.name.tag: #800000",
- "hc_black": "entity.name.tag: #569CD6"
- }
- },
{
"c": "",
- "t": "text.html.cshtml meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.cshtml meta.tag.structure.body.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -3367,7 +3642,7 @@
},
{
"c": "body",
- "t": "text.html.cshtml meta.tag.structure.any.html entity.name.tag.structure.any.html",
+ "t": "text.html.cshtml meta.tag.structure.body.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -3378,7 +3653,7 @@
},
{
"c": ">",
- "t": "text.html.cshtml meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.cshtml meta.tag.structure.body.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -3389,7 +3664,7 @@
},
{
"c": "",
- "t": "text.html.cshtml meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.cshtml meta.tag.structure.html.end.html punctuation.definition.tag.begin.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
@@ -3400,7 +3675,7 @@
},
{
"c": "html",
- "t": "text.html.cshtml meta.tag.structure.any.html entity.name.tag.structure.any.html",
+ "t": "text.html.cshtml meta.tag.structure.html.end.html entity.name.tag.html",
"r": {
"dark_plus": "entity.name.tag: #569CD6",
"light_plus": "entity.name.tag: #800000",
@@ -3411,7 +3686,7 @@
},
{
"c": ">",
- "t": "text.html.cshtml meta.tag.structure.any.html punctuation.definition.tag.html",
+ "t": "text.html.cshtml meta.tag.structure.html.end.html punctuation.definition.tag.end.html",
"r": {
"dark_plus": "punctuation.definition.tag: #808080",
"light_plus": "punctuation.definition.tag: #800000",
diff --git a/extensions/ruby/package.json b/extensions/ruby/package.json
index 89bebf40aa5..98d66a891e4 100644
--- a/extensions/ruby/package.json
+++ b/extensions/ruby/package.json
@@ -14,7 +14,7 @@
"extensions": [ ".rb", ".rbx", ".rjs", ".gemspec", ".rake", ".ru", ".erb" ],
"filenames": [ "rakefile", "gemfile", "guardfile", "podfile", "capfile" ],
"aliases": [ "Ruby", "rb" ],
- "firstLine": "^#!/.*\\bruby\\b",
+ "firstLine": "^#!\\s*/.*\\bruby\\b",
"configuration": "./language-configuration.json"
}],
"grammars": [{
diff --git a/extensions/ruby/test/colorize-results/test_rb.json b/extensions/ruby/test/colorize-results/test_rb.json
index 4a5fa89c87e..c53ee5970e2 100644
--- a/extensions/ruby/test/colorize-results/test_rb.json
+++ b/extensions/ruby/test/colorize-results/test_rb.json
@@ -3,9 +3,9 @@
"c": "#",
"t": "source.ruby comment.line.number-sign.ruby punctuation.definition.comment.ruby",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -14,9 +14,9 @@
"c": " encoding: utf-8",
"t": "source.ruby comment.line.number-sign.ruby",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -25,9 +25,9 @@
"c": "#",
"t": "source.ruby comment.line.number-sign.ruby punctuation.definition.comment.ruby",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -36,9 +36,9 @@
"c": " Code generated by Microsoft (R) AutoRest Code Generator 0.16.0.0",
"t": "source.ruby comment.line.number-sign.ruby",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -47,9 +47,9 @@
"c": "#",
"t": "source.ruby comment.line.number-sign.ruby punctuation.definition.comment.ruby",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -58,9 +58,9 @@
"c": " Changes may cause incorrect behavior and will be lost if the code is",
"t": "source.ruby comment.line.number-sign.ruby",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -69,9 +69,9 @@
"c": "#",
"t": "source.ruby comment.line.number-sign.ruby punctuation.definition.comment.ruby",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -80,9 +80,9 @@
"c": " regenerated.",
"t": "source.ruby comment.line.number-sign.ruby",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -179,9 +179,9 @@
"c": "#",
"t": "source.ruby comment.line.number-sign.ruby punctuation.definition.comment.ruby",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -201,9 +201,9 @@
"c": "#",
"t": "source.ruby comment.line.number-sign.ruby punctuation.definition.comment.ruby",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -212,9 +212,9 @@
"c": " A service client - single point of access to the REST API.",
"t": "source.ruby comment.line.number-sign.ruby",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -234,9 +234,9 @@
"c": "#",
"t": "source.ruby comment.line.number-sign.ruby punctuation.definition.comment.ruby",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -498,9 +498,9 @@
"c": "#",
"t": "source.ruby comment.line.number-sign.ruby punctuation.definition.comment.ruby",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -509,9 +509,9 @@
"c": " @return job_collections",
"t": "source.ruby comment.line.number-sign.ruby",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -586,9 +586,9 @@
"c": "#",
"t": "source.ruby comment.line.number-sign.ruby punctuation.definition.comment.ruby",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -608,9 +608,9 @@
"c": "#",
"t": "source.ruby comment.line.number-sign.ruby punctuation.definition.comment.ruby",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -619,9 +619,9 @@
"c": " Creates initializes a new instance of the SchedulerManagementClient class.",
"t": "source.ruby comment.line.number-sign.ruby",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -641,9 +641,9 @@
"c": "#",
"t": "source.ruby comment.line.number-sign.ruby punctuation.definition.comment.ruby",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -652,9 +652,9 @@
"c": " @param credentials [MsRest::ServiceClientCredentials] credentials to authorize HTTP requests made by the service client.",
"t": "source.ruby comment.line.number-sign.ruby",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -674,9 +674,9 @@
"c": "#",
"t": "source.ruby comment.line.number-sign.ruby punctuation.definition.comment.ruby",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -685,9 +685,9 @@
"c": " @param base_url [String] the base URI of the service.",
"t": "source.ruby comment.line.number-sign.ruby",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -707,9 +707,9 @@
"c": "#",
"t": "source.ruby comment.line.number-sign.ruby punctuation.definition.comment.ruby",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -718,9 +718,9 @@
"c": " @param options [Array] filters to be applied to the HTTP requests.",
"t": "source.ruby comment.line.number-sign.ruby",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -740,9 +740,9 @@
"c": "#",
"t": "source.ruby comment.line.number-sign.ruby punctuation.definition.comment.ruby",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
diff --git a/extensions/rust/language-configuration.json b/extensions/rust/language-configuration.json
index 34396c3121e..6f198f44f4e 100644
--- a/extensions/rust/language-configuration.json
+++ b/extensions/rust/language-configuration.json
@@ -20,5 +20,11 @@
["(", ")"],
["\"", "\""],
["'", "'"]
- ]
+ ],
+ "folding": {
+ "markers": {
+ "start": "^\\s*//\\s*#?region\\b",
+ "end": "^\\s*//\\s*#?endregion\\b"
+ }
+ }
}
diff --git a/extensions/scss/test/colorize-results/test_scss.json b/extensions/scss/test/colorize-results/test_scss.json
index 9528b311bae..497e8c13fd0 100644
--- a/extensions/scss/test/colorize-results/test_scss.json
+++ b/extensions/scss/test/colorize-results/test_scss.json
@@ -3,9 +3,9 @@
"c": "//",
"t": "source.css.scss comment.line.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -14,9 +14,9 @@
"c": " snippets from the Sass documentation at http://sass-lang.com/",
"t": "source.css.scss comment.line.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -25,9 +25,9 @@
"c": "/*",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -36,9 +36,9 @@
"c": " css stuff ",
"t": "source.css.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -47,9 +47,9 @@
"c": "*/",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -58,9 +58,9 @@
"c": "/*",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -69,9 +69,9 @@
"c": " charset ",
"t": "source.css.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -80,9 +80,9 @@
"c": "*/",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -168,9 +168,9 @@
"c": "/*",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -179,9 +179,9 @@
"c": " nested rules ",
"t": "source.css.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -190,9 +190,9 @@
"c": "*/",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -773,9 +773,9 @@
"c": "/*",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -784,9 +784,9 @@
"c": " parent selector (&) ",
"t": "source.css.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -795,9 +795,9 @@
"c": "*/",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1213,9 +1213,9 @@
"c": "/*",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1224,9 +1224,9 @@
"c": " nested properties ",
"t": "source.css.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1235,9 +1235,9 @@
"c": "*/",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1642,9 +1642,9 @@
"c": "/*",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1653,9 +1653,9 @@
"c": " nesting conflicts ",
"t": "source.css.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1664,9 +1664,9 @@
"c": "*/",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1785,9 +1785,9 @@
"c": "//",
"t": "source.css.scss meta.property-list.scss meta.property-list.scss comment.line.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1796,9 +1796,9 @@
"c": " properties",
"t": "source.css.scss meta.property-list.scss meta.property-list.scss comment.line.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1994,9 +1994,9 @@
"c": "//",
"t": "source.css.scss meta.property-list.scss comment.line.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2005,9 +2005,9 @@
"c": " rule",
"t": "source.css.scss meta.property-list.scss comment.line.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2093,9 +2093,9 @@
"c": "//",
"t": "source.css.scss meta.property-list.scss meta.property-list.scss comment.line.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2104,9 +2104,9 @@
"c": " selector",
"t": "source.css.scss meta.property-list.scss meta.property-list.scss comment.line.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2258,9 +2258,9 @@
"c": "//",
"t": "source.css.scss meta.property-list.scss meta.property-value.scss comment.line.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2269,9 +2269,9 @@
"c": " selector",
"t": "source.css.scss meta.property-list.scss meta.property-value.scss comment.line.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2368,9 +2368,9 @@
"c": "//",
"t": "source.css.scss comment.line.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2379,9 +2379,9 @@
"c": " rule",
"t": "source.css.scss comment.line.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2401,9 +2401,9 @@
"c": "/*",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2412,9 +2412,9 @@
"c": " extended comment syntax ",
"t": "source.css.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2423,9 +2423,9 @@
"c": "*/",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2434,9 +2434,9 @@
"c": "/*",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2445,9 +2445,9 @@
"c": " This comment is",
"t": "source.css.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2456,9 +2456,9 @@
"c": " * several lines long.",
"t": "source.css.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2467,9 +2467,9 @@
"c": " * since it uses the CSS comment syntax,",
"t": "source.css.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2478,9 +2478,9 @@
"c": " * it will appear in the CSS output. ",
"t": "source.css.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2489,9 +2489,9 @@
"c": "*/",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2621,9 +2621,9 @@
"c": "//",
"t": "source.css.scss comment.line.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2632,9 +2632,9 @@
"c": " These comments are only one line long each.",
"t": "source.css.scss comment.line.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2643,9 +2643,9 @@
"c": "//",
"t": "source.css.scss comment.line.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2654,9 +2654,9 @@
"c": " They won't appear in the CSS output,",
"t": "source.css.scss comment.line.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2665,9 +2665,9 @@
"c": "//",
"t": "source.css.scss comment.line.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2676,9 +2676,9 @@
"c": " since they use the single-line comment syntax.",
"t": "source.css.scss comment.line.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2808,9 +2808,9 @@
"c": "/*",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2819,9 +2819,9 @@
"c": " variables ",
"t": "source.css.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -2830,9 +2830,9 @@
"c": "*/",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -3776,9 +3776,9 @@
"c": "/*",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -3787,9 +3787,9 @@
"c": " variable declaration with whitespaces ",
"t": "source.css.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -3798,9 +3798,9 @@
"c": "*/",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -3809,9 +3809,9 @@
"c": "//",
"t": "source.css.scss comment.line.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -3820,9 +3820,9 @@
"c": " Set the color of your columns",
"t": "source.css.scss comment.line.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -4051,9 +4051,9 @@
"c": "/*",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -4062,9 +4062,9 @@
"c": " operations",
"t": "source.css.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -4073,9 +4073,9 @@
"c": "*/",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -5382,9 +5382,9 @@
"c": "/*",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -5393,9 +5393,9 @@
"c": " functions",
"t": "source.css.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -5404,9 +5404,9 @@
"c": "*/",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -6086,9 +6086,9 @@
"c": "/*",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -6097,9 +6097,9 @@
"c": " @import ",
"t": "source.css.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -6108,9 +6108,9 @@
"c": "*/",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -6636,9 +6636,9 @@
"c": "/*",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -6647,9 +6647,9 @@
"c": " @media ",
"t": "source.css.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -6658,9 +6658,9 @@
"c": "*/",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -7076,9 +7076,9 @@
"c": "/*",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -7087,9 +7087,9 @@
"c": " @extend ",
"t": "source.css.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -7098,9 +7098,9 @@
"c": "*/",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -7989,9 +7989,9 @@
"c": "/*",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -8000,9 +8000,9 @@
"c": " @debug and @warn ",
"t": "source.css.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -8011,9 +8011,9 @@
"c": "*/",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -9166,9 +9166,9 @@
"c": "/*",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -9177,9 +9177,9 @@
"c": " control directives ",
"t": "source.css.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -9188,9 +9188,9 @@
"c": "*/",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -9199,9 +9199,9 @@
"c": "/*",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -9210,9 +9210,9 @@
"c": " if statement ",
"t": "source.css.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -9221,9 +9221,9 @@
"c": "*/",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -9980,9 +9980,9 @@
"c": "/*",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -9991,9 +9991,9 @@
"c": " if else statement ",
"t": "source.css.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -10002,9 +10002,9 @@
"c": "*/",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -10420,9 +10420,9 @@
"c": "/*",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -10431,9 +10431,9 @@
"c": " for statement ",
"t": "source.css.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -10442,9 +10442,9 @@
"c": "*/",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -10849,9 +10849,9 @@
"c": "/*",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -10860,9 +10860,9 @@
"c": " each statement ",
"t": "source.css.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -10871,9 +10871,9 @@
"c": "*/",
"t": "source.css.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -11278,9 +11278,9 @@
"c": "/*",
"t": "source.css.scss meta.at-rule.each.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -11289,9 +11289,9 @@
"c": " while statement ",
"t": "source.css.scss meta.at-rule.each.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -11300,9 +11300,9 @@
"c": "*/",
"t": "source.css.scss meta.at-rule.each.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -11817,9 +11817,9 @@
"c": "/*",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -11828,9 +11828,9 @@
"c": " function with controlstatements ",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -11839,9 +11839,9 @@
"c": "*/",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -12752,9 +12752,9 @@
"c": "/*",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -12763,9 +12763,9 @@
"c": " @mixin simple",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -12774,9 +12774,9 @@
"c": "*/",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -13412,9 +13412,9 @@
"c": "/*",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -13423,9 +13423,9 @@
"c": " mixin with parameters ",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -13434,9 +13434,9 @@
"c": "*/",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -14039,9 +14039,9 @@
"c": "/*",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -14050,9 +14050,9 @@
"c": " mixin with varargs ",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -14061,9 +14061,9 @@
"c": "*/",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -14787,9 +14787,9 @@
"c": "/*",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -14798,9 +14798,9 @@
"c": " include with varargs ",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -14809,9 +14809,9 @@
"c": "*/",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -15458,9 +15458,9 @@
"c": "/*",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -15469,9 +15469,9 @@
"c": " include with body ",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -15480,9 +15480,9 @@
"c": "*/",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -16129,9 +16129,9 @@
"c": "/*",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -16140,9 +16140,9 @@
"c": " attributes ",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -16151,9 +16151,9 @@
"c": "*/",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -16382,9 +16382,9 @@
"c": "/*",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -16393,9 +16393,9 @@
"c": "page ",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -16404,9 +16404,9 @@
"c": "*/",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -16646,9 +16646,9 @@
"c": "/*",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -16657,9 +16657,9 @@
"c": " missing semicolons ",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -16668,9 +16668,9 @@
"c": "*/",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -17603,9 +17603,9 @@
"c": "/*",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -17614,9 +17614,9 @@
"c": " extend with interpolation variable ",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -17625,9 +17625,9 @@
"c": "*/",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -18351,9 +18351,9 @@
"c": "/*",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -18362,9 +18362,9 @@
"c": " css3: @font face ",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -18373,9 +18373,9 @@
"c": "*/",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -18637,9 +18637,9 @@
"c": "/*",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -18648,9 +18648,9 @@
"c": " rule names with variables ",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -18659,9 +18659,9 @@
"c": "*/",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -19209,9 +19209,9 @@
"c": "/*",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -19220,9 +19220,9 @@
"c": " keyframes ",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -19231,9 +19231,9 @@
"c": "*/",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -20518,9 +20518,9 @@
"c": "/*",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -20529,9 +20529,9 @@
"c": " string escaping ",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -20540,9 +20540,9 @@
"c": "*/",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -20760,9 +20760,9 @@
"c": "/*",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -20771,9 +20771,9 @@
"c": " a comment ",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -20782,9 +20782,9 @@
"c": "*/",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -20947,9 +20947,9 @@
"c": "/*",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -20958,9 +20958,9 @@
"c": " another comment ",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss comment.block.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -20969,9 +20969,9 @@
"c": "*/",
"t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss comment.block.scss punctuation.definition.comment.scss",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
diff --git a/extensions/search-rg/.vscodeignore b/extensions/search-rg/.vscodeignore
index d257eda277b..fbe382ac81a 100644
--- a/extensions/search-rg/.vscodeignore
+++ b/extensions/search-rg/.vscodeignore
@@ -1,4 +1,5 @@
build/**
src/**
test/**
-tsconfig.json
\ No newline at end of file
+tsconfig.json
+out/test/**
\ No newline at end of file
diff --git a/extensions/search-rg/package.json b/extensions/search-rg/package.json
index a1be44dffd5..db787871c9e 100644
--- a/extensions/search-rg/package.json
+++ b/extensions/search-rg/package.json
@@ -13,9 +13,9 @@
},
"categories": [],
"dependencies": {
- "vscode-extension-telemetry": "0.0.15",
- "vscode-nls": "^3.2.1",
- "vscode-ripgrep": "^1.0.0"
+ "vscode-extension-telemetry": "0.0.18",
+ "vscode-nls": "^4.0.0",
+ "vscode-ripgrep": "1.1.0"
},
"devDependencies": {
"@types/node": "8.0.33",
@@ -24,6 +24,7 @@
},
"scripts": {},
"activationEvents": [
+ "onSearch:file",
"*"
],
"main": "./out/extension",
diff --git a/extensions/search-rg/src/extension.ts b/extensions/search-rg/src/extension.ts
index a2e4611ffef..9c725266796 100644
--- a/extensions/search-rg/src/extension.ts
+++ b/extensions/search-rg/src/extension.ts
@@ -4,28 +4,53 @@
*--------------------------------------------------------------------------------------------*/
import * as vscode from 'vscode';
-import { RipgrepTextSearchEngine } from './ripgrepTextSearch';
import { RipgrepFileSearchEngine } from './ripgrepFileSearch';
+import { RipgrepTextSearchEngine } from './ripgrepTextSearch';
export function activate(): void {
if (vscode.workspace.getConfiguration('searchRipgrep').get('enable')) {
const outputChannel = vscode.window.createOutputChannel('search-rg');
+
const provider = new RipgrepSearchProvider(outputChannel);
- vscode.workspace.registerSearchProvider('file', provider);
+ vscode.workspace.registerFileIndexProvider('file', provider);
+ vscode.workspace.registerTextSearchProvider('file', provider);
}
}
-class RipgrepSearchProvider implements vscode.SearchProvider {
+type SearchEngine = RipgrepFileSearchEngine | RipgrepTextSearchEngine;
+
+class RipgrepSearchProvider implements vscode.FileIndexProvider, vscode.TextSearchProvider {
+ private inProgress: Set = new Set();
+
constructor(private outputChannel: vscode.OutputChannel) {
+ process.once('exit', () => this.dispose());
}
provideTextSearchResults(query: vscode.TextSearchQuery, options: vscode.TextSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable {
const engine = new RipgrepTextSearchEngine(this.outputChannel);
- return engine.provideTextSearchResults(query, options, progress, token);
+ return this.withEngine(engine, () => engine.provideTextSearchResults(query, options, progress, token));
}
- provideFileSearchResults(options: vscode.SearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable {
+ provideFileIndex(options: vscode.FileSearchOptions, token: vscode.CancellationToken): Thenable {
const engine = new RipgrepFileSearchEngine(this.outputChannel);
- return engine.provideFileSearchResults(options, progress, token);
+
+ const results: vscode.Uri[] = [];
+ const onResult = relativePathMatch => {
+ results.push(vscode.Uri.file(options.folder.fsPath + '/' + relativePathMatch));
+ };
+
+ return this.withEngine(engine, () => engine.provideFileSearchResults(options, { report: onResult }, token))
+ .then(() => results);
+ }
+
+ private withEngine(engine: SearchEngine, fn: () => Thenable): Thenable {
+ this.inProgress.add(engine);
+ return fn().then(() => {
+ this.inProgress.delete(engine);
+ });
+ }
+
+ private dispose() {
+ this.inProgress.forEach(engine => engine.cancel());
}
}
\ No newline at end of file
diff --git a/extensions/search-rg/src/ripgrep.ts b/extensions/search-rg/src/ripgrep.ts
new file mode 100644
index 00000000000..cb3878ee031
--- /dev/null
+++ b/extensions/search-rg/src/ripgrep.ts
@@ -0,0 +1,10 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+'use strict';
+
+import { rgPath } from 'vscode-ripgrep';
+
+export { rgPath };
\ No newline at end of file
diff --git a/extensions/search-rg/src/ripgrepFileSearch.ts b/extensions/search-rg/src/ripgrepFileSearch.ts
index eca337d9691..de95a2fe39f 100644
--- a/extensions/search-rg/src/ripgrepFileSearch.ts
+++ b/extensions/search-rg/src/ripgrepFileSearch.ts
@@ -7,10 +7,10 @@ import * as cp from 'child_process';
import { Readable } from 'stream';
import { NodeStringDecoder, StringDecoder } from 'string_decoder';
import * as vscode from 'vscode';
-import { rgPath } from 'vscode-ripgrep';
import { normalizeNFC, normalizeNFD } from './normalization';
-import { anchorGlob } from './ripgrepHelpers';
+import { rgPath } from './ripgrep';
import { rgErrorMsgForDisplay } from './ripgrepTextSearch';
+import { anchorGlob } from './utils';
const isMac = process.platform === 'darwin';
@@ -19,18 +19,18 @@ const rgDiskPath = rgPath.replace(/\bnode_modules\.asar\b/, 'node_modules.asar.u
export class RipgrepFileSearchEngine {
private rgProc: cp.ChildProcess;
- private killRgProcFn: (code?: number) => void;
+ private isDone: boolean;
- constructor(private outputChannel: vscode.OutputChannel) {
- this.killRgProcFn = () => this.rgProc && this.rgProc.kill();
- process.once('exit', this.killRgProcFn);
+ constructor(private outputChannel: vscode.OutputChannel) { }
+
+ cancel() {
+ this.isDone = true;
+ if (this.rgProc) {
+ this.rgProc.kill();
+ }
}
- private dispose() {
- process.removeListener('exit', this.killRgProcFn);
- }
-
- provideFileSearchResults(options: vscode.SearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable {
+ provideFileSearchResults(options: vscode.FileSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable {
this.outputChannel.appendLine(`provideFileSearchResults ${JSON.stringify({
...options,
...{
@@ -39,12 +39,7 @@ export class RipgrepFileSearchEngine {
})}`);
return new Promise((resolve, reject) => {
- let isDone = false;
- const cancel = () => {
- isDone = true;
- this.rgProc.kill();
- };
- token.onCancellationRequested(cancel);
+ token.onCancellationRequested(() => this.cancel());
const rgArgs = getRgArgs(options);
@@ -93,7 +88,7 @@ export class RipgrepFileSearchEngine {
});
if (last) {
- if (isDone) {
+ if (this.isDone) {
resolve();
} else {
// Trigger last result
@@ -106,40 +101,46 @@ export class RipgrepFileSearchEngine {
}
}
});
- }).then(
- () => this.dispose(),
- err => {
- this.dispose();
- return Promise.reject(err);
- });
+ });
}
private collectStdout(cmd: cp.ChildProcess, cb: (err: Error, stdout?: string, last?: boolean) => void): void {
- let done = (err: Error, stdout?: string, last?: boolean) => {
+ let onData = (err: Error, stdout?: string, last?: boolean) => {
if (err || last) {
- done = () => { };
+ onData = () => { };
}
cb(err, stdout, last);
};
- this.forwardData(cmd.stdout, done);
- const stderr = this.collectData(cmd.stderr);
-
let gotData = false;
- cmd.stdout.once('data', () => gotData = true);
+ if (cmd.stdout) {
+ // Should be non-null, but #38195
+ this.forwardData(cmd.stdout, onData);
+ cmd.stdout.once('data', () => gotData = true);
+ } else {
+ this.outputChannel.appendLine('stdout is null');
+ }
+
+ let stderr: Buffer[];
+ if (cmd.stderr) {
+ // Should be non-null, but #38195
+ stderr = this.collectData(cmd.stderr);
+ } else {
+ this.outputChannel.appendLine('stderr is null');
+ }
cmd.on('error', (err: Error) => {
- done(err);
+ onData(err);
});
cmd.on('close', (code: number) => {
// ripgrep returns code=1 when no results are found
let stderrText, displayMsg: string;
if (!gotData && (stderrText = this.decodeData(stderr)) && (displayMsg = rgErrorMsgForDisplay(stderrText))) {
- done(new Error(`command failed with error code ${code}: ${displayMsg}`));
+ onData(new Error(`command failed with error code ${code}: ${displayMsg}`));
} else {
- done(null, '', true);
+ onData(null, '', true);
}
});
}
@@ -203,6 +204,9 @@ function getRgArgs(options: vscode.FileSearchOptions): string[] {
args.push('--follow');
}
+ args.push('--no-config');
+ args.push('--no-ignore-global');
+
// Folder to search
args.push('--');
diff --git a/extensions/search-rg/src/ripgrepHelpers.ts b/extensions/search-rg/src/ripgrepHelpers.ts
deleted file mode 100644
index 5487be750a0..00000000000
--- a/extensions/search-rg/src/ripgrepHelpers.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-/*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-
-'use strict';
-
-import * as vscode from 'vscode';
-
-import * as path from 'path';
-
-export function fixDriveC(_path: string): string {
- const root = path.parse(_path).root;
- return root.toLowerCase() === 'c:/' ?
- _path.replace(/^c:[/\\]/i, '/') :
- _path;
-}
-
-export function anchorGlob(glob: string): string {
- return glob.startsWith('**') || glob.startsWith('/') ? glob : `/${glob}`;
-}
diff --git a/extensions/search-rg/src/ripgrepTextSearch.ts b/extensions/search-rg/src/ripgrepTextSearch.ts
index b617035268d..6853cec9deb 100644
--- a/extensions/search-rg/src/ripgrepTextSearch.ts
+++ b/extensions/search-rg/src/ripgrepTextSearch.ts
@@ -7,12 +7,11 @@
import * as cp from 'child_process';
import { EventEmitter } from 'events';
+import * as path from 'path';
import { NodeStringDecoder, StringDecoder } from 'string_decoder';
import * as vscode from 'vscode';
-import { rgPath } from 'vscode-ripgrep';
-import { anchorGlob } from './ripgrepHelpers';
-
-
+import { rgPath } from './ripgrep';
+import { anchorGlob, createTextSearchResult } from './utils';
// If vscode-ripgrep is in an .asar file, then the binary is unpacked.
const rgDiskPath = rgPath.replace(/\bnode_modules\.asar\b/, 'node_modules.asar.unpacked');
@@ -23,12 +22,21 @@ const MAX_TEXT_RESULTS = 10000;
export class RipgrepTextSearchEngine {
private isDone = false;
private rgProc: cp.ChildProcess;
- private killRgProcFn: (code?: number) => void;
private ripgrepParser: RipgrepParser;
- constructor(private outputChannel: vscode.OutputChannel) {
- this.killRgProcFn = () => this.rgProc && this.rgProc.kill();
+ constructor(private outputChannel: vscode.OutputChannel) { }
+
+ cancel() {
+ this.isDone = true;
+
+ if (this.rgProc) {
+ this.rgProc.kill();
+ }
+
+ if (this.ripgrepParser) {
+ this.ripgrepParser.cancel();
+ }
}
provideTextSearchResults(query: vscode.TextSearchQuery, options: vscode.TextSearchOptions, progress: vscode.Progress, token: vscode.CancellationToken): Thenable {
@@ -40,12 +48,7 @@ export class RipgrepTextSearchEngine {
})}`);
return new Promise((resolve, reject) => {
- const cancel = () => {
- this.isDone = true;
- this.ripgrepParser.cancel();
- this.rgProc.kill();
- };
- token.onCancellationRequested(cancel);
+ token.onCancellationRequested(() => this.cancel());
const rgArgs = getRgArgs(query, options);
@@ -57,7 +60,6 @@ export class RipgrepTextSearchEngine {
this.outputChannel.appendLine(`rg ${escapedArgs}\n - cwd: ${cwd}`);
this.rgProc = cp.spawn(rgDiskPath, rgArgs, { cwd });
- process.once('exit', this.killRgProcFn);
this.rgProc.on('error', e => {
console.error(e);
this.outputChannel.append('Error: ' + (e && e.message));
@@ -65,14 +67,14 @@ export class RipgrepTextSearchEngine {
});
let gotResult = false;
- this.ripgrepParser = new RipgrepParser(MAX_TEXT_RESULTS, cwd);
+ this.ripgrepParser = new RipgrepParser(MAX_TEXT_RESULTS, cwd, options.previewOptions);
this.ripgrepParser.on('result', (match: vscode.TextSearchResult) => {
gotResult = true;
progress.report(match);
});
this.ripgrepParser.on('hitLimit', () => {
- cancel();
+ this.cancel();
});
this.rgProc.stdout.on('data', data => {
@@ -93,7 +95,6 @@ export class RipgrepTextSearchEngine {
this.outputChannel.appendLine(gotData ? 'Got data from stdout' : 'No data from stdout');
this.outputChannel.appendLine(gotResult ? 'Got result from parser' : 'No result from parser');
this.outputChannel.appendLine('');
- process.removeListener('exit', this.killRgProcFn);
if (this.isDone) {
resolve();
} else {
@@ -118,7 +119,7 @@ export class RipgrepTextSearchEngine {
* "failed" when a fatal error was produced.
*/
export function rgErrorMsgForDisplay(msg: string): string | undefined {
- const firstLine = msg.split('\n')[0];
+ const firstLine = msg.split('\n')[0].trim();
if (firstLine.startsWith('Error parsing regex')) {
return firstLine;
@@ -130,8 +131,13 @@ export function rgErrorMsgForDisplay(msg: string): string | undefined {
return firstLine.charAt(0).toUpperCase() + firstLine.substr(1);
}
+ if (firstLine === `Literal '\\n' not allowed.`) {
+ // I won't localize this because none of the Ripgrep error messages are localized
+ return `Literal '\\n' currently not supported`;
+ }
+
if (firstLine.startsWith('Literal ')) {
- // e.g. "Literal \n not allowed"
+ // Other unsupported chars
return firstLine;
}
@@ -154,7 +160,7 @@ export class RipgrepParser extends EventEmitter {
private numResults = 0;
- constructor(private maxResults: number, private rootFolder: string) {
+ constructor(private maxResults: number, private rootFolder: string, private previewOptions?: vscode.TextSearchPreviewOptions) {
super();
this.stringDecoder = new StringDecoder();
}
@@ -283,19 +289,11 @@ export class RipgrepParser extends EventEmitter {
realTextParts.push(chunk);
// Get full real text line without color codes
- const preview = realTextParts.join('');
+ const previewText = realTextParts.join('');
+ const uri = vscode.Uri.file(path.join(this.rootFolder, this.currentFile));
lineMatches
- .map(range => {
- return {
- path: this.currentFile,
- range,
- preview: {
- text: preview,
- match: new vscode.Range(0, range.start.character, 0, range.end.character)
- }
- };
- })
+ .map(range => createTextSearchResult(uri, previewText, range, this.previewOptions))
.forEach(match => this.onResult(match));
if (hitLimit) {
@@ -360,6 +358,7 @@ function getRgArgs(query: vscode.TextSearchQuery, options: vscode.TextSearchOpti
}
args.push('--no-config');
+ args.push('--no-ignore-global');
// Folder to search
args.push('--');
diff --git a/extensions/search-rg/src/test/searchrg.test.ts b/extensions/search-rg/src/test/searchrg.test.ts
new file mode 100644
index 00000000000..af55abf9b0f
--- /dev/null
+++ b/extensions/search-rg/src/test/searchrg.test.ts
@@ -0,0 +1,132 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+'use strict';
+
+import 'mocha';
+import * as assert from 'assert';
+import * as vscode from 'vscode';
+import * as path from 'path';
+import { createTextSearchResult } from '../utils';
+
+function createOneLineRange(lineNumber: number, startCol: number, endCol: number): vscode.Range {
+ return new vscode.Range(lineNumber, startCol, lineNumber, endCol);
+}
+
+const uri = vscode.Uri.file('/foo/bar');
+
+suite('search-rg', () => {
+ const previewOptions1: vscode.TextSearchPreviewOptions = {
+ leadingChars: 10,
+ maxLines: 1,
+ totalChars: 100
+ };
+
+ test('empty', () => {
+ assert.deepEqual(
+ createTextSearchResult(uri, '', createOneLineRange(5, 0, 0)),
+ {
+ preview: {
+ text: '',
+ match: createOneLineRange(0, 0, 0)
+ },
+ range: createOneLineRange(5, 0, 0),
+ uri
+ });
+
+ assert.deepEqual(
+ createTextSearchResult(uri, '', createOneLineRange(5, 0, 0), previewOptions1),
+ {
+ preview: {
+ text: '',
+ match: createOneLineRange(0, 0, 0)
+ },
+ range: createOneLineRange(5, 0, 0),
+ uri
+ });
+ });
+
+ test('short', () => {
+ assert.deepEqual(
+ createTextSearchResult(uri, 'foo bar', createOneLineRange(5, 4, 7)),
+ {
+ preview: {
+ text: 'foo bar',
+ match: createOneLineRange(0, 4, 7)
+ },
+ range: createOneLineRange(5, 4, 7),
+ uri
+ });
+
+ assert.deepEqual(
+ createTextSearchResult(uri, 'foo bar', createOneLineRange(5, 4, 7), previewOptions1),
+ {
+ preview: {
+ text: 'foo bar',
+ match: createOneLineRange(0, 4, 7)
+ },
+ range: createOneLineRange(5, 4, 7),
+ uri
+ });
+ });
+
+ test('leading', () => {
+ assert.deepEqual(
+ createTextSearchResult(uri, 'long text very long text foo', createOneLineRange(5, 25, 28), previewOptions1),
+ {
+ preview: {
+ text: 'long text foo',
+ match: createOneLineRange(0, 10, 13)
+ },
+ range: createOneLineRange(5, 25, 28),
+ uri
+ });
+ });
+
+ test('trailing', () => {
+ assert.deepEqual(
+ createTextSearchResult(uri, 'foo long text very long text long text very long text long text very long text long text very long text long text very long text', createOneLineRange(5, 0, 3), previewOptions1),
+ {
+ preview: {
+ text: 'foo long text very long text long text very long text long text very long text long text very long t',
+ match: createOneLineRange(0, 0, 3)
+ },
+ range: createOneLineRange(5, 0, 3),
+ uri
+ });
+ });
+
+ test('middle', () => {
+ assert.deepEqual(
+ createTextSearchResult(uri, 'long text very long text long foo text very long text long text very long text long text very long text long text very long text', createOneLineRange(5, 30, 33), previewOptions1),
+ {
+ preview: {
+ text: 'text long foo text very long text long text very long text long text very long text long text very l',
+ match: createOneLineRange(0, 10, 13)
+ },
+ range: createOneLineRange(5, 30, 33),
+ uri
+ });
+ });
+
+ test('truncating match', () => {
+ const previewOptions: vscode.TextSearchPreviewOptions = {
+ leadingChars: 4,
+ maxLines: 1,
+ totalChars: 5
+ };
+
+ assert.deepEqual(
+ createTextSearchResult(uri, 'foo bar', createOneLineRange(0, 4, 7), previewOptions),
+ {
+ preview: {
+ text: 'foo b',
+ match: createOneLineRange(0, 4, 5)
+ },
+ range: createOneLineRange(0, 4, 7),
+ uri
+ });
+ });
+});
\ No newline at end of file
diff --git a/extensions/search-rg/src/utils.ts b/extensions/search-rg/src/utils.ts
new file mode 100644
index 00000000000..5b65f3a598a
--- /dev/null
+++ b/extensions/search-rg/src/utils.ts
@@ -0,0 +1,45 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+'use strict';
+
+import * as path from 'path';
+import * as vscode from 'vscode';
+
+export function fixDriveC(_path: string): string {
+ const root = path.parse(_path).root;
+ return root.toLowerCase() === 'c:/' ?
+ _path.replace(/^c:[/\\]/i, '/') :
+ _path;
+}
+
+export function anchorGlob(glob: string): string {
+ return glob.startsWith('**') || glob.startsWith('/') ? glob : `/${glob}`;
+}
+
+export function createTextSearchResult(uri: vscode.Uri, fullText: string, range: vscode.Range, previewOptions?: vscode.TextSearchPreviewOptions): vscode.TextSearchResult {
+ let preview: vscode.TextSearchResultPreview;
+ if (previewOptions) {
+ const previewStart = Math.max(range.start.character - previewOptions.leadingChars, 0);
+ const previewEnd = previewOptions.totalChars + previewStart;
+ const endOfMatchRangeInPreview = Math.min(previewEnd, range.end.character - previewStart);
+
+ preview = {
+ text: fullText.substring(previewStart, previewEnd),
+ match: new vscode.Range(0, range.start.character - previewStart, 0, endOfMatchRangeInPreview)
+ };
+ } else {
+ preview = {
+ text: fullText,
+ match: new vscode.Range(0, range.start.character, 0, range.end.character)
+ };
+ }
+
+ return {
+ uri,
+ range,
+ preview
+ };
+}
diff --git a/extensions/search-rg/yarn.lock b/extensions/search-rg/yarn.lock
index d9ab440ec66..453a2ba6ef4 100644
--- a/extensions/search-rg/yarn.lock
+++ b/extensions/search-rg/yarn.lock
@@ -1539,19 +1539,19 @@ vinyl@^2.0.1, vinyl@^2.0.2:
remove-trailing-separator "^1.0.1"
replace-ext "^1.0.0"
-vscode-extension-telemetry@0.0.15:
- version "0.0.15"
- resolved "https://registry.yarnpkg.com/vscode-extension-telemetry/-/vscode-extension-telemetry-0.0.15.tgz#685c32f3b67e8fb85ba689c1d7f88ff90ff87856"
+vscode-extension-telemetry@0.0.18:
+ version "0.0.18"
+ resolved "https://registry.yarnpkg.com/vscode-extension-telemetry/-/vscode-extension-telemetry-0.0.18.tgz#602ba20d8c71453aa34533a291e7638f6e5c0327"
dependencies:
applicationinsights "1.0.1"
-vscode-nls@^3.2.1:
- version "3.2.2"
- resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.2.tgz#3817eca5b985c2393de325197cf4e15eb2aa5350"
+vscode-nls@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-4.0.0.tgz#4001c8a6caba5cedb23a9c5ce1090395c0e44002"
-vscode-ripgrep@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/vscode-ripgrep/-/vscode-ripgrep-1.0.0.tgz#99d81e96cc2437a1bc20f28facbcca72516e9c73"
+vscode-ripgrep@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/vscode-ripgrep/-/vscode-ripgrep-1.1.0.tgz#93c1e39d88342ee1b15530a12898ce930d511948"
vscode@^1.1.17:
version "1.1.17"
diff --git a/extensions/shared.webpack.config.js b/extensions/shared.webpack.config.js
new file mode 100644
index 00000000000..7f5bbae55b1
--- /dev/null
+++ b/extensions/shared.webpack.config.js
@@ -0,0 +1,74 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+//@ts-check
+/** @typedef {import('webpack').Configuration} WebpackConfig **/
+
+'use strict';
+
+const path = require('path');
+const merge = require('merge-options');
+const CopyWebpackPlugin = require('copy-webpack-plugin');
+
+
+module.exports = function withDefaults(/**@type WebpackConfig*/extConfig) {
+
+ /** @type WebpackConfig */
+ let defaultConfig = {
+ mode: 'none', // this leaves the source code as close as possible to the original (when packaging we set this to 'production')
+ target: 'node', // extensions run in a node context
+ node: {
+ __dirname: false // leave the __dirname-behaviour intact
+ },
+ resolve: {
+ mainFields: ['main'], // prefer the main-entry of package.json files
+ extensions: ['.ts', '.js'] // support ts-files and js-files
+ },
+ module: {
+ rules: [{
+ test: /\.ts$/,
+ exclude: /node_modules/,
+ use: [{
+ // vscode-nls-dev loader:
+ // * rewrite nls-calls
+ loader: 'vscode-nls-dev/lib/webpack-loader',
+ options: {
+ base: path.join(extConfig.context, 'src')
+ }
+ }, {
+ // configure TypeScript loader:
+ // * enable sources maps for end-to-end source maps
+ loader: 'ts-loader',
+ options: {
+ compilerOptions: {
+ "sourceMap": true,
+ }
+ }
+ }]
+ }]
+ },
+ externals: {
+ 'vscode': 'commonjs vscode', // ignored because it doesn't exist
+
+ "vscode-extension-telemetry": 'commonjs vscode-extension-telemetry', // commonly used
+ },
+ output: {
+ // all output goes into `dist`.
+ // packaging depends on that and this must always be like it
+ filename: '[name].js',
+ path: path.join(extConfig.context, 'dist'),
+ libraryTarget: "commonjs",
+ },
+ // yes, really source maps
+ devtool: 'source-map',
+ plugins: [
+ new CopyWebpackPlugin([
+ { from: './out/**/*', to: '.', ignore: ['*.js', '*.js.map'], flatten: true }
+ ])
+ ],
+ };
+
+ return merge(defaultConfig, extConfig);
+};
diff --git a/extensions/shellscript/test/colorize-results/test_sh.json b/extensions/shellscript/test/colorize-results/test_sh.json
index 36a9ce993e4..6760e596443 100644
--- a/extensions/shellscript/test/colorize-results/test_sh.json
+++ b/extensions/shellscript/test/colorize-results/test_sh.json
@@ -3,9 +3,9 @@
"c": "#!",
"t": "source.shell comment.line.number-sign.shebang.shell punctuation.definition.comment.shebang.shell",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -14,9 +14,9 @@
"c": "/usr/bin/env bash",
"t": "source.shell comment.line.number-sign.shebang.shell",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1246,9 +1246,9 @@
"c": "#",
"t": "source.shell meta.function.shell meta.scope.group.shell comment.line.number-sign.shell punctuation.definition.comment.shell",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1257,9 +1257,9 @@
"c": " Node modules",
"t": "source.shell meta.function.shell meta.scope.group.shell comment.line.number-sign.shell",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1334,9 +1334,9 @@
"c": "#",
"t": "source.shell meta.function.shell meta.scope.group.shell comment.line.number-sign.shell punctuation.definition.comment.shell",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1345,9 +1345,9 @@
"c": " Configuration",
"t": "source.shell meta.function.shell meta.scope.group.shell comment.line.number-sign.shell",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1400,9 +1400,9 @@
"c": "#",
"t": "source.shell meta.function.shell meta.scope.group.shell comment.line.number-sign.shell punctuation.definition.comment.shell",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -1411,9 +1411,9 @@
"c": " Launch Code",
"t": "source.shell meta.function.shell meta.scope.group.shell comment.line.number-sign.shell",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
diff --git a/extensions/theme-defaults/themes/dark_defaults.json b/extensions/theme-defaults/themes/dark_defaults.json
index cb9e20066b5..87b37508468 100644
--- a/extensions/theme-defaults/themes/dark_defaults.json
+++ b/extensions/theme-defaults/themes/dark_defaults.json
@@ -10,6 +10,9 @@
"editor.selectionHighlightBackground": "#ADD6FF26",
"list.dropBackground": "#383B3D",
"activityBarBadge.background": "#007ACC",
- "sideBarTitle.foreground": "#BBBBBB"
+ "sideBarTitle.foreground": "#BBBBBB",
+ "input.placeholderForeground": "#A6A6A6",
+ "settings.textInputBackground": "#292929",
+ "settings.numberInputBackground": "#292929"
}
}
\ No newline at end of file
diff --git a/extensions/theme-defaults/themes/dark_plus.json b/extensions/theme-defaults/themes/dark_plus.json
index 0ccbaeb606d..3e2c5ac607c 100644
--- a/extensions/theme-defaults/themes/dark_plus.json
+++ b/extensions/theme-defaults/themes/dark_plus.json
@@ -27,6 +27,8 @@
"storage.type.boolean.go",
"storage.type.string.go",
"storage.type.uintptr.go",
+ "storage.type.error.go",
+ "storage.type.rune.go",
"storage.type.cs",
"storage.type.generic.cs",
"storage.type.modifier.cs",
diff --git a/extensions/theme-defaults/themes/dark_vs.json b/extensions/theme-defaults/themes/dark_vs.json
index c2a15addb8d..2cbdca4a8f1 100644
--- a/extensions/theme-defaults/themes/dark_vs.json
+++ b/extensions/theme-defaults/themes/dark_vs.json
@@ -33,7 +33,7 @@
{
"scope": "comment",
"settings": {
- "foreground": "#608b4e"
+ "foreground": "#6A9955"
}
},
{
@@ -143,7 +143,7 @@
{
"scope": "beginning.punctuation.definition.quote.markdown",
"settings": {
- "foreground": "#608b4e"
+ "foreground": "#6A9955"
}
},
{
diff --git a/extensions/theme-defaults/themes/light_defaults.json b/extensions/theme-defaults/themes/light_defaults.json
index 2ee46debb3a..dc53cbfb1ea 100644
--- a/extensions/theme-defaults/themes/light_defaults.json
+++ b/extensions/theme-defaults/themes/light_defaults.json
@@ -12,6 +12,8 @@
"activityBarBadge.background": "#007ACC",
"sideBarTitle.foreground": "#6F6F6F",
"list.hoverBackground": "#E8E8E8",
- "input.placeholderForeground": "#ADADAD"
+ "input.placeholderForeground": "#767676",
+ "settings.textInputBorder": "#CECECE",
+ "settings.numberInputBorder": "#CECECE"
}
}
\ No newline at end of file
diff --git a/extensions/theme-defaults/themes/light_plus.json b/extensions/theme-defaults/themes/light_plus.json
index 4c9985d44f2..726cae4058d 100644
--- a/extensions/theme-defaults/themes/light_plus.json
+++ b/extensions/theme-defaults/themes/light_plus.json
@@ -27,6 +27,8 @@
"storage.type.boolean.go",
"storage.type.string.go",
"storage.type.uintptr.go",
+ "storage.type.error.go",
+ "storage.type.rune.go",
"storage.type.cs",
"storage.type.generic.cs",
"storage.type.modifier.cs",
diff --git a/extensions/theme-defaults/themes/light_vs.json b/extensions/theme-defaults/themes/light_vs.json
index 0fafec36645..4134ce0a4cb 100644
--- a/extensions/theme-defaults/themes/light_vs.json
+++ b/extensions/theme-defaults/themes/light_vs.json
@@ -290,7 +290,9 @@
}
},
{
- "scope": "support.type.property-name.json",
+ "scope": [
+ "support.type.property-name.json"
+ ],
"settings": {
"foreground": "#0451a5"
}
diff --git a/extensions/theme-kimbie-dark/themes/kimbie-dark-color-theme.json b/extensions/theme-kimbie-dark/themes/kimbie-dark-color-theme.json
index 9a93b5e73e9..41d9d0b2d8e 100644
--- a/extensions/theme-kimbie-dark/themes/kimbie-dark-color-theme.json
+++ b/extensions/theme-kimbie-dark/themes/kimbie-dark-color-theme.json
@@ -3,6 +3,7 @@
"type": "dark",
"colors": {
"input.background": "#51412c",
+ "dropdown.background": "#51412c",
"editor.background": "#221a0f",
"editor.foreground": "#d3af86",
"focusBorder": "#a57a4c",
diff --git a/extensions/theme-monokai/themes/monokai-color-theme.json b/extensions/theme-monokai/themes/monokai-color-theme.json
index 7321af7b015..e7f00d712e6 100644
--- a/extensions/theme-monokai/themes/monokai-color-theme.json
+++ b/extensions/theme-monokai/themes/monokai-color-theme.json
@@ -11,6 +11,8 @@
"list.activeSelectionBackground": "#75715E",
"list.focusBackground": "#414339",
"dropdown.listBackground": "#1e1f1c",
+ "settings.textInputBackground": "#32342d",
+ "settings.numberInputBackground": "#32342d",
"list.inactiveSelectionBackground": "#414339",
"list.hoverBackground": "#3e3d32",
"list.dropBackground": "#414339",
diff --git a/extensions/theme-quietlight/themes/quietlight-color-theme.json b/extensions/theme-quietlight/themes/quietlight-color-theme.json
index 3e1ad56f8ad..5d575484e9c 100644
--- a/extensions/theme-quietlight/themes/quietlight-color-theme.json
+++ b/extensions/theme-quietlight/themes/quietlight-color-theme.json
@@ -40,7 +40,8 @@
"name": "Comments: Documentation",
"scope": [
"comment.documentation",
- "comment.block.documentation"
+ "comment.block.documentation",
+ "comment.block.documentation punctuation.definition.comment "
],
"settings": {
"foreground": "#448C27"
@@ -96,7 +97,7 @@
"variable.language"
],
"settings": {
- "foreground": "#AB6526"
+ "foreground": "#9C5D27"
}
},
{
@@ -154,7 +155,7 @@
"constant"
],
"settings": {
- "foreground": "#AB6526"
+ "foreground": "#9C5D27"
}
},
{
@@ -182,7 +183,7 @@
"name": "Strings: Symbols",
"scope": "constant.other.symbol",
"settings": {
- "foreground": "#AB6526"
+ "foreground": "#9C5D27"
}
},
{
@@ -255,7 +256,7 @@
"punctuation.definition.entity"
],
"settings": {
- "foreground": "#AB6526"
+ "foreground": "#9C5D27"
}
},
{
@@ -281,7 +282,7 @@
"support.type.property-name"
],
"settings": {
- "foreground": "#AB6526"
+ "foreground": "#9C5D27"
}
},
{
@@ -426,7 +427,7 @@
"scope": "markup.inline.raw",
"settings": {
"fontStyle": "",
- "foreground": "#AB6526"
+ "foreground": "#9C5D27"
}
},
{
@@ -528,6 +529,7 @@
"inputValidation.errorBorder": "#f1897f",
"errorForeground": "#f1897f",
"badge.background": "#705697AA",
- "progressBar.background": "#705697"
+ "progressBar.background": "#705697",
+ "walkThrough.embeddedEditorBackground": "#00000014"
}
}
diff --git a/extensions/theme-seti/build/update-icon-theme.js b/extensions/theme-seti/build/update-icon-theme.js
index 31d7bffe3a7..ed22a1fb3c4 100644
--- a/extensions/theme-seti/build/update-icon-theme.js
+++ b/extensions/theme-seti/build/update-icon-theme.js
@@ -10,6 +10,31 @@ let fs = require('fs');
let https = require('https');
let url = require('url');
+// list of languagesIs not shipped with VSCode. The information is used to associate an icon with a langauge association
+let nonBuiltInLanguages = { // { fileNames, extensions }
+ "r": { extensions: ['r', 'rhistory', 'rprofile', 'rt'] },
+ "argdown": { extensions: ['ad', 'adown', 'argdown', 'argdn'] },
+ "elm": { extensions: ['elm'] },
+ "ocaml": { extensions: ['ml', 'mli'] },
+ "nunjucks": { extensions: ['nunjucks', 'nunjs', 'nunj', 'nj', 'njk', 'tmpl', 'tpl'] },
+ "mustache": { extensions: ['mustache', 'mst', 'mu', 'stache'] },
+ "erb": { extensions: ['erb', 'rhtml', 'html.erb'] },
+ "terraform": { extensions: ['tf', 'tfvars', 'hcl'] },
+ "vue": { extensions: ['vue'] },
+ "sass": { extensions: ['sass'] },
+ "puppet": { extensions: ['puppet'] },
+ "kotlin": { extensions: ['kt'] },
+ "jinja": { extensions: ['jinja'] },
+ "haxe": { extensions: ['hx'] },
+ "haskell": { extensions: ['hs'] },
+ "gradle": { extensions: ['gradle'] },
+ "elixir": { extensions: ['ex'] },
+ "haml": { extensions: ['haml'] },
+ "stylus": { extensions: ['styl'] },
+ "vala": { extensions: ['vala'] },
+ "todo": { fileNames: ['todo'] }
+}
+
function getCommitSha(repoId, repoPath) {
let commitInfo = 'https://api.github.com/repos/' + repoId + '/commits?path=' + repoPath;
return download(commitInfo).then(function (content) {
@@ -34,7 +59,7 @@ function download(source) {
}
return new Promise((c, e) => {
let _url = url.parse(source);
- let options = { host: _url.host, port: _url.port, path: _url.path, headers: { 'User-Agent': 'NodeJS' }};
+ let options = { host: _url.host, port: _url.port, path: _url.path, headers: { 'User-Agent': 'NodeJS' } };
let content = '';
https.get(options, function (response) {
response.on('data', function (data) {
@@ -50,7 +75,7 @@ function download(source) {
function readFile(fileName) {
return new Promise((c, e) => {
- fs.readFile(fileName, function(err, data) {
+ fs.readFile(fileName, function (err, data) {
if (err) {
e(err);
} else {
@@ -67,12 +92,12 @@ function downloadBinary(source, dest) {
return new Promise((c, e) => {
https.get(source, function (response) {
- switch(response.statusCode) {
+ switch (response.statusCode) {
case 200:
let file = fs.createWriteStream(dest);
- response.on('data', function(chunk){
+ response.on('data', function (chunk) {
file.write(chunk);
- }).on('end', function(){
+ }).on('end', function () {
file.end();
c(null);
}).on('error', function (err) {
@@ -107,7 +132,7 @@ function copyFile(fileName, dest) {
rd.on("error", handleError);
let wr = fs.createWriteStream(dest);
wr.on("error", handleError);
- wr.on("close", function() {
+ wr.on("close", function () {
if (!cbCalled) {
c();
cbCalled = true;
@@ -119,7 +144,7 @@ function copyFile(fileName, dest) {
function darkenColor(color) {
let res = '#';
- for (let i = 1; i < 7; i+=2) {
+ for (let i = 1; i < 7; i += 2) {
let newVal = Math.round(parseInt('0x' + color.substr(i, 2), 16) * 0.9);
let hex = newVal.toString(16);
if (hex.length == 1) {
@@ -133,7 +158,7 @@ function darkenColor(color) {
function getLanguageMappings() {
let langMappings = {};
let allExtensions = fs.readdirSync('..');
- for (let i= 0; i < allExtensions.length; i++) {
+ for (let i = 0; i < allExtensions.length; i++) {
let dirPath = path.join('..', allExtensions[i], 'package.json');
if (fs.existsSync(dirPath)) {
let content = fs.readFileSync(dirPath).toString();
@@ -158,13 +183,16 @@ function getLanguageMappings() {
}
}
}
+ for (let languageId in nonBuiltInLanguages) {
+ langMappings[languageId] = nonBuiltInLanguages[languageId];
+ }
return langMappings;
}
//let font = 'https://raw.githubusercontent.com/jesseweed/seti-ui/master/styles/_fonts/seti/seti.woff';
let font = '../../../seti-ui/styles/_fonts/seti/seti.woff';
-exports.copyFont = function() {
+exports.copyFont = function () {
return downloadBinary(font, './icons/seti.woff');
};
@@ -172,13 +200,13 @@ exports.copyFont = function() {
//let mappings = 'https://raw.githubusercontent.com/jesseweed/seti-ui/master/styles/components/icons/mapping.less';
//let colors = 'https://raw.githubusercontent.com/jesseweed/seti-ui/master/styles/ui-variables.less';
-let fontMappings = '../../../seti-ui/styles/_fonts/seti.less';
-let mappings = '../../../seti-ui/styles/components/icons/mapping.less';
-let colors = '../../../seti-ui/styles/ui-variables.less';
+let fontMappingsFile = '../../../seti-ui/styles/_fonts/seti.less';
+let fileAssociationFile = '../../../seti-ui/styles/components/icons/mapping.less';
+let colorsFile = '../../../seti-ui/styles/ui-variables.less';
exports.update = function () {
- console.log('Reading from ' + fontMappings);
+ console.log('Reading from ' + fontMappingsFile);
let def2Content = {};
let ext2Def = {};
let fileName2Def = {};
@@ -234,7 +262,7 @@ exports.update = function () {
size: "150%"
}],
iconDefinitions: iconDefinitions,
- // folder: "_folder",
+ // folder: "_folder",
file: "_default",
fileExtensions: ext2Def,
fileNames: fileName2Def,
@@ -256,15 +284,15 @@ exports.update = function () {
let match;
- return download(fontMappings).then(function (content) {
+ return download(fontMappingsFile).then(function (content) {
let regex = /@([\w-]+):\s*'(\\E[0-9A-F]+)';/g;
let contents = {};
while ((match = regex.exec(content)) !== null) {
contents[match[1]] = match[2];
}
- return download(mappings).then(function (content) {
- let regex2 = /\.icon-(?:set|partial)\('([\w-\.]+)',\s*'([\w-]+)',\s*(@[\w-]+)\)/g;
+ return download(fileAssociationFile).then(function (content) {
+ let regex2 = /\.icon-(?:set|partial)\(['"]([\w-\.]+)['"],\s*['"]([\w-]+)['"],\s*(@[\w-]+)\)/g;
while ((match = regex2.exec(content)) !== null) {
let pattern = match[1];
let def = '_' + match[2];
@@ -304,26 +332,28 @@ exports.update = function () {
}
if (preferredDef) {
lang2Def[lang] = preferredDef;
- for (let i2 = 0; i2 < exts.length; i2++) {
- // remove the extension association, unless it is different from the preferred
- if (ext2Def[exts[i2]] === preferredDef) {
- delete ext2Def[exts[i2]];
+ if (!nonBuiltInLanguages[lang]) {
+ for (let i2 = 0; i2 < exts.length; i2++) {
+ // remove the extension association, unless it is different from the preferred
+ if (ext2Def[exts[i2]] === preferredDef) {
+ delete ext2Def[exts[i2]];
+ }
}
- }
- for (let i2 = 0; i2 < fileNames.length; i2++) {
- // remove the fileName association, unless it is different from the preferred
- if (fileName2Def[fileNames[i2]] === preferredDef) {
- delete fileName2Def[fileNames[i2]];
+ for (let i2 = 0; i2 < fileNames.length; i2++) {
+ // remove the fileName association, unless it is different from the preferred
+ if (fileName2Def[fileNames[i2]] === preferredDef) {
+ delete fileName2Def[fileNames[i2]];
+ }
}
}
}
}
- return download(colors).then(function (content) {
+ return download(colorsFile).then(function (content) {
let regex3 = /(@[\w-]+):\s*(#[0-9a-z]+)/g;
while ((match = regex3.exec(content)) !== null) {
- colorId2Value[match[1]] = match[2];
+ colorId2Value[match[1]] = match[2];
}
return getCommitSha('jesseweed/seti-ui', 'styles/_fonts/seti.less').then(function (info) {
try {
diff --git a/extensions/theme-seti/icons/seti.woff b/extensions/theme-seti/icons/seti.woff
index 476c5a9946b..ea92f2627db 100644
Binary files a/extensions/theme-seti/icons/seti.woff and b/extensions/theme-seti/icons/seti.woff differ
diff --git a/extensions/theme-seti/icons/vs-seti-icon-theme.json b/extensions/theme-seti/icons/vs-seti-icon-theme.json
index 6aeb37e95c6..ad4817d51f7 100644
--- a/extensions/theme-seti/icons/vs-seti-icon-theme.json
+++ b/extensions/theme-seti/icons/vs-seti-icon-theme.json
@@ -22,1151 +22,1223 @@
}
],
"iconDefinitions": {
- "_asm_light": {
+ "_R_light": {
+ "fontCharacter": "\\E001",
+ "fontColor": "#498ba7"
+ },
+ "_R": {
+ "fontCharacter": "\\E001",
+ "fontColor": "#519aba"
+ },
+ "_argdown_light": {
"fontCharacter": "\\E003",
+ "fontColor": "#498ba7"
+ },
+ "_argdown": {
+ "fontCharacter": "\\E003",
+ "fontColor": "#519aba"
+ },
+ "_asm_light": {
+ "fontCharacter": "\\E004",
"fontColor": "#b8383d"
},
"_asm": {
- "fontCharacter": "\\E003",
+ "fontCharacter": "\\E004",
"fontColor": "#cc3e44"
},
"_audio_light": {
- "fontCharacter": "\\E004",
+ "fontCharacter": "\\E005",
"fontColor": "#9068b0"
},
"_audio": {
- "fontCharacter": "\\E004",
+ "fontCharacter": "\\E005",
"fontColor": "#a074c4"
},
"_babel_light": {
- "fontCharacter": "\\E005",
+ "fontCharacter": "\\E006",
"fontColor": "#b7b73b"
},
"_babel": {
- "fontCharacter": "\\E005",
+ "fontCharacter": "\\E006",
"fontColor": "#cbcb41"
},
"_bower_light": {
- "fontCharacter": "\\E006",
+ "fontCharacter": "\\E007",
"fontColor": "#cc6d2e"
},
"_bower": {
- "fontCharacter": "\\E006",
+ "fontCharacter": "\\E007",
"fontColor": "#e37933"
},
"_bsl_light": {
- "fontCharacter": "\\E007",
+ "fontCharacter": "\\E008",
"fontColor": "#b8383d"
},
"_bsl": {
- "fontCharacter": "\\E007",
+ "fontCharacter": "\\E008",
"fontColor": "#cc3e44"
},
"_c_light": {
- "fontCharacter": "\\E009",
+ "fontCharacter": "\\E00A",
"fontColor": "#498ba7"
},
"_c": {
- "fontCharacter": "\\E009",
+ "fontCharacter": "\\E00A",
"fontColor": "#519aba"
},
"_c-sharp_light": {
- "fontCharacter": "\\E008",
+ "fontCharacter": "\\E009",
"fontColor": "#498ba7"
},
"_c-sharp": {
- "fontCharacter": "\\E008",
+ "fontCharacter": "\\E009",
"fontColor": "#519aba"
},
"_c_1_light": {
- "fontCharacter": "\\E009",
+ "fontCharacter": "\\E00A",
"fontColor": "#9068b0"
},
"_c_1": {
- "fontCharacter": "\\E009",
+ "fontCharacter": "\\E00A",
"fontColor": "#a074c4"
},
"_c_2_light": {
- "fontCharacter": "\\E009",
+ "fontCharacter": "\\E00A",
"fontColor": "#b7b73b"
},
"_c_2": {
- "fontCharacter": "\\E009",
+ "fontCharacter": "\\E00A",
"fontColor": "#cbcb41"
},
"_cake_light": {
- "fontCharacter": "\\E00A",
+ "fontCharacter": "\\E00B",
"fontColor": "#b8383d"
},
"_cake": {
- "fontCharacter": "\\E00A",
+ "fontCharacter": "\\E00B",
"fontColor": "#cc3e44"
},
"_cake_php_light": {
- "fontCharacter": "\\E00B",
+ "fontCharacter": "\\E00C",
"fontColor": "#b8383d"
},
"_cake_php": {
- "fontCharacter": "\\E00B",
+ "fontCharacter": "\\E00C",
"fontColor": "#cc3e44"
},
"_clock_light": {
- "fontCharacter": "\\E00F",
+ "fontCharacter": "\\E010",
"fontColor": "#498ba7"
},
"_clock": {
- "fontCharacter": "\\E00F",
+ "fontCharacter": "\\E010",
"fontColor": "#519aba"
},
"_clock_1_light": {
- "fontCharacter": "\\E00F",
+ "fontCharacter": "\\E010",
"fontColor": "#627379"
},
"_clock_1": {
- "fontCharacter": "\\E00F",
+ "fontCharacter": "\\E010",
"fontColor": "#6d8086"
},
"_clojure_light": {
- "fontCharacter": "\\E010",
+ "fontCharacter": "\\E011",
"fontColor": "#7fae42"
},
"_clojure": {
- "fontCharacter": "\\E010",
+ "fontCharacter": "\\E011",
"fontColor": "#8dc149"
},
"_clojure_1_light": {
- "fontCharacter": "\\E010",
+ "fontCharacter": "\\E011",
"fontColor": "#498ba7"
},
"_clojure_1": {
- "fontCharacter": "\\E010",
+ "fontCharacter": "\\E011",
"fontColor": "#519aba"
},
"_code-climate_light": {
- "fontCharacter": "\\E011",
+ "fontCharacter": "\\E012",
"fontColor": "#7fae42"
},
"_code-climate": {
- "fontCharacter": "\\E011",
+ "fontCharacter": "\\E012",
"fontColor": "#8dc149"
},
"_coffee_light": {
- "fontCharacter": "\\E012",
+ "fontCharacter": "\\E013",
"fontColor": "#b7b73b"
},
"_coffee": {
- "fontCharacter": "\\E012",
+ "fontCharacter": "\\E013",
"fontColor": "#cbcb41"
},
"_coldfusion_light": {
- "fontCharacter": "\\E014",
+ "fontCharacter": "\\E015",
"fontColor": "#498ba7"
},
"_coldfusion": {
- "fontCharacter": "\\E014",
+ "fontCharacter": "\\E015",
"fontColor": "#519aba"
},
"_config_light": {
- "fontCharacter": "\\E015",
+ "fontCharacter": "\\E016",
"fontColor": "#627379"
},
"_config": {
- "fontCharacter": "\\E015",
+ "fontCharacter": "\\E016",
"fontColor": "#6d8086"
},
"_cpp_light": {
- "fontCharacter": "\\E016",
+ "fontCharacter": "\\E017",
"fontColor": "#498ba7"
},
"_cpp": {
- "fontCharacter": "\\E016",
+ "fontCharacter": "\\E017",
"fontColor": "#519aba"
},
"_cpp_1_light": {
- "fontCharacter": "\\E016",
+ "fontCharacter": "\\E017",
"fontColor": "#9068b0"
},
"_cpp_1": {
- "fontCharacter": "\\E016",
+ "fontCharacter": "\\E017",
"fontColor": "#a074c4"
},
"_crystal_light": {
- "fontCharacter": "\\E017",
+ "fontCharacter": "\\E018",
"fontColor": "#bfc2c1"
},
"_crystal": {
- "fontCharacter": "\\E017",
+ "fontCharacter": "\\E018",
"fontColor": "#d4d7d6"
},
"_crystal_embedded_light": {
- "fontCharacter": "\\E018",
+ "fontCharacter": "\\E019",
"fontColor": "#bfc2c1"
},
"_crystal_embedded": {
- "fontCharacter": "\\E018",
+ "fontCharacter": "\\E019",
"fontColor": "#d4d7d6"
},
"_css_light": {
- "fontCharacter": "\\E019",
+ "fontCharacter": "\\E01A",
"fontColor": "#498ba7"
},
"_css": {
- "fontCharacter": "\\E019",
+ "fontCharacter": "\\E01A",
"fontColor": "#519aba"
},
"_csv_light": {
- "fontCharacter": "\\E01A",
+ "fontCharacter": "\\E01B",
"fontColor": "#7fae42"
},
"_csv": {
- "fontCharacter": "\\E01A",
+ "fontCharacter": "\\E01B",
"fontColor": "#8dc149"
},
"_d_light": {
- "fontCharacter": "\\E01B",
+ "fontCharacter": "\\E01C",
"fontColor": "#b8383d"
},
"_d": {
- "fontCharacter": "\\E01B",
+ "fontCharacter": "\\E01C",
"fontColor": "#cc3e44"
},
"_db_light": {
- "fontCharacter": "\\E01C",
+ "fontCharacter": "\\E01D",
"fontColor": "#dd4b78"
},
"_db": {
- "fontCharacter": "\\E01C",
+ "fontCharacter": "\\E01D",
"fontColor": "#f55385"
},
"_default_light": {
- "fontCharacter": "\\E01D",
+ "fontCharacter": "\\E01E",
"fontColor": "#bfc2c1"
},
"_default": {
- "fontCharacter": "\\E01D",
+ "fontCharacter": "\\E01E",
"fontColor": "#d4d7d6"
},
"_docker_light": {
- "fontCharacter": "\\E01F",
+ "fontCharacter": "\\E020",
"fontColor": "#498ba7"
},
"_docker": {
- "fontCharacter": "\\E01F",
+ "fontCharacter": "\\E020",
"fontColor": "#519aba"
},
"_docker_1_light": {
- "fontCharacter": "\\E01F",
+ "fontCharacter": "\\E020",
"fontColor": "#455155"
},
"_docker_1": {
- "fontCharacter": "\\E01F",
+ "fontCharacter": "\\E020",
"fontColor": "#4d5a5e"
},
"_docker_2_light": {
- "fontCharacter": "\\E01F",
+ "fontCharacter": "\\E020",
"fontColor": "#7fae42"
},
"_docker_2": {
- "fontCharacter": "\\E01F",
+ "fontCharacter": "\\E020",
"fontColor": "#8dc149"
},
"_docker_3_light": {
- "fontCharacter": "\\E01F",
+ "fontCharacter": "\\E020",
"fontColor": "#dd4b78"
},
"_docker_3": {
- "fontCharacter": "\\E01F",
+ "fontCharacter": "\\E020",
"fontColor": "#f55385"
},
"_ejs_light": {
- "fontCharacter": "\\E021",
+ "fontCharacter": "\\E022",
"fontColor": "#b7b73b"
},
"_ejs": {
- "fontCharacter": "\\E021",
+ "fontCharacter": "\\E022",
"fontColor": "#cbcb41"
},
"_elixir_light": {
- "fontCharacter": "\\E022",
+ "fontCharacter": "\\E023",
"fontColor": "#9068b0"
},
"_elixir": {
- "fontCharacter": "\\E022",
+ "fontCharacter": "\\E023",
"fontColor": "#a074c4"
},
"_elixir_script_light": {
- "fontCharacter": "\\E023",
+ "fontCharacter": "\\E024",
"fontColor": "#9068b0"
},
"_elixir_script": {
- "fontCharacter": "\\E023",
+ "fontCharacter": "\\E024",
"fontColor": "#a074c4"
},
"_elm_light": {
- "fontCharacter": "\\E024",
+ "fontCharacter": "\\E025",
"fontColor": "#498ba7"
},
"_elm": {
- "fontCharacter": "\\E024",
+ "fontCharacter": "\\E025",
"fontColor": "#519aba"
},
"_eslint_light": {
- "fontCharacter": "\\E026",
+ "fontCharacter": "\\E027",
"fontColor": "#9068b0"
},
"_eslint": {
- "fontCharacter": "\\E026",
+ "fontCharacter": "\\E027",
"fontColor": "#a074c4"
},
"_eslint_1_light": {
- "fontCharacter": "\\E026",
+ "fontCharacter": "\\E027",
"fontColor": "#455155"
},
"_eslint_1": {
- "fontCharacter": "\\E026",
+ "fontCharacter": "\\E027",
"fontColor": "#4d5a5e"
},
"_ethereum_light": {
- "fontCharacter": "\\E027",
+ "fontCharacter": "\\E028",
"fontColor": "#498ba7"
},
"_ethereum": {
- "fontCharacter": "\\E027",
+ "fontCharacter": "\\E028",
"fontColor": "#519aba"
},
"_f-sharp_light": {
- "fontCharacter": "\\E028",
+ "fontCharacter": "\\E029",
"fontColor": "#498ba7"
},
"_f-sharp": {
- "fontCharacter": "\\E028",
+ "fontCharacter": "\\E029",
"fontColor": "#519aba"
},
"_favicon_light": {
- "fontCharacter": "\\E029",
+ "fontCharacter": "\\E02A",
"fontColor": "#b7b73b"
},
"_favicon": {
- "fontCharacter": "\\E029",
+ "fontCharacter": "\\E02A",
"fontColor": "#cbcb41"
},
"_firebase_light": {
- "fontCharacter": "\\E02A",
+ "fontCharacter": "\\E02B",
"fontColor": "#cc6d2e"
},
"_firebase": {
- "fontCharacter": "\\E02A",
+ "fontCharacter": "\\E02B",
"fontColor": "#e37933"
},
"_firefox_light": {
- "fontCharacter": "\\E02B",
+ "fontCharacter": "\\E02C",
"fontColor": "#cc6d2e"
},
"_firefox": {
- "fontCharacter": "\\E02B",
+ "fontCharacter": "\\E02C",
"fontColor": "#e37933"
},
"_font_light": {
- "fontCharacter": "\\E02D",
+ "fontCharacter": "\\E02E",
"fontColor": "#b8383d"
},
"_font": {
- "fontCharacter": "\\E02D",
+ "fontCharacter": "\\E02E",
"fontColor": "#cc3e44"
},
"_git_light": {
- "fontCharacter": "\\E02E",
+ "fontCharacter": "\\E02F",
"fontColor": "#3b4b52"
},
"_git": {
- "fontCharacter": "\\E02E",
+ "fontCharacter": "\\E02F",
"fontColor": "#41535b"
},
"_go_light": {
- "fontCharacter": "\\E032",
+ "fontCharacter": "\\E033",
"fontColor": "#498ba7"
},
"_go": {
- "fontCharacter": "\\E032",
+ "fontCharacter": "\\E033",
"fontColor": "#519aba"
},
"_go2_light": {
- "fontCharacter": "\\E033",
+ "fontCharacter": "\\E034",
"fontColor": "#498ba7"
},
"_go2": {
- "fontCharacter": "\\E033",
+ "fontCharacter": "\\E034",
"fontColor": "#519aba"
},
"_gradle_light": {
- "fontCharacter": "\\E034",
+ "fontCharacter": "\\E035",
"fontColor": "#7fae42"
},
"_gradle": {
- "fontCharacter": "\\E034",
+ "fontCharacter": "\\E035",
"fontColor": "#8dc149"
},
"_grails_light": {
- "fontCharacter": "\\E035",
+ "fontCharacter": "\\E036",
"fontColor": "#7fae42"
},
"_grails": {
- "fontCharacter": "\\E035",
+ "fontCharacter": "\\E036",
"fontColor": "#8dc149"
},
"_grunt_light": {
- "fontCharacter": "\\E036",
+ "fontCharacter": "\\E037",
"fontColor": "#cc6d2e"
},
"_grunt": {
- "fontCharacter": "\\E036",
+ "fontCharacter": "\\E037",
"fontColor": "#e37933"
},
"_gulp_light": {
- "fontCharacter": "\\E037",
+ "fontCharacter": "\\E038",
"fontColor": "#b8383d"
},
"_gulp": {
- "fontCharacter": "\\E037",
+ "fontCharacter": "\\E038",
"fontColor": "#cc3e44"
},
"_haml_light": {
- "fontCharacter": "\\E039",
+ "fontCharacter": "\\E03A",
"fontColor": "#b8383d"
},
"_haml": {
- "fontCharacter": "\\E039",
+ "fontCharacter": "\\E03A",
"fontColor": "#cc3e44"
},
"_haskell_light": {
- "fontCharacter": "\\E03A",
+ "fontCharacter": "\\E03B",
"fontColor": "#9068b0"
},
"_haskell": {
- "fontCharacter": "\\E03A",
+ "fontCharacter": "\\E03B",
"fontColor": "#a074c4"
},
"_haxe_light": {
- "fontCharacter": "\\E03B",
+ "fontCharacter": "\\E03C",
"fontColor": "#cc6d2e"
},
"_haxe": {
- "fontCharacter": "\\E03B",
+ "fontCharacter": "\\E03C",
"fontColor": "#e37933"
},
"_haxe_1_light": {
- "fontCharacter": "\\E03B",
+ "fontCharacter": "\\E03C",
"fontColor": "#b7b73b"
},
"_haxe_1": {
- "fontCharacter": "\\E03B",
+ "fontCharacter": "\\E03C",
"fontColor": "#cbcb41"
},
"_haxe_2_light": {
- "fontCharacter": "\\E03B",
+ "fontCharacter": "\\E03C",
"fontColor": "#498ba7"
},
"_haxe_2": {
- "fontCharacter": "\\E03B",
+ "fontCharacter": "\\E03C",
"fontColor": "#519aba"
},
"_haxe_3_light": {
- "fontCharacter": "\\E03B",
+ "fontCharacter": "\\E03C",
"fontColor": "#9068b0"
},
"_haxe_3": {
- "fontCharacter": "\\E03B",
+ "fontCharacter": "\\E03C",
"fontColor": "#a074c4"
},
"_heroku_light": {
- "fontCharacter": "\\E03C",
+ "fontCharacter": "\\E03D",
"fontColor": "#9068b0"
},
"_heroku": {
- "fontCharacter": "\\E03C",
+ "fontCharacter": "\\E03D",
"fontColor": "#a074c4"
},
"_hex_light": {
- "fontCharacter": "\\E03D",
+ "fontCharacter": "\\E03E",
"fontColor": "#b8383d"
},
"_hex": {
- "fontCharacter": "\\E03D",
+ "fontCharacter": "\\E03E",
"fontColor": "#cc3e44"
},
"_html_light": {
- "fontCharacter": "\\E03E",
+ "fontCharacter": "\\E03F",
"fontColor": "#cc6d2e"
},
"_html": {
- "fontCharacter": "\\E03E",
+ "fontCharacter": "\\E03F",
"fontColor": "#e37933"
},
"_html_erb_light": {
- "fontCharacter": "\\E03F",
+ "fontCharacter": "\\E040",
"fontColor": "#b8383d"
},
"_html_erb": {
- "fontCharacter": "\\E03F",
+ "fontCharacter": "\\E040",
"fontColor": "#cc3e44"
},
"_ignored_light": {
- "fontCharacter": "\\E040",
+ "fontCharacter": "\\E041",
"fontColor": "#3b4b52"
},
"_ignored": {
- "fontCharacter": "\\E040",
+ "fontCharacter": "\\E041",
"fontColor": "#41535b"
},
"_illustrator_light": {
- "fontCharacter": "\\E041",
+ "fontCharacter": "\\E042",
"fontColor": "#b7b73b"
},
"_illustrator": {
- "fontCharacter": "\\E041",
+ "fontCharacter": "\\E042",
"fontColor": "#cbcb41"
},
"_image_light": {
- "fontCharacter": "\\E042",
+ "fontCharacter": "\\E043",
"fontColor": "#9068b0"
},
"_image": {
- "fontCharacter": "\\E042",
+ "fontCharacter": "\\E043",
"fontColor": "#a074c4"
},
"_info_light": {
- "fontCharacter": "\\E043",
+ "fontCharacter": "\\E044",
"fontColor": "#498ba7"
},
"_info": {
- "fontCharacter": "\\E043",
+ "fontCharacter": "\\E044",
"fontColor": "#519aba"
},
"_ionic_light": {
- "fontCharacter": "\\E044",
+ "fontCharacter": "\\E045",
"fontColor": "#498ba7"
},
"_ionic": {
- "fontCharacter": "\\E044",
+ "fontCharacter": "\\E045",
"fontColor": "#519aba"
},
"_jade_light": {
- "fontCharacter": "\\E045",
+ "fontCharacter": "\\E046",
"fontColor": "#b8383d"
},
"_jade": {
- "fontCharacter": "\\E045",
+ "fontCharacter": "\\E046",
"fontColor": "#cc3e44"
},
"_java_light": {
- "fontCharacter": "\\E046",
+ "fontCharacter": "\\E047",
"fontColor": "#b8383d"
},
"_java": {
- "fontCharacter": "\\E046",
+ "fontCharacter": "\\E047",
"fontColor": "#cc3e44"
},
"_javascript_light": {
- "fontCharacter": "\\E047",
+ "fontCharacter": "\\E048",
"fontColor": "#b7b73b"
},
"_javascript": {
- "fontCharacter": "\\E047",
+ "fontCharacter": "\\E048",
"fontColor": "#cbcb41"
},
"_javascript_1_light": {
- "fontCharacter": "\\E047",
+ "fontCharacter": "\\E048",
"fontColor": "#cc6d2e"
},
"_javascript_1": {
- "fontCharacter": "\\E047",
+ "fontCharacter": "\\E048",
"fontColor": "#e37933"
},
"_javascript_2_light": {
- "fontCharacter": "\\E047",
+ "fontCharacter": "\\E048",
"fontColor": "#498ba7"
},
"_javascript_2": {
- "fontCharacter": "\\E047",
+ "fontCharacter": "\\E048",
"fontColor": "#519aba"
},
"_jenkins_light": {
- "fontCharacter": "\\E048",
+ "fontCharacter": "\\E049",
"fontColor": "#b8383d"
},
"_jenkins": {
- "fontCharacter": "\\E048",
+ "fontCharacter": "\\E049",
"fontColor": "#cc3e44"
},
"_jinja_light": {
- "fontCharacter": "\\E049",
+ "fontCharacter": "\\E04A",
"fontColor": "#b8383d"
},
"_jinja": {
- "fontCharacter": "\\E049",
+ "fontCharacter": "\\E04A",
"fontColor": "#cc3e44"
},
"_json_light": {
- "fontCharacter": "\\E04B",
+ "fontCharacter": "\\E04C",
"fontColor": "#b7b73b"
},
"_json": {
- "fontCharacter": "\\E04B",
+ "fontCharacter": "\\E04C",
"fontColor": "#cbcb41"
},
- "_julia_light": {
+ "_json_1_light": {
"fontCharacter": "\\E04C",
+ "fontColor": "#7fae42"
+ },
+ "_json_1": {
+ "fontCharacter": "\\E04C",
+ "fontColor": "#8dc149"
+ },
+ "_julia_light": {
+ "fontCharacter": "\\E04D",
"fontColor": "#9068b0"
},
"_julia": {
- "fontCharacter": "\\E04C",
+ "fontCharacter": "\\E04D",
"fontColor": "#a074c4"
},
"_karma_light": {
- "fontCharacter": "\\E04D",
+ "fontCharacter": "\\E04E",
"fontColor": "#7fae42"
},
"_karma": {
- "fontCharacter": "\\E04D",
+ "fontCharacter": "\\E04E",
"fontColor": "#8dc149"
},
+ "_kotlin_light": {
+ "fontCharacter": "\\E04F",
+ "fontColor": "#cc6d2e"
+ },
+ "_kotlin": {
+ "fontCharacter": "\\E04F",
+ "fontColor": "#e37933"
+ },
"_less_light": {
- "fontCharacter": "\\E04E",
+ "fontCharacter": "\\E050",
"fontColor": "#498ba7"
},
"_less": {
- "fontCharacter": "\\E04E",
+ "fontCharacter": "\\E050",
"fontColor": "#519aba"
},
"_license_light": {
- "fontCharacter": "\\E04F",
+ "fontCharacter": "\\E051",
"fontColor": "#b7b73b"
},
"_license": {
- "fontCharacter": "\\E04F",
+ "fontCharacter": "\\E051",
"fontColor": "#cbcb41"
},
"_license_1_light": {
- "fontCharacter": "\\E04F",
+ "fontCharacter": "\\E051",
"fontColor": "#cc6d2e"
},
"_license_1": {
- "fontCharacter": "\\E04F",
+ "fontCharacter": "\\E051",
"fontColor": "#e37933"
},
"_license_2_light": {
- "fontCharacter": "\\E04F",
+ "fontCharacter": "\\E051",
"fontColor": "#b8383d"
},
"_license_2": {
- "fontCharacter": "\\E04F",
+ "fontCharacter": "\\E051",
"fontColor": "#cc3e44"
},
"_liquid_light": {
- "fontCharacter": "\\E050",
+ "fontCharacter": "\\E052",
"fontColor": "#7fae42"
},
"_liquid": {
- "fontCharacter": "\\E050",
+ "fontCharacter": "\\E052",
"fontColor": "#8dc149"
},
"_livescript_light": {
- "fontCharacter": "\\E051",
+ "fontCharacter": "\\E053",
"fontColor": "#498ba7"
},
"_livescript": {
- "fontCharacter": "\\E051",
+ "fontCharacter": "\\E053",
"fontColor": "#519aba"
},
"_lock_light": {
- "fontCharacter": "\\E052",
+ "fontCharacter": "\\E054",
"fontColor": "#7fae42"
},
"_lock": {
- "fontCharacter": "\\E052",
+ "fontCharacter": "\\E054",
"fontColor": "#8dc149"
},
"_lua_light": {
- "fontCharacter": "\\E053",
+ "fontCharacter": "\\E055",
"fontColor": "#498ba7"
},
"_lua": {
- "fontCharacter": "\\E053",
+ "fontCharacter": "\\E055",
"fontColor": "#519aba"
},
"_makefile_light": {
- "fontCharacter": "\\E054",
+ "fontCharacter": "\\E056",
"fontColor": "#cc6d2e"
},
"_makefile": {
- "fontCharacter": "\\E054",
+ "fontCharacter": "\\E056",
"fontColor": "#e37933"
},
"_makefile_1_light": {
- "fontCharacter": "\\E054",
+ "fontCharacter": "\\E056",
"fontColor": "#9068b0"
},
"_makefile_1": {
- "fontCharacter": "\\E054",
+ "fontCharacter": "\\E056",
"fontColor": "#a074c4"
},
"_makefile_2_light": {
- "fontCharacter": "\\E054",
+ "fontCharacter": "\\E056",
"fontColor": "#627379"
},
"_makefile_2": {
- "fontCharacter": "\\E054",
+ "fontCharacter": "\\E056",
"fontColor": "#6d8086"
},
"_makefile_3_light": {
- "fontCharacter": "\\E054",
+ "fontCharacter": "\\E056",
"fontColor": "#498ba7"
},
"_makefile_3": {
- "fontCharacter": "\\E054",
+ "fontCharacter": "\\E056",
"fontColor": "#519aba"
},
"_markdown_light": {
- "fontCharacter": "\\E055",
+ "fontCharacter": "\\E057",
"fontColor": "#498ba7"
},
"_markdown": {
- "fontCharacter": "\\E055",
+ "fontCharacter": "\\E057",
"fontColor": "#519aba"
},
"_maven_light": {
- "fontCharacter": "\\E056",
+ "fontCharacter": "\\E058",
"fontColor": "#b8383d"
},
"_maven": {
- "fontCharacter": "\\E056",
+ "fontCharacter": "\\E058",
"fontColor": "#cc3e44"
},
"_mdo_light": {
- "fontCharacter": "\\E057",
+ "fontCharacter": "\\E059",
"fontColor": "#b8383d"
},
"_mdo": {
- "fontCharacter": "\\E057",
+ "fontCharacter": "\\E059",
"fontColor": "#cc3e44"
},
"_mustache_light": {
- "fontCharacter": "\\E058",
+ "fontCharacter": "\\E05A",
"fontColor": "#cc6d2e"
},
"_mustache": {
- "fontCharacter": "\\E058",
+ "fontCharacter": "\\E05A",
"fontColor": "#e37933"
},
"_npm_light": {
- "fontCharacter": "\\E05A",
+ "fontCharacter": "\\E05C",
"fontColor": "#3b4b52"
},
"_npm": {
- "fontCharacter": "\\E05A",
+ "fontCharacter": "\\E05C",
"fontColor": "#41535b"
},
"_npm_1_light": {
- "fontCharacter": "\\E05A",
+ "fontCharacter": "\\E05C",
"fontColor": "#b8383d"
},
"_npm_1": {
- "fontCharacter": "\\E05A",
+ "fontCharacter": "\\E05C",
"fontColor": "#cc3e44"
},
"_npm_ignored_light": {
- "fontCharacter": "\\E05B",
+ "fontCharacter": "\\E05D",
"fontColor": "#3b4b52"
},
"_npm_ignored": {
- "fontCharacter": "\\E05B",
+ "fontCharacter": "\\E05D",
"fontColor": "#41535b"
},
"_nunjucks_light": {
- "fontCharacter": "\\E05C",
+ "fontCharacter": "\\E05E",
"fontColor": "#7fae42"
},
"_nunjucks": {
- "fontCharacter": "\\E05C",
+ "fontCharacter": "\\E05E",
"fontColor": "#8dc149"
},
"_ocaml_light": {
- "fontCharacter": "\\E05D",
+ "fontCharacter": "\\E05F",
"fontColor": "#cc6d2e"
},
"_ocaml": {
- "fontCharacter": "\\E05D",
+ "fontCharacter": "\\E05F",
"fontColor": "#e37933"
},
"_odata_light": {
- "fontCharacter": "\\E05E",
+ "fontCharacter": "\\E060",
"fontColor": "#cc6d2e"
},
"_odata": {
- "fontCharacter": "\\E05E",
+ "fontCharacter": "\\E060",
"fontColor": "#e37933"
},
"_pdf_light": {
- "fontCharacter": "\\E05F",
+ "fontCharacter": "\\E061",
"fontColor": "#b8383d"
},
"_pdf": {
- "fontCharacter": "\\E05F",
+ "fontCharacter": "\\E061",
"fontColor": "#cc3e44"
},
"_perl_light": {
- "fontCharacter": "\\E060",
+ "fontCharacter": "\\E062",
"fontColor": "#498ba7"
},
"_perl": {
- "fontCharacter": "\\E060",
+ "fontCharacter": "\\E062",
"fontColor": "#519aba"
},
"_photoshop_light": {
- "fontCharacter": "\\E061",
+ "fontCharacter": "\\E063",
"fontColor": "#498ba7"
},
"_photoshop": {
- "fontCharacter": "\\E061",
+ "fontCharacter": "\\E063",
"fontColor": "#519aba"
},
"_php_light": {
- "fontCharacter": "\\E062",
+ "fontCharacter": "\\E064",
"fontColor": "#9068b0"
},
"_php": {
- "fontCharacter": "\\E062",
+ "fontCharacter": "\\E064",
"fontColor": "#a074c4"
},
"_powershell_light": {
- "fontCharacter": "\\E063",
+ "fontCharacter": "\\E065",
"fontColor": "#498ba7"
},
"_powershell": {
- "fontCharacter": "\\E063",
+ "fontCharacter": "\\E065",
"fontColor": "#519aba"
},
"_pug_light": {
- "fontCharacter": "\\E065",
+ "fontCharacter": "\\E067",
"fontColor": "#b8383d"
},
"_pug": {
- "fontCharacter": "\\E065",
+ "fontCharacter": "\\E067",
"fontColor": "#cc3e44"
},
"_puppet_light": {
- "fontCharacter": "\\E066",
+ "fontCharacter": "\\E068",
"fontColor": "#b7b73b"
},
"_puppet": {
- "fontCharacter": "\\E066",
+ "fontCharacter": "\\E068",
"fontColor": "#cbcb41"
},
"_python_light": {
- "fontCharacter": "\\E067",
+ "fontCharacter": "\\E069",
"fontColor": "#498ba7"
},
"_python": {
- "fontCharacter": "\\E067",
+ "fontCharacter": "\\E069",
"fontColor": "#519aba"
},
"_react_light": {
- "fontCharacter": "\\E069",
+ "fontCharacter": "\\E06B",
"fontColor": "#498ba7"
},
"_react": {
- "fontCharacter": "\\E069",
+ "fontCharacter": "\\E06B",
"fontColor": "#519aba"
},
"_rollup_light": {
- "fontCharacter": "\\E06A",
+ "fontCharacter": "\\E06C",
"fontColor": "#b8383d"
},
"_rollup": {
- "fontCharacter": "\\E06A",
+ "fontCharacter": "\\E06C",
"fontColor": "#cc3e44"
},
"_ruby_light": {
- "fontCharacter": "\\E06B",
+ "fontCharacter": "\\E06D",
"fontColor": "#b8383d"
},
"_ruby": {
- "fontCharacter": "\\E06B",
+ "fontCharacter": "\\E06D",
"fontColor": "#cc3e44"
},
"_rust_light": {
- "fontCharacter": "\\E06C",
+ "fontCharacter": "\\E06E",
"fontColor": "#627379"
},
"_rust": {
- "fontCharacter": "\\E06C",
+ "fontCharacter": "\\E06E",
"fontColor": "#6d8086"
},
"_salesforce_light": {
- "fontCharacter": "\\E06D",
+ "fontCharacter": "\\E06F",
"fontColor": "#498ba7"
},
"_salesforce": {
- "fontCharacter": "\\E06D",
+ "fontCharacter": "\\E06F",
"fontColor": "#519aba"
},
"_sass_light": {
- "fontCharacter": "\\E06E",
+ "fontCharacter": "\\E070",
"fontColor": "#dd4b78"
},
"_sass": {
- "fontCharacter": "\\E06E",
+ "fontCharacter": "\\E070",
"fontColor": "#f55385"
},
"_sbt_light": {
- "fontCharacter": "\\E06F",
+ "fontCharacter": "\\E071",
"fontColor": "#498ba7"
},
"_sbt": {
- "fontCharacter": "\\E06F",
+ "fontCharacter": "\\E071",
"fontColor": "#519aba"
},
"_scala_light": {
- "fontCharacter": "\\E070",
+ "fontCharacter": "\\E072",
"fontColor": "#b8383d"
},
"_scala": {
- "fontCharacter": "\\E070",
+ "fontCharacter": "\\E072",
"fontColor": "#cc3e44"
},
"_shell_light": {
- "fontCharacter": "\\E073",
+ "fontCharacter": "\\E075",
"fontColor": "#455155"
},
"_shell": {
- "fontCharacter": "\\E073",
+ "fontCharacter": "\\E075",
"fontColor": "#4d5a5e"
},
"_slim_light": {
- "fontCharacter": "\\E074",
+ "fontCharacter": "\\E076",
"fontColor": "#cc6d2e"
},
"_slim": {
- "fontCharacter": "\\E074",
+ "fontCharacter": "\\E076",
"fontColor": "#e37933"
},
"_smarty_light": {
- "fontCharacter": "\\E075",
+ "fontCharacter": "\\E077",
"fontColor": "#b7b73b"
},
"_smarty": {
- "fontCharacter": "\\E075",
+ "fontCharacter": "\\E077",
"fontColor": "#cbcb41"
},
"_spring_light": {
- "fontCharacter": "\\E076",
+ "fontCharacter": "\\E078",
"fontColor": "#7fae42"
},
"_spring": {
- "fontCharacter": "\\E076",
+ "fontCharacter": "\\E078",
"fontColor": "#8dc149"
},
+ "_stylelint_light": {
+ "fontCharacter": "\\E079",
+ "fontColor": "#bfc2c1"
+ },
+ "_stylelint": {
+ "fontCharacter": "\\E079",
+ "fontColor": "#d4d7d6"
+ },
+ "_stylelint_1_light": {
+ "fontCharacter": "\\E079",
+ "fontColor": "#455155"
+ },
+ "_stylelint_1": {
+ "fontCharacter": "\\E079",
+ "fontColor": "#4d5a5e"
+ },
"_stylus_light": {
- "fontCharacter": "\\E077",
+ "fontCharacter": "\\E07A",
"fontColor": "#7fae42"
},
"_stylus": {
- "fontCharacter": "\\E077",
+ "fontCharacter": "\\E07A",
"fontColor": "#8dc149"
},
"_sublime_light": {
- "fontCharacter": "\\E078",
+ "fontCharacter": "\\E07B",
"fontColor": "#cc6d2e"
},
"_sublime": {
- "fontCharacter": "\\E078",
+ "fontCharacter": "\\E07B",
"fontColor": "#e37933"
},
"_svg_light": {
- "fontCharacter": "\\E079",
+ "fontCharacter": "\\E07C",
"fontColor": "#9068b0"
},
"_svg": {
- "fontCharacter": "\\E079",
+ "fontCharacter": "\\E07C",
"fontColor": "#a074c4"
},
+ "_svg_1_light": {
+ "fontCharacter": "\\E07C",
+ "fontColor": "#498ba7"
+ },
+ "_svg_1": {
+ "fontCharacter": "\\E07C",
+ "fontColor": "#519aba"
+ },
"_swift_light": {
- "fontCharacter": "\\E07A",
+ "fontCharacter": "\\E07D",
"fontColor": "#cc6d2e"
},
"_swift": {
- "fontCharacter": "\\E07A",
+ "fontCharacter": "\\E07D",
"fontColor": "#e37933"
},
"_terraform_light": {
- "fontCharacter": "\\E07B",
+ "fontCharacter": "\\E07E",
"fontColor": "#9068b0"
},
"_terraform": {
- "fontCharacter": "\\E07B",
+ "fontCharacter": "\\E07E",
"fontColor": "#a074c4"
},
"_tex_light": {
- "fontCharacter": "\\E07C",
+ "fontCharacter": "\\E07F",
"fontColor": "#498ba7"
},
"_tex": {
- "fontCharacter": "\\E07C",
+ "fontCharacter": "\\E07F",
"fontColor": "#519aba"
},
"_tex_1_light": {
- "fontCharacter": "\\E07C",
+ "fontCharacter": "\\E07F",
"fontColor": "#b7b73b"
},
"_tex_1": {
- "fontCharacter": "\\E07C",
+ "fontCharacter": "\\E07F",
"fontColor": "#cbcb41"
},
"_tex_2_light": {
- "fontCharacter": "\\E07C",
+ "fontCharacter": "\\E07F",
"fontColor": "#cc6d2e"
},
"_tex_2": {
- "fontCharacter": "\\E07C",
+ "fontCharacter": "\\E07F",
"fontColor": "#e37933"
},
"_tex_3_light": {
- "fontCharacter": "\\E07C",
+ "fontCharacter": "\\E07F",
"fontColor": "#bfc2c1"
},
"_tex_3": {
- "fontCharacter": "\\E07C",
+ "fontCharacter": "\\E07F",
"fontColor": "#d4d7d6"
},
"_todo": {
- "fontCharacter": "\\E07E"
+ "fontCharacter": "\\E081"
},
"_twig_light": {
- "fontCharacter": "\\E07F",
+ "fontCharacter": "\\E082",
"fontColor": "#7fae42"
},
"_twig": {
- "fontCharacter": "\\E07F",
+ "fontCharacter": "\\E082",
"fontColor": "#8dc149"
},
"_typescript_light": {
- "fontCharacter": "\\E080",
+ "fontCharacter": "\\E083",
"fontColor": "#498ba7"
},
"_typescript": {
- "fontCharacter": "\\E080",
+ "fontCharacter": "\\E083",
"fontColor": "#519aba"
},
"_typescript_1_light": {
- "fontCharacter": "\\E080",
+ "fontCharacter": "\\E083",
"fontColor": "#b7b73b"
},
"_typescript_1": {
- "fontCharacter": "\\E080",
+ "fontCharacter": "\\E083",
"fontColor": "#cbcb41"
},
"_vala_light": {
- "fontCharacter": "\\E081",
+ "fontCharacter": "\\E084",
"fontColor": "#627379"
},
"_vala": {
- "fontCharacter": "\\E081",
+ "fontCharacter": "\\E084",
"fontColor": "#6d8086"
},
"_video_light": {
- "fontCharacter": "\\E082",
+ "fontCharacter": "\\E085",
"fontColor": "#dd4b78"
},
"_video": {
- "fontCharacter": "\\E082",
+ "fontCharacter": "\\E085",
"fontColor": "#f55385"
},
"_vue_light": {
- "fontCharacter": "\\E083",
+ "fontCharacter": "\\E086",
"fontColor": "#7fae42"
},
"_vue": {
- "fontCharacter": "\\E083",
+ "fontCharacter": "\\E086",
"fontColor": "#8dc149"
},
+ "_wasm_light": {
+ "fontCharacter": "\\E087",
+ "fontColor": "#9068b0"
+ },
+ "_wasm": {
+ "fontCharacter": "\\E087",
+ "fontColor": "#a074c4"
+ },
+ "_wat_light": {
+ "fontCharacter": "\\E088",
+ "fontColor": "#9068b0"
+ },
+ "_wat": {
+ "fontCharacter": "\\E088",
+ "fontColor": "#a074c4"
+ },
"_webpack_light": {
- "fontCharacter": "\\E084",
+ "fontCharacter": "\\E089",
"fontColor": "#498ba7"
},
"_webpack": {
- "fontCharacter": "\\E084",
+ "fontCharacter": "\\E089",
"fontColor": "#519aba"
},
"_wgt_light": {
- "fontCharacter": "\\E085",
+ "fontCharacter": "\\E08A",
"fontColor": "#498ba7"
},
"_wgt": {
- "fontCharacter": "\\E085",
+ "fontCharacter": "\\E08A",
"fontColor": "#519aba"
},
"_windows_light": {
- "fontCharacter": "\\E086",
+ "fontCharacter": "\\E08B",
"fontColor": "#498ba7"
},
"_windows": {
- "fontCharacter": "\\E086",
+ "fontCharacter": "\\E08B",
"fontColor": "#519aba"
},
"_word_light": {
- "fontCharacter": "\\E087",
+ "fontCharacter": "\\E08C",
"fontColor": "#498ba7"
},
"_word": {
- "fontCharacter": "\\E087",
+ "fontCharacter": "\\E08C",
"fontColor": "#519aba"
},
"_xls_light": {
- "fontCharacter": "\\E088",
+ "fontCharacter": "\\E08D",
"fontColor": "#7fae42"
},
"_xls": {
- "fontCharacter": "\\E088",
+ "fontCharacter": "\\E08D",
"fontColor": "#8dc149"
},
"_xml_light": {
- "fontCharacter": "\\E089",
+ "fontCharacter": "\\E08E",
"fontColor": "#cc6d2e"
},
"_xml": {
- "fontCharacter": "\\E089",
+ "fontCharacter": "\\E08E",
"fontColor": "#e37933"
},
"_yarn_light": {
- "fontCharacter": "\\E08A",
+ "fontCharacter": "\\E08F",
"fontColor": "#498ba7"
},
"_yarn": {
- "fontCharacter": "\\E08A",
+ "fontCharacter": "\\E08F",
"fontColor": "#519aba"
},
"_yml_light": {
- "fontCharacter": "\\E08B",
+ "fontCharacter": "\\E090",
"fontColor": "#9068b0"
},
"_yml": {
- "fontCharacter": "\\E08B",
+ "fontCharacter": "\\E090",
"fontColor": "#a074c4"
},
"_zip_light": {
- "fontCharacter": "\\E08C",
+ "fontCharacter": "\\E091",
"fontColor": "#b8383d"
},
"_zip": {
- "fontCharacter": "\\E08C",
+ "fontCharacter": "\\E091",
"fontColor": "#cc3e44"
},
"_zip_1_light": {
- "fontCharacter": "\\E08C",
+ "fontCharacter": "\\E091",
"fontColor": "#627379"
},
"_zip_1": {
- "fontCharacter": "\\E08C",
+ "fontCharacter": "\\E091",
"fontColor": "#6d8086"
}
},
@@ -1231,8 +1303,12 @@
"jinja": "_jinja",
"jinja2": "_jinja",
"jl": "_julia",
+ "kt": "_kotlin",
+ "kts": "_kotlin",
"liquid": "_liquid",
"ls": "_livescript",
+ "argdown": "_argdown",
+ "ad": "_argdown",
"mustache": "_mustache",
"stache": "_mustache",
"njk": "_nunjucks",
@@ -1254,6 +1330,7 @@
"pp": "_puppet",
"epp": "_puppet",
"cjsx": "_react",
+ "r": "_R",
"erb": "_html_erb",
"erb.html": "_html_erb",
"html.erb": "_html_erb",
@@ -1279,6 +1356,8 @@
"vala": "_vala",
"vapi": "_vala",
"vue": "_vue",
+ "wasm": "_wasm",
+ "wat": "_wat",
"jar": "_zip",
"zip": "_zip_1",
"wgt": "_wgt",
@@ -1310,6 +1389,12 @@
"mp3": "_audio",
"ogg": "_audio",
"wav": "_audio",
+ "flac": "_audio",
+ "3ds": "_svg_1",
+ "3dm": "_svg_1",
+ "stl": "_svg_1",
+ "obj": "_svg_1",
+ "dae": "_svg_1",
"babelrc": "_babel",
"bowerrc": "_bower",
"dockerignore": "_docker_1",
@@ -1323,6 +1408,12 @@
"firebaserc": "_firebase",
"jshintrc": "_javascript_2",
"jscsrc": "_javascript_2",
+ "stylelintrc": "_stylelint",
+ "stylelintrc.json": "_stylelint",
+ "stylelintrc.yaml": "_stylelint",
+ "stylelintrc.yml": "_stylelint",
+ "stylelintrc.js": "_stylelint",
+ "stylelintignore": "_stylelint_1",
"direnv": "_config",
"env": "_config",
"static": "_config",
@@ -1341,9 +1432,13 @@
"readme.md": "_info",
"changelog.md": "_clock",
"changelog": "_clock",
+ "changes.md": "_clock",
"version.md": "_clock",
"version": "_clock",
"mvnw": "_maven",
+ "swagger.json": "_json_1",
+ "swagger.yml": "_json_1",
+ "swagger.yaml": "_json_1",
"mime.types": "_config",
"jenkinsfile": "_jenkins",
"bower.json": "_bower",
@@ -1360,6 +1455,7 @@
"ionic.project": "_ionic",
"rollup.config.js": "_rollup",
"sass-lint.yml": "_sass",
+ "stylelint.config.js": "_stylelint",
"yarn.clean": "_yarn",
"yarn.lock": "_yarn",
"webpack.config.js": "_webpack",
@@ -1405,6 +1501,7 @@
"powershell": "_powershell",
"jade": "_jade",
"python": "_python",
+ "r": "_R",
"ruby": "_ruby",
"rust": "_rust",
"scss": "_sass",
@@ -1414,7 +1511,26 @@
"typescript": "_typescript",
"typescriptreact": "_react",
"xml": "_xml",
- "yaml": "_yml"
+ "yaml": "_yml",
+ "argdown": "_argdown",
+ "elm": "_elm",
+ "ocaml": "_ocaml",
+ "nunjucks": "_nunjucks",
+ "mustache": "_mustache",
+ "erb": "_html_erb",
+ "terraform": "_terraform",
+ "vue": "_vue",
+ "sass": "_sass",
+ "kotlin": "_kotlin",
+ "jinja": "_jinja",
+ "haxe": "_haxe",
+ "haskell": "_haskell",
+ "gradle": "_gradle",
+ "elixir": "_elixir",
+ "haml": "_haml",
+ "stylus": "_stylus",
+ "vala": "_vala",
+ "todo": "_todo"
},
"light": {
"file": "_default_light",
@@ -1478,8 +1594,12 @@
"jinja": "_jinja_light",
"jinja2": "_jinja_light",
"jl": "_julia_light",
+ "kt": "_kotlin_light",
+ "kts": "_kotlin_light",
"liquid": "_liquid_light",
"ls": "_livescript_light",
+ "argdown": "_argdown_light",
+ "ad": "_argdown_light",
"mustache": "_mustache_light",
"stache": "_mustache_light",
"njk": "_nunjucks_light",
@@ -1501,6 +1621,7 @@
"pp": "_puppet_light",
"epp": "_puppet_light",
"cjsx": "_react_light",
+ "r": "_R_light",
"erb": "_html_erb_light",
"erb.html": "_html_erb_light",
"html.erb": "_html_erb_light",
@@ -1526,6 +1647,8 @@
"vala": "_vala_light",
"vapi": "_vala_light",
"vue": "_vue_light",
+ "wasm": "_wasm_light",
+ "wat": "_wat_light",
"jar": "_zip_light",
"zip": "_zip_1_light",
"wgt": "_wgt_light",
@@ -1557,6 +1680,12 @@
"mp3": "_audio_light",
"ogg": "_audio_light",
"wav": "_audio_light",
+ "flac": "_audio_light",
+ "3ds": "_svg_1_light",
+ "3dm": "_svg_1_light",
+ "stl": "_svg_1_light",
+ "obj": "_svg_1_light",
+ "dae": "_svg_1_light",
"babelrc": "_babel_light",
"bowerrc": "_bower_light",
"dockerignore": "_docker_1_light",
@@ -1570,6 +1699,12 @@
"firebaserc": "_firebase_light",
"jshintrc": "_javascript_2_light",
"jscsrc": "_javascript_2_light",
+ "stylelintrc": "_stylelint_light",
+ "stylelintrc.json": "_stylelint_light",
+ "stylelintrc.yaml": "_stylelint_light",
+ "stylelintrc.yml": "_stylelint_light",
+ "stylelintrc.js": "_stylelint_light",
+ "stylelintignore": "_stylelint_1_light",
"direnv": "_config_light",
"env": "_config_light",
"static": "_config_light",
@@ -1610,6 +1745,7 @@
"powershell": "_powershell_light",
"jade": "_jade_light",
"python": "_python_light",
+ "r": "_R_light",
"ruby": "_ruby_light",
"rust": "_rust_light",
"scss": "_sass_light",
@@ -1619,7 +1755,25 @@
"typescript": "_typescript_light",
"typescriptreact": "_react_light",
"xml": "_xml_light",
- "yaml": "_yml_light"
+ "yaml": "_yml_light",
+ "argdown": "_argdown_light",
+ "elm": "_elm_light",
+ "ocaml": "_ocaml_light",
+ "nunjucks": "_nunjucks_light",
+ "mustache": "_mustache_light",
+ "erb": "_html_erb_light",
+ "terraform": "_terraform_light",
+ "vue": "_vue_light",
+ "sass": "_sass_light",
+ "kotlin": "_kotlin_light",
+ "jinja": "_jinja_light",
+ "haxe": "_haxe_light",
+ "haskell": "_haskell_light",
+ "gradle": "_gradle_light",
+ "elixir": "_elixir_light",
+ "haml": "_haml_light",
+ "stylus": "_stylus_light",
+ "vala": "_vala_light"
},
"fileNames": {
"mix": "_hex_light",
@@ -1628,9 +1782,13 @@
"readme.md": "_info_light",
"changelog.md": "_clock_light",
"changelog": "_clock_light",
+ "changes.md": "_clock_light",
"version.md": "_clock_light",
"version": "_clock_light",
"mvnw": "_maven_light",
+ "swagger.json": "_json_1_light",
+ "swagger.yml": "_json_1_light",
+ "swagger.yaml": "_json_1_light",
"mime.types": "_config_light",
"jenkinsfile": "_jenkins_light",
"bower.json": "_bower_light",
@@ -1647,6 +1805,7 @@
"ionic.project": "_ionic_light",
"rollup.config.js": "_rollup_light",
"sass-lint.yml": "_sass_light",
+ "stylelint.config.js": "_stylelint_light",
"yarn.clean": "_yarn_light",
"yarn.lock": "_yarn_light",
"webpack.config.js": "_webpack_light",
@@ -1663,5 +1822,5 @@
"npm-debug.log": "_npm_ignored_light"
}
},
- "version": "https://github.com/jesseweed/seti-ui/commit/188dda34a56b9555c7d363771264c24f4693983d"
+ "version": "https://github.com/jesseweed/seti-ui/commit/7714a720646300bb8f6d1690752cd71f50991414"
}
\ No newline at end of file
diff --git a/extensions/theme-solarized-light/themes/solarized-light-color-theme.json b/extensions/theme-solarized-light/themes/solarized-light-color-theme.json
index 37f3e385d7b..1f0cd3202e7 100644
--- a/extensions/theme-solarized-light/themes/solarized-light-color-theme.json
+++ b/extensions/theme-solarized-light/themes/solarized-light-color-theme.json
@@ -481,6 +481,9 @@
"terminal.ansiBrightBlue": "#839496",
"terminal.ansiBrightMagenta": "#6c71c4",
"terminal.ansiBrightCyan": "#93a1a1",
- "terminal.ansiBrightWhite": "#eee8d5"
+ "terminal.ansiBrightWhite": "#eee8d5",
+
+ // Interactive Playground
+ "walkThrough.embeddedEditorBackground": "#00000014"
}
}
\ No newline at end of file
diff --git a/extensions/typescript-basics/language-configuration.json b/extensions/typescript-basics/language-configuration.json
index 1e8f440a420..b41053843cf 100644
--- a/extensions/typescript-basics/language-configuration.json
+++ b/extensions/typescript-basics/language-configuration.json
@@ -25,6 +25,7 @@
["\"", "\""],
["`", "`"]
],
+ "autoCloseBefore": ";:.,=}])>` \n\t",
"folding": {
"markers": {
"start": "^\\s*//\\s*#?region\\b",
diff --git a/extensions/typescript-basics/syntaxes/TypeScript.tmLanguage.json b/extensions/typescript-basics/syntaxes/TypeScript.tmLanguage.json
index 6cc1633cd14..1003c443970 100644
--- a/extensions/typescript-basics/syntaxes/TypeScript.tmLanguage.json
+++ b/extensions/typescript-basics/syntaxes/TypeScript.tmLanguage.json
@@ -4,7 +4,7 @@
"If you want to provide a fix or improvement, please create a pull request against the original repository.",
"Once accepted there, we are happy to receive an update request."
],
- "version": "https://github.com/Microsoft/TypeScript-TmLanguage/commit/53ce68bc2e8abcfa9bce7fb555ccd60c5bacd11e",
+ "version": "https://github.com/Microsoft/TypeScript-TmLanguage/commit/3f8583969690a13fc8d41cbc788d4ab5a19248ca",
"name": "TypeScript",
"scopeName": "source.ts",
"patterns": [
@@ -93,6 +93,10 @@
},
{
"include": "#export-declaration"
+ },
+ {
+ "name": "storage.modifier.ts",
+ "match": "(?)\n )) |\n ((async\\s*)?(\n ((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?[\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?[\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
+ "begin": "(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*\n# function assignment |\n(=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?[\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?[\\(]\\s*([\\{\\[]\\s*)?$))) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?[\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
"beginCaptures": {
"1": {
"name": "meta.definition.variable.ts entity.name.function.ts"
@@ -379,6 +471,40 @@
}
]
},
+ "var-single-const": {
+ "patterns": [
+ {
+ "name": "meta.var-single-variable.expr.ts",
+ "begin": "(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*\n# function assignment |\n(=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?[\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?[\\(]\\s*([\\{\\[]\\s*)?$))) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?[\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
+ "beginCaptures": {
+ "1": {
+ "name": "meta.definition.variable.ts variable.other.constant.ts entity.name.function.ts"
+ }
+ },
+ "end": "(?=$|^|[;,=}]|(\\s+(of|in)\\s+))",
+ "patterns": [
+ {
+ "include": "#var-single-variable-type-annotation"
+ }
+ ]
+ },
+ {
+ "name": "meta.var-single-variable.expr.ts",
+ "begin": "([_$[:alpha:]][_$[:alnum:]]*)",
+ "beginCaptures": {
+ "1": {
+ "name": "meta.definition.variable.ts variable.other.constant.ts"
+ }
+ },
+ "end": "(?=$|^|[;,=}]|(\\s+(of|in)\\s+))",
+ "patterns": [
+ {
+ "include": "#var-single-variable-type-annotation"
+ }
+ ]
+ }
+ ]
+ },
"var-single-variable-type-annotation": {
"patterns": [
{
@@ -428,6 +554,42 @@
}
]
},
+ "destructuring-const": {
+ "patterns": [
+ {
+ "name": "meta.object-binding-pattern-variable.ts",
+ "begin": "(?)\n )) |\n ((async\\s*)?(\n ((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?[\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?[\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
+ "match": "(?x)(?:(?)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?[\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?[\\(]\\s*([\\{\\[]\\s*)?$))) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?[\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
"captures": {
"1": {
"name": "storage.modifier.ts"
@@ -619,9 +892,12 @@
"patterns": [
{
"name": "meta.parameter.object-binding-pattern.ts",
- "begin": "(?)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?[\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?[\\(]\\s*([\\{\\[]\\s*)?$))) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?[\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
+ "captures": {
+ "1": {
+ "name": "meta.definition.property.ts entity.name.function.ts"
},
- {
- "include": "#string"
- },
- {
- "include": "#array-literal"
- },
- {
- "include": "#numeric-literal"
- },
- {
- "include": "#comment"
- },
- {
- "match": "(?x)([_$[:alpha:]][_$[:alnum:]]*)(\\?)?(?=(\\?\\s*)?\\s*\n# function assignment |\n(=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?[\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?[\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
- "captures": {
- "1": {
- "name": "meta.definition.property.ts entity.name.function.ts"
- },
- "2": {
- "name": "keyword.operator.optional.ts"
- }
- }
- },
- {
- "name": "meta.definition.property.ts variable.object.property.ts",
- "match": "[_$[:alpha:]][_$[:alnum:]]*"
- },
- {
- "name": "keyword.operator.optional.ts",
- "match": "\\?"
+ "2": {
+ "name": "keyword.operator.optional.ts"
}
- ]
+ }
+ },
+ {
+ "name": "meta.definition.property.ts variable.object.property.ts",
+ "match": "[_$[:alpha:]][_$[:alnum:]]*"
+ },
+ {
+ "name": "keyword.operator.optional.ts",
+ "match": "\\?"
}
]
},
@@ -862,21 +1135,24 @@
},
"function-declaration": {
"name": "meta.function.ts",
- "begin": "(?)\n )) |\n ((async\\s*)?(\n ((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?[\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
+ "match": "(?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=:\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?[\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
"captures": {
"0": {
"name": "meta.object-literal.key.ts"
@@ -2308,13 +2614,13 @@
]
},
"function-call": {
- "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
- "end": "(?<=\\))(?!(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
+ "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
+ "end": "(?<=\\))(?!(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
"patterns": [
{
"name": "meta.function-call.ts",
"begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*))",
- "end": "(?=\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
+ "end": "(?=\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
"patterns": [
{
"include": "#literal"
@@ -2405,7 +2711,7 @@
]
},
{
- "begin": "(?<=[(=,]|=>)\\s*(async)?(?=\\s*((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*))?\\(\\s*$)",
+ "begin": "(?<=[(=,]|=>)\\s*(async)?(?=\\s*((((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*))?\\()|(<))\\s*$)",
"beginCaptures": {
"1": {
"name": "storage.modifier.async.ts"
@@ -2488,7 +2794,7 @@
"patterns": [
{
"name": "cast.expr.ts",
- "begin": "(?:(?*?\\&\\|\\^]|[^_$[:alnum:]](?:\\+\\+|\\-\\-)|[^\\+]\\+|[^\\-]\\-))\\s*(<)(?!\\=)",
+ "begin": "(?:(?*?\\&\\|\\^]|[^_$[:alnum:]](?:\\+\\+|\\-\\-)|[^\\+]\\+|[^\\-]\\-))\\s*(<)(?!\\=)(?!\\s*$)",
"beginCaptures": {
"1": {
"name": "meta.brace.angle.ts"
@@ -2570,11 +2876,11 @@
},
{
"name": "keyword.operator.expression.in.ts",
- "match": "(?)\n )) |\n ((async\\s*)?(\n ((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?[\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n))",
+ "match": "(?x)(?:(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*)?([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?[\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n))",
"captures": {
"1": {
"name": "punctuation.accessor.ts"
@@ -3287,6 +3593,10 @@
},
{
"include": "#punctuation-comma"
+ },
+ {
+ "name": "keyword.operator.assignment.ts",
+ "match": "(=)(?!>)"
}
]
},
@@ -3361,7 +3671,7 @@
},
"type-primitive": {
"name": "support.type.primitive.ts",
- "match": "(?)\n ))\n ))\n)) |\n(:\\s*((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?[\\(]\\s*([\\{\\[]\\s*)?$))))",
+ "captures": {
+ "1": {
+ "name": "storage.modifier.ts"
+ },
+ "2": {
+ "name": "keyword.operator.rest.ts"
+ },
+ "3": {
+ "name": "entity.name.function.ts variable.language.this.ts"
+ },
+ "4": {
+ "name": "entity.name.function.ts"
+ },
+ "5": {
+ "name": "keyword.operator.optional.ts"
+ }
+ }
+ },
+ {
+ "match": "(?x)(?:(?)))(?=\\s*\\{)",
+ "begin": "([&|\\*])(?=\\s*\\{)",
"beginCaptures": {
- "1": {
+ "0": {
"name": "keyword.operator.type.ts"
- },
- "2": {
- "name": "keyword.operator.assignment.ts"
}
},
"end": "(?<=\\})",
@@ -3625,13 +3979,10 @@
]
},
{
- "begin": "([&|])|(=(?!>))",
+ "begin": "[&|\\*]",
"beginCaptures": {
- "1": {
+ "0": {
"name": "keyword.operator.type.ts"
- },
- "2": {
- "name": "keyword.operator.assignment.ts"
}
},
"end": "(?=\\S)"
@@ -3763,7 +4114,7 @@
"patterns": [
{
"name": "string.template.ts",
- "begin": "([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)`)",
+ "begin": "([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)`)",
"beginCaptures": {
"1": {
"name": "entity.name.function.tagged-template.ts"
@@ -3829,7 +4180,7 @@
"patterns": [
{
"name": "string.regexp.ts",
- "begin": "(?|&&|\\|\\||\\*\\/)\\s*(\\/)(?![\\/*])(?=(?:[^\\/\\\\\\[]|\\\\.|\\[([^\\]\\\\]|\\\\.)+\\])+\\/(?![\\/*])[gimsuy]*(?!\\s*[a-zA-Z0-9_$]))",
+ "begin": "(?|&&|\\|\\||\\*\\/)\\s*(\\/)(?![\\/*])(?=(?:[^\\/\\\\\\[]|\\\\.|\\[([^\\]\\\\]|\\\\.)+\\])+\\/[gimsuy]*(?!\\s*[a-zA-Z0-9_$]))",
"beginCaptures": {
"1": {
"name": "punctuation.definition.string.begin.ts"
@@ -3852,7 +4203,7 @@
},
{
"name": "string.regexp.ts",
- "begin": "(?\\s*$)",
+ "begin": "^(///)\\s*(?=<(reference|amd-dependency|amd-module)(\\s+(path|types|no-default-lib|lib|name)\\s*=\\s*((\\'([^\\'\\\\]|\\\\\\'|\\\\)*\\')|(\\\"([^\\\"\\\\]|\\\\\\\"|\\\\)*\\\")))+\\s*/>\\s*$)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.comment.ts"
}
},
- "end": "(?=^)",
+ "end": "(?=$)",
"patterns": [
{
"name": "meta.tag.ts",
@@ -4130,7 +4503,7 @@
"patterns": [
{
"name": "entity.other.attribute-name.directive.ts",
- "match": "path|types|no-default-lib|name"
+ "match": "path|types|no-default-lib|lib|name"
},
{
"name": "keyword.operator.assignment.ts",
diff --git a/extensions/typescript-basics/syntaxes/TypeScriptReact.tmLanguage.json b/extensions/typescript-basics/syntaxes/TypeScriptReact.tmLanguage.json
index 7f80b22ef0d..2b7cc3076b6 100644
--- a/extensions/typescript-basics/syntaxes/TypeScriptReact.tmLanguage.json
+++ b/extensions/typescript-basics/syntaxes/TypeScriptReact.tmLanguage.json
@@ -4,7 +4,7 @@
"If you want to provide a fix or improvement, please create a pull request against the original repository.",
"Once accepted there, we are happy to receive an update request."
],
- "version": "https://github.com/Microsoft/TypeScript-TmLanguage/commit/53ce68bc2e8abcfa9bce7fb555ccd60c5bacd11e",
+ "version": "https://github.com/Microsoft/TypeScript-TmLanguage/commit/67d50d27f0c459e6ccc9adc6645454ecb1c2406c",
"name": "TypeScriptReact",
"scopeName": "source.tsx",
"patterns": [
@@ -93,6 +93,10 @@
},
{
"include": "#export-declaration"
+ },
+ {
+ "name": "storage.modifier.tsx",
+ "match": "(?)\n )) |\n ((async\\s*)?(\n ([\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ([\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
+ "begin": "(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*\n# function assignment |\n(=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$))) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
"beginCaptures": {
"1": {
"name": "meta.definition.variable.tsx entity.name.function.tsx"
@@ -382,6 +474,40 @@
}
]
},
+ "var-single-const": {
+ "patterns": [
+ {
+ "name": "meta.var-single-variable.expr.tsx",
+ "begin": "(?x)([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*\n# function assignment |\n(=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$))) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
+ "beginCaptures": {
+ "1": {
+ "name": "meta.definition.variable.tsx variable.other.constant.tsx entity.name.function.tsx"
+ }
+ },
+ "end": "(?=$|^|[;,=}]|(\\s+(of|in)\\s+))",
+ "patterns": [
+ {
+ "include": "#var-single-variable-type-annotation"
+ }
+ ]
+ },
+ {
+ "name": "meta.var-single-variable.expr.tsx",
+ "begin": "([_$[:alpha:]][_$[:alnum:]]*)",
+ "beginCaptures": {
+ "1": {
+ "name": "meta.definition.variable.tsx variable.other.constant.tsx"
+ }
+ },
+ "end": "(?=$|^|[;,=}]|(\\s+(of|in)\\s+))",
+ "patterns": [
+ {
+ "include": "#var-single-variable-type-annotation"
+ }
+ ]
+ }
+ ]
+ },
"var-single-variable-type-annotation": {
"patterns": [
{
@@ -431,6 +557,42 @@
}
]
},
+ "destructuring-const": {
+ "patterns": [
+ {
+ "name": "meta.object-binding-pattern-variable.tsx",
+ "begin": "(?)\n )) |\n ((async\\s*)?(\n ([\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ([\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
+ "match": "(?x)(?:(?)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$))) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
"captures": {
"1": {
"name": "storage.modifier.tsx"
@@ -622,9 +895,12 @@
"patterns": [
{
"name": "meta.parameter.object-binding-pattern.tsx",
- "begin": "(?)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$))) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
+ "captures": {
+ "1": {
+ "name": "meta.definition.property.tsx entity.name.function.tsx"
},
- {
- "include": "#string"
- },
- {
- "include": "#array-literal"
- },
- {
- "include": "#numeric-literal"
- },
- {
- "include": "#comment"
- },
- {
- "match": "(?x)([_$[:alpha:]][_$[:alnum:]]*)(\\?)?(?=(\\?\\s*)?\\s*\n# function assignment |\n(=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ([\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ([\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
- "captures": {
- "1": {
- "name": "meta.definition.property.tsx entity.name.function.tsx"
- },
- "2": {
- "name": "keyword.operator.optional.tsx"
- }
- }
- },
- {
- "name": "meta.definition.property.tsx variable.object.property.tsx",
- "match": "[_$[:alpha:]][_$[:alnum:]]*"
- },
- {
- "name": "keyword.operator.optional.tsx",
- "match": "\\?"
+ "2": {
+ "name": "keyword.operator.optional.tsx"
}
- ]
+ }
+ },
+ {
+ "name": "meta.definition.property.tsx variable.object.property.tsx",
+ "match": "[_$[:alpha:]][_$[:alnum:]]*"
+ },
+ {
+ "name": "keyword.operator.optional.tsx",
+ "match": "\\?"
}
]
},
@@ -865,21 +1138,24 @@
},
"function-declaration": {
"name": "meta.function.tsx",
- "begin": "(?)\n )) |\n ((async\\s*)?(\n ([\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
+ "match": "(?x)(?:([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=:\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))",
"captures": {
"0": {
"name": "meta.object-literal.key.tsx"
@@ -2311,13 +2617,13 @@
]
},
"function-call": {
- "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
- "end": "(?<=\\))(?!(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
+ "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
+ "end": "(?<=\\))(?!(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
"patterns": [
{
"name": "meta.function-call.tsx",
"begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*))",
- "end": "(?=\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
+ "end": "(?=\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
"patterns": [
{
"include": "#literal"
@@ -2408,7 +2714,7 @@
]
},
{
- "begin": "(?<=[(=,]|=>)\\s*(async)?(?=\\s*((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*))?\\(\\s*$)",
+ "begin": "(?<=[(=,]|=>)\\s*(async)?(?=\\s*((((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*))?\\()|(<))\\s*$)",
"beginCaptures": {
"1": {
"name": "storage.modifier.async.tsx"
@@ -2536,11 +2842,11 @@
},
{
"name": "keyword.operator.expression.in.tsx",
- "match": "(?)\n )) |\n ((async\\s*)?(\n ([\\(]\\s*([\\{\\[]\\s*)?$) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n))",
+ "match": "(?x)(?:(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*)?([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$)) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?\n [(]\\s*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n(\n [<]\\s*[_$[:alpha:]][_$[:alnum:]]*\\s+extends\\s*[^=>] # < typeparam extends\n) |\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)? # typeparameters\n \\(\\s*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)]|\\<[^<>]+\\>|\\([^\\(\\)]+\\))+)? # return type\n \\s*=> # arrow operator\n)\n ))\n))",
"captures": {
"1": {
"name": "punctuation.accessor.tsx"
@@ -3253,6 +3559,10 @@
},
{
"include": "#punctuation-comma"
+ },
+ {
+ "name": "keyword.operator.assignment.tsx",
+ "match": "(=)(?!>)"
}
]
},
@@ -3327,7 +3637,7 @@
},
"type-primitive": {
"name": "support.type.primitive.tsx",
- "match": "(?)\n ))\n ))\n)) |\n(:\\s*((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$))))",
+ "captures": {
+ "1": {
+ "name": "storage.modifier.tsx"
+ },
+ "2": {
+ "name": "keyword.operator.rest.tsx"
+ },
+ "3": {
+ "name": "entity.name.function.tsx variable.language.this.tsx"
+ },
+ "4": {
+ "name": "entity.name.function.tsx"
+ },
+ "5": {
+ "name": "keyword.operator.optional.tsx"
+ }
+ }
+ },
+ {
+ "match": "(?x)(?:(?)))(?=\\s*\\{)",
+ "begin": "([&|\\*])(?=\\s*\\{)",
"beginCaptures": {
- "1": {
+ "0": {
"name": "keyword.operator.type.tsx"
- },
- "2": {
- "name": "keyword.operator.assignment.tsx"
}
},
"end": "(?<=\\})",
@@ -3591,13 +3945,10 @@
]
},
{
- "begin": "([&|])|(=(?!>))",
+ "begin": "[&|\\*]",
"beginCaptures": {
- "1": {
+ "0": {
"name": "keyword.operator.type.tsx"
- },
- "2": {
- "name": "keyword.operator.assignment.tsx"
}
},
"end": "(?=\\S)"
@@ -3729,7 +4080,7 @@
"patterns": [
{
"name": "string.template.tsx",
- "begin": "([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)`)",
+ "begin": "([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)`)",
"beginCaptures": {
"1": {
"name": "entity.name.function.tagged-template.tsx"
@@ -3795,7 +4146,7 @@
"patterns": [
{
"name": "string.regexp.tsx",
- "begin": "(?|&&|\\|\\||\\*\\/)\\s*(\\/)(?![\\/*])(?=(?:[^\\/\\\\\\[]|\\\\.|\\[([^\\]\\\\]|\\\\.)+\\])+\\/(?![\\/*])[gimsuy]*(?!\\s*[a-zA-Z0-9_$]))",
+ "begin": "(?|&&|\\|\\||\\*\\/)\\s*(\\/)(?![\\/*])(?=(?:[^\\/\\\\\\[]|\\\\.|\\[([^\\]\\\\]|\\\\.)+\\])+\\/[gimsuy]*(?!\\s*[a-zA-Z0-9_$]))",
"beginCaptures": {
"1": {
"name": "punctuation.definition.string.begin.tsx"
@@ -3818,7 +4169,7 @@
},
{
"name": "string.regexp.tsx",
- "begin": "(?\\s*$)",
+ "begin": "^(///)\\s*(?=<(reference|amd-dependency|amd-module)(\\s+(path|types|no-default-lib|lib|name)\\s*=\\s*((\\'([^\\'\\\\]|\\\\\\'|\\\\)*\\')|(\\\"([^\\\"\\\\]|\\\\\\\"|\\\\)*\\\")))+\\s*/>\\s*$)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.comment.tsx"
}
},
- "end": "(?=^)",
+ "end": "(?=$)",
"patterns": [
{
"name": "meta.tag.tsx",
@@ -4096,7 +4469,7 @@
"patterns": [
{
"name": "entity.other.attribute-name.directive.tsx",
- "match": "path|types|no-default-lib|name"
+ "match": "path|types|no-default-lib|lib|name"
},
{
"name": "keyword.operator.assignment.tsx",
@@ -4557,8 +4930,8 @@
]
},
"jsx-tag-without-attributes-in-expression": {
- "begin": "(?:*]|&&|\\|\\||\\?|^return|[^\\._$[:alnum:]]return|^default|[^\\._$[:alnum:]]default|^)\\s*(?=(<)\\s*(?:([_$a-zA-Z][-$\\w.]*)(?))",
- "end": "(?!(<)\\s*(?:([_$a-zA-Z][-$\\w.]*)(?))",
+ "begin": "(?:*]|&&|\\|\\||\\?|^await|[^\\._$[:alnum:]]await|^return|[^\\._$[:alnum:]]return|^default|[^\\._$[:alnum:]]default|^yield|[^\\._$[:alnum:]]yield|^)\\s*(?=(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?))",
+ "end": "(?!(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?))",
"patterns": [
{
"include": "#jsx-tag-without-attributes"
@@ -4567,8 +4940,8 @@
},
"jsx-tag-without-attributes": {
"name": "meta.tag.without-attributes.tsx",
- "begin": "(<)\\s*(?:([_$a-zA-Z][-$\\w.]*)(?)",
- "end": "()\\s*(?:([_$a-zA-Z][-$\\w.]*)(?)",
+ "begin": "(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?)",
+ "end": "()\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.tsx"
@@ -4617,8 +4990,8 @@
]
},
"jsx-tag-in-expression": {
- "begin": "(?x)\n (?:*]|&&|\\|\\||\\?|^return|[^\\._$[:alnum:]]return|^default|[^\\._$[:alnum:]]default|^)\\s*\n (?!<\\s*[_$[:alpha:]][_$[:alnum:]]*((\\s+extends\\s+[^=>])|,)) # look ahead is not type parameter of arrow\n (?=(<)\\s*(?:([_$a-zA-Z][-$\\w.]*)(?\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)|(\\s+))(?!\\?)|\\/?>))",
- "end": "(?!(<)\\s*(?:([_$a-zA-Z][-$\\w.]*)(?\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)|(\\s+))(?!\\?)|\\/?>))",
+ "begin": "(?x)\n (?:*]|&&|\\|\\||\\?|^await|[^\\._$[:alnum:]]await|^return|[^\\._$[:alnum:]]return|^default|[^\\._$[:alnum:]]default|^yield|[^\\._$[:alnum:]]yield|^)\\s*\n (?!<\\s*[_$[:alpha:]][_$[:alnum:]]*((\\s+extends\\s+[^=>])|,)) # look ahead is not type parameter of arrow\n (?=(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?))",
+ "end": "(?!(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?))",
"patterns": [
{
"include": "#jsx-tag"
@@ -4627,8 +5000,8 @@
},
"jsx-tag": {
"name": "meta.tag.tsx",
- "begin": "(?=(<)\\s*(?:([_$a-zA-Z][-$\\w.]*)(?\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)|(\\s+))(?!\\?)|\\/?>))",
- "end": "(/>)|(?:()\\s*(?:([_$a-zA-Z][-$\\w.]*)(?))",
+ "begin": "(?=(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?))",
+ "end": "(/>)|(?:()\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?))",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.end.tsx"
@@ -4654,7 +5027,7 @@
},
"patterns": [
{
- "begin": "(<)\\s*(?:([_$a-zA-Z][-$\\w.]*)(?\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[=]|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)|(\\s+))(?!\\?)|\\/?>)",
+ "begin": "(<)\\s*(?:([_$[:alpha:]][-_$[:alnum:].]*)(?)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.tsx"
@@ -4787,7 +5160,7 @@
]
},
"jsx-tag-attribute-name": {
- "match": "(?x)\n \\s*\n (?:([_$a-zA-Z][-$\\w.]*)(:))?\n ([_$a-zA-Z][-$\\w]*)\n (?=\\s|=|/?>|/\\*|//)",
+ "match": "(?x)\n \\s*\n (?:([_$[:alpha:]][-_$[:alnum:].]*)(:))?\n ([_$[:alpha:]][-_$[:alnum:]]*)\n (?=\\s|=|/?>|/\\*|//)",
"captures": {
"1": {
"name": "entity.other.attribute-name.namespace.tsx"
diff --git a/extensions/typescript-basics/test/colorize-results/test-brackets_tsx.json b/extensions/typescript-basics/test/colorize-results/test-brackets_tsx.json
index 92fe70a1da2..c7e165ae25e 100644
--- a/extensions/typescript-basics/test/colorize-results/test-brackets_tsx.json
+++ b/extensions/typescript-basics/test/colorize-results/test-brackets_tsx.json
@@ -146,9 +146,9 @@
"c": "//",
"t": "source.tsx comment.line.double-slash.tsx punctuation.definition.comment.tsx",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -157,9 +157,9 @@
"c": " Highlight ok here",
"t": "source.tsx comment.line.double-slash.tsx",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -221,7 +221,7 @@
},
{
"c": " ",
- "t": "source.tsx meta.interface.tsx",
+ "t": "source.tsx meta.interface.tsx meta.field.declaration.tsx",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
diff --git a/extensions/typescript-basics/test/colorize-results/test-issue11_ts.json b/extensions/typescript-basics/test/colorize-results/test-issue11_ts.json
index c7ee2e71f21..379ac403ce6 100644
--- a/extensions/typescript-basics/test/colorize-results/test-issue11_ts.json
+++ b/extensions/typescript-basics/test/colorize-results/test-issue11_ts.json
@@ -1937,7 +1937,7 @@
},
{
"c": " ",
- "t": "source.ts meta.class.ts meta.type.parameters.ts meta.object.type.ts",
+ "t": "source.ts meta.class.ts meta.type.parameters.ts meta.object.type.ts meta.field.declaration.ts",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2960,7 +2960,7 @@
},
{
"c": "t",
- "t": "source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.readwrite.ts",
+ "t": "source.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.constant.ts",
"r": {
"dark_plus": "variable: #9CDCFE",
"light_plus": "variable: #001080",
diff --git a/extensions/typescript-basics/test/colorize-results/test-issue5431_ts.json b/extensions/typescript-basics/test/colorize-results/test-issue5431_ts.json
index e2fc02cc2ad..6a27304f24a 100644
--- a/extensions/typescript-basics/test/colorize-results/test-issue5431_ts.json
+++ b/extensions/typescript-basics/test/colorize-results/test-issue5431_ts.json
@@ -188,7 +188,7 @@
},
{
"c": "timeRange",
- "t": "source.ts meta.function.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.readwrite.ts",
+ "t": "source.ts meta.function.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.constant.ts",
"r": {
"dark_plus": "variable: #9CDCFE",
"light_plus": "variable: #001080",
diff --git a/extensions/typescript-basics/test/colorize-results/test-issue5465_ts.json b/extensions/typescript-basics/test/colorize-results/test-issue5465_ts.json
index f4a61d6e1ac..717e252e429 100644
--- a/extensions/typescript-basics/test/colorize-results/test-issue5465_ts.json
+++ b/extensions/typescript-basics/test/colorize-results/test-issue5465_ts.json
@@ -199,7 +199,7 @@
},
{
"c": " ",
- "t": "source.ts meta.function.ts meta.block.ts",
+ "t": "source.ts meta.function.ts meta.block.ts meta.array.literal.ts",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
diff --git a/extensions/typescript-basics/test/colorize-results/test-issue5566_ts.json b/extensions/typescript-basics/test/colorize-results/test-issue5566_ts.json
index 86357c7c0cd..c7c430d7632 100644
--- a/extensions/typescript-basics/test/colorize-results/test-issue5566_ts.json
+++ b/extensions/typescript-basics/test/colorize-results/test-issue5566_ts.json
@@ -111,7 +111,7 @@
},
{
"c": "foo",
- "t": "source.ts meta.function.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts entity.name.function.ts",
+ "t": "source.ts meta.function.ts meta.block.ts meta.var.expr.ts meta.var-single-variable.expr.ts meta.definition.variable.ts variable.other.constant.ts entity.name.function.ts",
"r": {
"dark_plus": "entity.name.function: #DCDCAA",
"light_plus": "entity.name.function: #795E26",
diff --git a/extensions/typescript-basics/test/colorize-results/test-members_ts.json b/extensions/typescript-basics/test/colorize-results/test-members_ts.json
index 05e924b9c13..04519a1105b 100644
--- a/extensions/typescript-basics/test/colorize-results/test-members_ts.json
+++ b/extensions/typescript-basics/test/colorize-results/test-members_ts.json
@@ -122,7 +122,7 @@
},
{
"c": " ",
- "t": "source.ts meta.class.ts",
+ "t": "source.ts meta.class.ts meta.field.declaration.ts",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
diff --git a/extensions/typescript-basics/test/colorize-results/test_ts.json b/extensions/typescript-basics/test/colorize-results/test_ts.json
index 72fb99dba53..bf74c1c2174 100644
--- a/extensions/typescript-basics/test/colorize-results/test_ts.json
+++ b/extensions/typescript-basics/test/colorize-results/test_ts.json
@@ -3,9 +3,9 @@
"c": "/*",
"t": "source.ts comment.block.ts punctuation.definition.comment.ts",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -14,9 +14,9 @@
"c": " Game of Life",
"t": "source.ts comment.block.ts",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -25,9 +25,9 @@
"c": " * Implemented in TypeScript",
"t": "source.ts comment.block.ts",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -36,9 +36,9 @@
"c": " * To learn more about TypeScript, please visit http://www.typescriptlang.org/",
"t": "source.ts comment.block.ts",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -47,9 +47,9 @@
"c": " ",
"t": "source.ts comment.block.ts",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -58,9 +58,9 @@
"c": "*/",
"t": "source.ts comment.block.ts punctuation.definition.comment.ts",
"r": {
- "dark_plus": "comment: #608B4E",
+ "dark_plus": "comment: #6A9955",
"light_plus": "comment: #008000",
- "dark_vs": "comment: #608B4E",
+ "dark_vs": "comment: #6A9955",
"light_vs": "comment: #008000",
"hc_black": "comment: #7CA668"
}
@@ -232,7 +232,7 @@
},
{
"c": " ",
- "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts",
+ "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts meta.field.declaration.ts",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -320,7 +320,7 @@
},
{
"c": " ",
- "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts",
+ "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts meta.field.declaration.ts",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -408,7 +408,7 @@
},
{
"c": " ",
- "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts",
+ "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts meta.field.declaration.ts",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -474,7 +474,7 @@
},
{
"c": "\t\t",
- "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts",
+ "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts meta.method.declaration.ts",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1156,7 +1156,7 @@
},
{
"c": " ",
- "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts",
+ "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts meta.field.declaration.ts",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1244,7 +1244,7 @@
},
{
"c": " ",
- "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts",
+ "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts meta.field.declaration.ts",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1332,7 +1332,7 @@
},
{
"c": " ",
- "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts",
+ "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts meta.field.declaration.ts",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1420,7 +1420,7 @@
},
{
"c": " ",
- "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts",
+ "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts meta.field.declaration.ts",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1508,7 +1508,7 @@
},
{
"c": " ",
- "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts",
+ "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts meta.field.declaration.ts",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1596,7 +1596,7 @@
},
{
"c": " ",
- "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts",
+ "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts meta.field.declaration.ts",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1684,7 +1684,7 @@
},
{
"c": " ",
- "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts",
+ "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts meta.field.declaration.ts",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1772,7 +1772,7 @@
},
{
"c": " ",
- "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts",
+ "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts meta.field.declaration.ts",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1860,7 +1860,7 @@
},
{
"c": " ",
- "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts",
+ "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts meta.field.declaration.ts",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1871,7 +1871,7 @@
},
{
"c": "world",
- "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts variable.other.readwrite.ts",
+ "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts meta.field.declaration.ts meta.definition.property.ts variable.object.property.ts",
"r": {
"dark_plus": "variable: #9CDCFE",
"light_plus": "variable: #001080",
@@ -1893,7 +1893,7 @@
},
{
"c": "\t\t",
- "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts",
+ "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts meta.method.declaration.ts",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -8416,7 +8416,7 @@
},
{
"c": " ",
- "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.var.expr.ts",
+ "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.var.expr.ts meta.array.literal.ts",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -8801,7 +8801,7 @@
},
{
"c": " ",
- "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.block.ts meta.var.expr.ts",
+ "t": "source.ts meta.namespace.declaration.ts meta.block.ts meta.class.ts meta.method.declaration.ts meta.block.ts meta.block.ts meta.var.expr.ts meta.array.literal.ts",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
diff --git a/extensions/typescript-basics/test/colorize-results/tsconfig_json.json b/extensions/typescript-basics/test/colorize-results/tsconfig_json.json
index 13700965aba..69ce07f643d 100644
--- a/extensions/typescript-basics/test/colorize-results/tsconfig_json.json
+++ b/extensions/typescript-basics/test/colorize-results/tsconfig_json.json
@@ -1,7 +1,7 @@
[
{
"c": "{",
- "t": "source.json meta.structure.dictionary.json punctuation.definition.dictionary.begin.json",
+ "t": "source.json.comments meta.structure.dictionary.json.comments punctuation.definition.dictionary.begin.json.comments",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -12,7 +12,7 @@
},
{
"c": "\t",
- "t": "source.json meta.structure.dictionary.json",
+ "t": "source.json.comments meta.structure.dictionary.json.comments",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -23,7 +23,7 @@
},
{
"c": "\"",
- "t": "source.json meta.structure.dictionary.json string.json support.type.property-name.json punctuation.support.type.property-name.begin.json",
+ "t": "source.json.comments meta.structure.dictionary.json.comments string.json.comments support.type.property-name.json.comments punctuation.support.type.property-name.begin.json.comments",
"r": {
"dark_plus": "support.type.property-name: #9CDCFE",
"light_plus": "support.type.property-name.json: #0451A5",
@@ -34,7 +34,7 @@
},
{
"c": "compilerOptions",
- "t": "source.json meta.structure.dictionary.json string.json support.type.property-name.json",
+ "t": "source.json.comments meta.structure.dictionary.json.comments string.json.comments support.type.property-name.json.comments",
"r": {
"dark_plus": "support.type.property-name: #9CDCFE",
"light_plus": "support.type.property-name.json: #0451A5",
@@ -45,7 +45,7 @@
},
{
"c": "\"",
- "t": "source.json meta.structure.dictionary.json string.json support.type.property-name.json punctuation.support.type.property-name.end.json",
+ "t": "source.json.comments meta.structure.dictionary.json.comments string.json.comments support.type.property-name.json.comments punctuation.support.type.property-name.end.json.comments",
"r": {
"dark_plus": "support.type.property-name: #9CDCFE",
"light_plus": "support.type.property-name.json: #0451A5",
@@ -56,7 +56,7 @@
},
{
"c": ":",
- "t": "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.separator.dictionary.key-value.json",
+ "t": "source.json.comments meta.structure.dictionary.json.comments meta.structure.dictionary.value.json.comments punctuation.separator.dictionary.key-value.json.comments",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -67,7 +67,7 @@
},
{
"c": " ",
- "t": "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json",
+ "t": "source.json.comments meta.structure.dictionary.json.comments meta.structure.dictionary.value.json.comments",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -78,7 +78,7 @@
},
{
"c": "{",
- "t": "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json punctuation.definition.dictionary.begin.json",
+ "t": "source.json.comments meta.structure.dictionary.json.comments meta.structure.dictionary.value.json.comments meta.structure.dictionary.json.comments punctuation.definition.dictionary.begin.json.comments",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -89,7 +89,7 @@
},
{
"c": "\t\t",
- "t": "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json",
+ "t": "source.json.comments meta.structure.dictionary.json.comments meta.structure.dictionary.value.json.comments meta.structure.dictionary.json.comments",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -100,7 +100,7 @@
},
{
"c": "\"",
- "t": "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json string.json support.type.property-name.json punctuation.support.type.property-name.begin.json",
+ "t": "source.json.comments meta.structure.dictionary.json.comments meta.structure.dictionary.value.json.comments meta.structure.dictionary.json.comments string.json.comments support.type.property-name.json.comments punctuation.support.type.property-name.begin.json.comments",
"r": {
"dark_plus": "support.type.property-name: #9CDCFE",
"light_plus": "support.type.property-name.json: #0451A5",
@@ -111,7 +111,7 @@
},
{
"c": "target",
- "t": "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json string.json support.type.property-name.json",
+ "t": "source.json.comments meta.structure.dictionary.json.comments meta.structure.dictionary.value.json.comments meta.structure.dictionary.json.comments string.json.comments support.type.property-name.json.comments",
"r": {
"dark_plus": "support.type.property-name: #9CDCFE",
"light_plus": "support.type.property-name.json: #0451A5",
@@ -122,7 +122,7 @@
},
{
"c": "\"",
- "t": "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json string.json support.type.property-name.json punctuation.support.type.property-name.end.json",
+ "t": "source.json.comments meta.structure.dictionary.json.comments meta.structure.dictionary.value.json.comments meta.structure.dictionary.json.comments string.json.comments support.type.property-name.json.comments punctuation.support.type.property-name.end.json.comments",
"r": {
"dark_plus": "support.type.property-name: #9CDCFE",
"light_plus": "support.type.property-name.json: #0451A5",
@@ -133,7 +133,7 @@
},
{
"c": ":",
- "t": "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.separator.dictionary.key-value.json",
+ "t": "source.json.comments meta.structure.dictionary.json.comments meta.structure.dictionary.value.json.comments meta.structure.dictionary.json.comments meta.structure.dictionary.value.json.comments punctuation.separator.dictionary.key-value.json.comments",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -144,7 +144,7 @@
},
{
"c": " ",
- "t": "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json",
+ "t": "source.json.comments meta.structure.dictionary.json.comments meta.structure.dictionary.value.json.comments meta.structure.dictionary.json.comments meta.structure.dictionary.value.json.comments",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -155,7 +155,7 @@
},
{
"c": "\"",
- "t": "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json punctuation.definition.string.begin.json",
+ "t": "source.json.comments meta.structure.dictionary.json.comments meta.structure.dictionary.value.json.comments meta.structure.dictionary.json.comments meta.structure.dictionary.value.json.comments string.quoted.double.json.comments punctuation.definition.string.begin.json.comments",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string: #A31515",
@@ -166,7 +166,7 @@
},
{
"c": "es6",
- "t": "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json",
+ "t": "source.json.comments meta.structure.dictionary.json.comments meta.structure.dictionary.value.json.comments meta.structure.dictionary.json.comments meta.structure.dictionary.value.json.comments string.quoted.double.json.comments",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string: #A31515",
@@ -177,7 +177,7 @@
},
{
"c": "\"",
- "t": "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json punctuation.definition.string.end.json",
+ "t": "source.json.comments meta.structure.dictionary.json.comments meta.structure.dictionary.value.json.comments meta.structure.dictionary.json.comments meta.structure.dictionary.value.json.comments string.quoted.double.json.comments punctuation.definition.string.end.json.comments",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string: #A31515",
@@ -188,7 +188,7 @@
},
{
"c": "\t",
- "t": "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json",
+ "t": "source.json.comments meta.structure.dictionary.json.comments meta.structure.dictionary.value.json.comments meta.structure.dictionary.json.comments meta.structure.dictionary.value.json.comments",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -199,7 +199,7 @@
},
{
"c": "}",
- "t": "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json punctuation.definition.dictionary.end.json",
+ "t": "source.json.comments meta.structure.dictionary.json.comments meta.structure.dictionary.value.json.comments meta.structure.dictionary.json.comments punctuation.definition.dictionary.end.json.comments",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -210,7 +210,7 @@
},
{
"c": "}",
- "t": "source.json meta.structure.dictionary.json punctuation.definition.dictionary.end.json",
+ "t": "source.json.comments meta.structure.dictionary.json.comments punctuation.definition.dictionary.end.json.comments",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
diff --git a/extensions/typescript-language-features/.vscodeignore b/extensions/typescript-language-features/.vscodeignore
index d257eda277b..4f118359bf9 100644
--- a/extensions/typescript-language-features/.vscodeignore
+++ b/extensions/typescript-language-features/.vscodeignore
@@ -1,4 +1,6 @@
build/**
src/**
test/**
-tsconfig.json
\ No newline at end of file
+out/**
+tsconfig.json
+extension.webpack.config.js
diff --git a/extensions/typescript-language-features/OSSREADME.json b/extensions/typescript-language-features/OSSREADME.json
index 160da003cd8..692c0592a16 100644
--- a/extensions/typescript-language-features/OSSREADME.json
+++ b/extensions/typescript-language-features/OSSREADME.json
@@ -1,7 +1,106 @@
-[{
- "name": "TypeScript-TmLanguage",
- "version": "0.1.8",
- "license": "MIT",
- "repositoryURL": "https://github.com/Microsoft/TypeScript-TmLanguage",
- "description": "The files syntaxes/TypeScript.tmLanguage.json and syntaxes/TypeScriptReact.tmLanguage.json were derived from TypeScript.tmLanguage and TypeScriptReact.tmLanguage in https://github.com/Microsoft/TypeScript-TmLanguage."
-}]
+[
+ {
+ "name": "TypeScript-TmLanguage",
+ "version": "0.1.8",
+ "license": "MIT",
+ "repositoryURL": "https://github.com/Microsoft/TypeScript-TmLanguage",
+ "description": "The files syntaxes/TypeScript.tmLanguage.json and syntaxes/TypeScriptReact.tmLanguage.json were derived from TypeScript.tmLanguage and TypeScriptReact.tmLanguage in https://github.com/Microsoft/TypeScript-TmLanguage."
+ },
+ {
+ "name": "definitelytyped",
+ "license": "MIT",
+ "repositoryURL": "https://github.com/DefinitelyTyped/DefinitelyTyped",
+ "description": "Typings files that are downloaded by TypeScript. These typings power IntelliSense for JavaScript and TypeScript."
+ },
+ {
+ "name": "Unicode",
+ "license": "UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE",
+ "description": "These files are included by TypeScript.Ø",
+ "licenseDetail": [
+ "Unicode Data Files include all data files under the directories",
+ "http://www.unicode.org/Public/, http://www.unicode.org/reports/,",
+ "http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and",
+ "http://www.unicode.org/utility/trac/browser/.",
+ "",
+ "Unicode Data Files do not include PDF online code charts under the",
+ "directory http://www.unicode.org/Public/.",
+ "",
+ "Software includes any source code published in the Unicode Standard",
+ "or under the directories",
+ "http://www.unicode.org/Public/, http://www.unicode.org/reports/,",
+ "http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and",
+ "http://www.unicode.org/utility/trac/browser/.",
+ "",
+ "NOTICE TO USER: Carefully read the following legal agreement.",
+ "BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S",
+ "DATA FILES (\"DATA FILES\"), AND/OR SOFTWARE (\"SOFTWARE\"),",
+ "YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE",
+ "TERMS AND CONDITIONS OF THIS AGREEMENT.",
+ "IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE",
+ "THE DATA FILES OR SOFTWARE.",
+ "",
+ "COPYRIGHT AND PERMISSION NOTICE",
+ "",
+ "Copyright (c) 1991-2017 Unicode, Inc. All rights reserved.",
+ "Distributed under the Terms of Use in http://www.unicode.org/copyright.html.",
+ "",
+ "Permission is hereby granted, free of charge, to any person obtaining",
+ "a copy of the Unicode data files and any associated documentation",
+ "(the \"Data Files\") or Unicode software and any associated documentation",
+ "(the \"Software\") to deal in the Data Files or Software",
+ "without restriction, including without limitation the rights to use,",
+ "copy, modify, merge, publish, distribute, and/or sell copies of",
+ "the Data Files or Software, and to permit persons to whom the Data Files",
+ "or Software are furnished to do so, provided that either",
+ "(a) this copyright and permission notice appear with all copies",
+ "of the Data Files or Software, or",
+ "(b) this copyright and permission notice appear in associated",
+ "Documentation.",
+ "",
+ "THE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF",
+ "ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE",
+ "WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND",
+ "NONINFRINGEMENT OF THIRD PARTY RIGHTS.",
+ "IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS",
+ "NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL",
+ "DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,",
+ "DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER",
+ "TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR",
+ "PERFORMANCE OF THE DATA FILES OR SOFTWARE.",
+ "",
+ "Except as contained in this notice, the name of a copyright holder",
+ "shall not be used in advertising or otherwise to promote the sale,",
+ "use or other dealings in these Data Files or Software without prior",
+ "written authorization of the copyright holder."
+ ]
+ },
+ {
+ "name": "Document Object Model",
+ "license": "W3C License",
+ "description": "These files",
+ "licenseDetail": [
+ "W3C License",
+ "This work is being provided by the copyright holders under the following license.",
+ "By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions.",
+ "Permission to copy, modify, and distribute this work, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following ",
+ "on ALL copies of the work or portions thereof, including modifications:",
+ "* The full text of this NOTICE in a location viewable to users of the redistributed or derivative work.",
+ "* Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C Software and Document Short Notice should be included.",
+ "* Notice of any changes or modifications, through a copyright statement on the new code or document such as \"This software or document includes material copied from or derived ",
+ "from Document Object Model. Copyright © 2015 W3C® (MIT, ERCIM, Keio, Beihang).\" ",
+ "Disclaimers",
+ "THIS WORK IS PROVIDED \"AS IS",
+ " AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR ",
+ "FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.",
+ "COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT.",
+ "The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work without specific, written prior permission. ",
+ "Title to copyright in this work will at all times remain with copyright holders."
+ ]
+ },
+ {
+ "name": "Web Background Synchronization",
+ "license": "Apache2",
+ "repositoryURL": "https://github.com/WICG/BackgroundSync",
+ "description": "TypeScript includes files related to this specification"
+ }
+]
\ No newline at end of file
diff --git a/extensions/typescript-language-features/README.md b/extensions/typescript-language-features/README.md
new file mode 100644
index 00000000000..26942f9d460
--- /dev/null
+++ b/extensions/typescript-language-features/README.md
@@ -0,0 +1,7 @@
+# Language Features for Typescript and Javascript files
+
+**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.
+
+## Features
+
+See [Typescript in Visual Studio Code](https://code.visualstudio.com/docs/languages/typescript) and [Javascript in Visual Studio Code](https://code.visualstudio.com/docs/languages/javascript) to learn about the features of this extension.
\ No newline at end of file
diff --git a/extensions/typescript-language-features/extension.webpack.config.js b/extensions/typescript-language-features/extension.webpack.config.js
new file mode 100644
index 00000000000..de88398eca0
--- /dev/null
+++ b/extensions/typescript-language-features/extension.webpack.config.js
@@ -0,0 +1,20 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+//@ts-check
+
+'use strict';
+
+const withDefaults = require('../shared.webpack.config');
+
+module.exports = withDefaults({
+ context: __dirname,
+ resolve: {
+ mainFields: ['module', 'main']
+ },
+ entry: {
+ extension: './src/extension.ts',
+ }
+});
diff --git a/extensions/typescript-language-features/package.json b/extensions/typescript-language-features/package.json
index d94a54d8837..4e5a46671d9 100644
--- a/extensions/typescript-language-features/package.json
+++ b/extensions/typescript-language-features/package.json
@@ -16,13 +16,14 @@
"Programming Languages"
],
"dependencies": {
- "semver": "4.3.6",
- "vscode-extension-telemetry": "0.0.17",
- "vscode-nls": "^3.2.1"
+ "jsonc-parser": "^2.0.1",
+ "semver": "5.5.1",
+ "vscode-extension-telemetry": "0.0.18",
+ "vscode-nls": "^4.0.0"
},
"devDependencies": {
"@types/node": "8.0.33",
- "@types/semver": "5.4.0",
+ "@types/semver": "^5.5.0",
"vscode": "^1.1.10"
},
"scripts": {
@@ -40,7 +41,8 @@
"onCommand:javascript.goToProjectConfig",
"onCommand:typescript.goToProjectConfig",
"onCommand:typescript.openTsServerLog",
- "onCommand:workbench.action.tasks.runTask"
+ "onCommand:workbench.action.tasks.runTask",
+ "onLanguage:jsonc"
],
"main": "./out/extension",
"contributes": {
@@ -68,7 +70,10 @@
"type": "boolean",
"default": false,
"description": "%typescript.disableAutomaticTypeAcquisition%",
- "scope": "window"
+ "scope": "window",
+ "tags": [
+ "usesOnlineServices"
+ ]
},
"typescript.npm": {
"type": [
@@ -361,13 +366,20 @@
"javascript.implicitProjectConfig.experimentalDecorators": {
"type": "boolean",
"default": false,
- "description": "%javascript.implicitProjectConfig.experimentalDecorators%",
+ "markdownDescription": "%javascript.implicitProjectConfig.experimentalDecorators%",
"scope": "window"
},
"javascript.nameSuggestions": {
"type": "boolean",
"default": true,
"description": "%javascript.nameSuggestions%",
+ "scope": "resource",
+ "deprecationMessage": "%javascript.nameSuggestions.deprecationMessage%"
+ },
+ "javascript.suggest.names": {
+ "type": "boolean",
+ "default": true,
+ "description": "%configuration.suggest.names%",
"scope": "resource"
},
"typescript.tsc.autoDetect": {
@@ -379,6 +391,12 @@
"build",
"watch"
],
+ "enumDescriptions": [
+ "%typescript.tsc.autoDetect.on%",
+ "%typescript.tsc.autoDetect.off%",
+ "%typescript.tsc.autoDetect.build%",
+ "%typescript.tsc.autoDetect.watch%"
+ ],
"description": "%typescript.tsc.autoDetect%",
"scope": "window"
},
@@ -386,12 +404,38 @@
"type": "boolean",
"default": true,
"description": "%typescript.quickSuggestionsForPaths%",
+ "scope": "resource",
+ "deprecationMessage": "%typescript.quickSuggestionsForPaths.deprecationMessage%"
+ },
+ "javascript.suggest.paths": {
+ "type": "boolean",
+ "default": true,
+ "description": "%configuration.suggest.paths%",
+ "scope": "resource"
+ },
+ "typescript.suggest.paths": {
+ "type": "boolean",
+ "default": true,
+ "description": "%configuration.suggest.paths%",
"scope": "resource"
},
"typescript.autoImportSuggestions.enabled": {
"type": "boolean",
"default": true,
"description": "%typescript.autoImportSuggestions.enabled%",
+ "scope": "resource",
+ "deprecationMessage": "%typescript.autoImportSuggestions.enabled.deprecationMessage%"
+ },
+ "javascript.suggest.autoImports": {
+ "type": "boolean",
+ "default": true,
+ "description": "%configuration.suggest.autoImports%",
+ "scope": "resource"
+ },
+ "typescript.suggest.autoImports": {
+ "type": "boolean",
+ "default": true,
+ "description": "%configuration.suggest.autoImports%",
"scope": "resource"
},
"typescript.locale": {
@@ -413,7 +457,7 @@
null
],
"default": null,
- "description": "%typescript.locale%",
+ "markdownDescription": "%typescript.locale%",
"scope": "window"
},
"javascript.suggestionActions.enabled": {
@@ -436,7 +480,7 @@
"double"
],
"default": "auto",
- "description": "%typescript.preferences.quoteStyle%",
+ "markdownDescription": "%typescript.preferences.quoteStyle%",
"scope": "resource"
},
"typescript.preferences.quoteStyle": {
@@ -447,7 +491,7 @@
"double"
],
"default": "auto",
- "description": "%typescript.preferences.quoteStyle%",
+ "markdownDescription": "%typescript.preferences.quoteStyle%",
"scope": "resource"
},
"javascript.preferences.importModuleSpecifier": {
@@ -457,6 +501,11 @@
"relative",
"non-relative"
],
+ "markdownEnumDescriptions": [
+ "%typescript.preferences.importModuleSpecifier.auto%",
+ "%typescript.preferences.importModuleSpecifier.relative%",
+ "%typescript.preferences.importModuleSpecifier.nonRelative%"
+ ],
"default": "auto",
"description": "%typescript.preferences.importModuleSpecifier%",
"scope": "resource"
@@ -468,22 +517,15 @@
"relative",
"non-relative"
],
+ "enumDescriptions": [
+ "%typescript.preferences.importModuleSpecifier.auto%",
+ "%typescript.preferences.importModuleSpecifier.relative%",
+ "%typescript.preferences.importModuleSpecifier.nonRelative%"
+ ],
"default": "auto",
"description": "%typescript.preferences.importModuleSpecifier%",
"scope": "resource"
},
- "javascript.showUnused": {
- "type": "boolean",
- "default": true,
- "description": "%typescript.showUnused%",
- "scope": "resource"
- },
- "typescript.showUnused": {
- "type": "boolean",
- "default": true,
- "description": "%typescript.showUnused%",
- "scope": "resource"
- },
"typescript.updateImportsOnFileMove.enabled": {
"type": "string",
"enum": [
@@ -491,6 +533,11 @@
"always",
"never"
],
+ "enumDescriptions": [
+ "%typescript.updateImportsOnFileMove.enabled.prompt%",
+ "%typescript.updateImportsOnFileMove.enabled.always%",
+ "%typescript.updateImportsOnFileMove.enabled.never%"
+ ],
"default": "prompt",
"description": "%typescript.updateImportsOnFileMove.enabled%",
"scope": "resource"
@@ -505,6 +552,28 @@
"default": "prompt",
"description": "%typescript.updateImportsOnFileMove.enabled%",
"scope": "resource"
+ },
+ "typescript.autoClosingTags": {
+ "type": "boolean",
+ "default": true,
+ "description": "%typescript.autoClosingTags%"
+ },
+ "javascript.autoClosingTags": {
+ "type": "boolean",
+ "default": true,
+ "description": "%typescript.autoClosingTags%"
+ },
+ "javascript.suggest.enabled": {
+ "type": "boolean",
+ "default": true,
+ "description": "%typescript.suggest.enabled%",
+ "scope": "resource"
+ },
+ "typescript.suggest.enabled": {
+ "type": "boolean",
+ "default": true,
+ "description": "%typescript.suggest.enabled%",
+ "scope": "resource"
}
}
},
diff --git a/extensions/typescript-language-features/package.nls.json b/extensions/typescript-language-features/package.nls.json
index 89ece21cf38..443ecfa32c9 100644
--- a/extensions/typescript-language-features/package.nls.json
+++ b/extensions/typescript-language-features/package.nls.json
@@ -5,55 +5,72 @@
"configuration.typescript": "TypeScript",
"typescript.useCodeSnippetsOnMethodSuggest.dec": "Complete functions with their parameter signature.",
"typescript.tsdk.desc": "Specifies the folder path containing the tsserver and lib*.d.ts files to use.",
- "typescript.disableAutomaticTypeAcquisition": "Disables automatic type acquisition. Requires TypeScript >= 2.0.6.",
+ "typescript.disableAutomaticTypeAcquisition": "Disables automatic type acquisition.",
"typescript.tsserver.log": "Enables logging of the TS server to a file. This log can be used to diagnose TS Server issues. The log may contain file paths, source code, and other potentially sensitive information from your project.",
- "typescript.tsserver.pluginPaths": "Additional paths to discover Typescript Language Service plugins. Requires TypeScript >= 2.3.0.",
+ "typescript.tsserver.pluginPaths": "Additional paths to discover Typescript Language Service plugins. Requires using TypeScript 2.3.0 or newer in the workspace.",
"typescript.tsserver.pluginPaths.item": "Either an absolute or relative path. Relative path will be resolved against workspace folder(s).",
"typescript.tsserver.trace": "Enables tracing of messages sent to the TS server. This trace can be used to diagnose TS Server issues. The trace may contain file paths, source code, and other potentially sensitive information from your project.",
"typescript.validate.enable": "Enable/disable TypeScript validation.",
"typescript.format.enable": "Enable/disable default TypeScript formatter.",
"javascript.format.enable": "Enable/disable default JavaScript formatter.",
"format.insertSpaceAfterCommaDelimiter": "Defines space handling after a comma delimiter.",
- "format.insertSpaceAfterConstructor": "Defines space handling after the constructor keyword. Requires TypeScript >= 2.3.0.",
- "format.insertSpaceAfterSemicolonInForStatements": " Defines space handling after a semicolon in a for statement.",
+ "format.insertSpaceAfterConstructor": "Defines space handling after the constructor keyword. Requires using TypeScript 2.3.0 or newer in the workspace.",
+ "format.insertSpaceAfterSemicolonInForStatements": "Defines space handling after a semicolon in a for statement.",
"format.insertSpaceBeforeAndAfterBinaryOperators": "Defines space handling after a binary operator.",
"format.insertSpaceAfterKeywordsInControlFlowStatements": "Defines space handling after keywords in a control flow statement.",
"format.insertSpaceAfterFunctionKeywordForAnonymousFunctions": "Defines space handling after function keyword for anonymous functions.",
- "format.insertSpaceBeforeFunctionParenthesis": "Defines space handling before function argument parentheses. Requires TypeScript >= 2.1.5.",
+ "format.insertSpaceBeforeFunctionParenthesis": "Defines space handling before function argument parentheses.",
"format.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": "Defines space handling after opening and before closing non-empty parenthesis.",
"format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets": "Defines space handling after opening and before closing non-empty brackets.",
- "format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": "Defines space handling after opening and before closing non-empty braces. Requires TypeScript >= 2.3.0.",
- "format.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces": "Defines space handling after opening and before closing template string braces. Requires TypeScript >= 2.0.6.",
- "format.insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces": "Defines space handling after opening and before closing JSX expression braces. Requires TypeScript >= 2.0.6.",
- "format.insertSpaceAfterTypeAssertion": "Defines space handling after type assertions in TypeScript. Requires TypeScript >= 2.4.",
+ "format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": "Defines space handling after opening and before closing non-empty braces. Requires using TypeScript 2.3.0 or newer in the workspace.",
+ "format.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces": "Defines space handling after opening and before closing template string braces.",
+ "format.insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces": "Defines space handling after opening and before closing JSX expression braces.",
+ "format.insertSpaceAfterTypeAssertion": "Defines space handling after type assertions in TypeScript. Requires using TypeScript 2.4 or newer in the workspace.",
"format.placeOpenBraceOnNewLineForFunctions": "Defines whether an open brace is put onto a new line for functions or not.",
"format.placeOpenBraceOnNewLineForControlBlocks": "Defines whether an open brace is put onto a new line for control blocks or not.",
"javascript.validate.enable": "Enable/disable JavaScript validation.",
"goToProjectConfig.title": "Go to Project Configuration",
"javascript.referencesCodeLens.enabled": "Enable/disable references CodeLens in JavaScript files.",
- "typescript.referencesCodeLens.enabled": "Enable/disable references CodeLens in TypeScript files. Requires TypeScript >= 2.0.6.",
- "typescript.implementationsCodeLens.enabled": "Enable/disable implementations CodeLens. Requires TypeScript >= 2.2.0.",
- "typescript.openTsServerLog.title": "Open TS Server log",
- "typescript.restartTsServer": "Restart TS server",
- "typescript.selectTypeScriptVersion.title": "Select TypeScript Version",
- "typescript.reportStyleChecksAsWarnings": "Report style checks as warnings",
- "jsDocCompletion.enabled": "Enable/disable auto JSDoc comments",
- "javascript.implicitProjectConfig.checkJs": "Enable/disable semantic checking of JavaScript files. Existing jsconfig.json or tsconfig.json files override this setting. Requires TypeScript >= 2.3.1.",
- "typescript.npm": "Specifies the path to the NPM executable used for Automatic Type Acquisition. Requires TypeScript >= 2.3.4.",
+ "typescript.referencesCodeLens.enabled": "Enable/disable references CodeLens in TypeScript files.",
+ "typescript.implementationsCodeLens.enabled": "Enable/disable implementations CodeLens. This CodeLens shows the implementers of an interface.",
+ "typescript.openTsServerLog.title": "Open TS Server log.",
+ "typescript.restartTsServer": "Restart TS server.",
+ "typescript.selectTypeScriptVersion.title": "Select TypeScript Version.",
+ "typescript.reportStyleChecksAsWarnings": "Report style checks as warnings.",
+ "jsDocCompletion.enabled": "Enable/disable auto JSDoc comments.",
+ "javascript.implicitProjectConfig.checkJs": "Enable/disable semantic checking of JavaScript files. Existing jsconfig.json or tsconfig.json files override this setting. Requires using TypeScript 2.3.1 or newer in the workspace.",
+ "typescript.npm": "Specifies the path to the NPM executable used for Automatic Type Acquisition. Requires using TypeScript 2.3.4 or newer in the workspace.",
"typescript.check.npmIsInstalled": "Check if NPM is installed for Automatic Type Acquisition.",
"javascript.nameSuggestions": "Enable/disable including unique names from the file in JavaScript suggestion lists.",
- "typescript.tsc.autoDetect": "Controls auto detection of tsc tasks. 'off' disables this feature. 'build' only creates single run compile tasks. 'watch' only creates compile and watch tasks. 'on' creates both build and watch tasks. Default is 'on'.",
+ "javascript.nameSuggestions.deprecationMessage": "Please use the new `javascript.suggest.names` setting.",
+ "configuration.suggest.names": "Enable/disable including unique names from the file in JavaScript suggestions.",
+ "typescript.tsc.autoDetect": "Controls auto detection of tsc tasks.",
+ "typescript.tsc.autoDetect.off": "Disable this feature.",
+ "typescript.tsc.autoDetect.on": "Create both build and watch tasks.",
+ "typescript.tsc.autoDetect.build": "Only create single run compile tasks.",
+ "typescript.tsc.autoDetect.watch": "Only create compile and watch tasks.",
"typescript.problemMatchers.tsc.label": "TypeScript problems",
"typescript.problemMatchers.tscWatch.label": "TypeScript problems (watch mode)",
"typescript.quickSuggestionsForPaths": "Enable/disable quick suggestions when typing out an import path.",
- "typescript.locale": "Sets the locale used to report JavaScript and TypeScript errors. Requires TypeScript >= 2.6.0. Default of 'null' uses VS Code's locale.",
- "javascript.implicitProjectConfig.experimentalDecorators": "Enable/disable 'experimentalDecorators' for JavaScript files that are not part of a project. Existing jsconfig.json or tsconfig.json files override this setting. Requires TypeScript >= 2.3.1.",
- "typescript.autoImportSuggestions.enabled": "Enable/disable auto import suggestions. Requires TypeScript >= 2.6.1",
+ "typescript.quickSuggestionsForPaths.deprecationMessage": "Please use the new `javascript.suggest.paths` and `typescript.suggest.paths` settings to enable/disable path suggestions.",
+ "configuration.suggest.paths": "Enable/disable suggestions for paths in import statements and require calls.",
+ "typescript.locale": "Sets the locale used to report JavaScript and TypeScript errors. Requires using TypeScript 2.6.0 or newer in the workspace. Default of `null` uses VS Code's locale.",
+ "javascript.implicitProjectConfig.experimentalDecorators": "Enable/disable `experimentalDecorators` for JavaScript files that are not part of a project. Existing jsconfig.json or tsconfig.json files override this setting. Requires using TypeScript 2.3.1 or newer in the workspace.",
+ "configuration.suggest.autoImports": "Enable/disable auto import suggestions. Requires using TypeScript 2.6.1 or newer in the workspace.",
+ "typescript.autoImportSuggestions.enabled": "Enable/disable auto import suggestions. Requires using TypeScript 2.6.1 or newer in the workspace.",
+ "typescript.autoImportSuggestions.enabled.deprecationMessage": "Please use the new 'typescript.suggest.autoImports' and 'javascript.suggest.autoImports' settings.",
"taskDefinition.tsconfig.description": "The tsconfig file that defines the TS build.",
- "javascript.suggestionActions.enabled": "Enable/disable suggestion diagnostics for JavaScript files in the editor. Requires TypeScript >= 2.8",
- "typescript.suggestionActions.enabled": "Enable/disable suggestion diagnostics for TypeScript files in the editor. Requires TypeScript >= 2.8",
- "typescript.preferences.quoteStyle": "Preferred quote style to use for quick fixes: 'single' quotes, 'double' quotes, or 'auto' infer quote type from existing imports. Requires TypeScript >= 2.9",
- "typescript.preferences.importModuleSpecifier": "Preferred path style for auto imports:\n- \"relative\" to the file location.\n- \"non-relative\" based on the 'baseUrl' configured in your 'jsconfig.json' / 'tsconfig.json'.\n- \"auto\" infer the shortest path type.\nRequires TypeScript >= 2.9",
- "typescript.showUnused": "Enable/disable highlighting of unused variables in code. Requires TypeScript >= 2.9",
- "typescript.updateImportsOnFileMove.enabled": "Enable/disable automatic updating of import paths when you rename or move a file in VS Code. Possible values are: 'prompt' on each rename, 'always' update paths automatically, and 'never' rename paths and don't prompt me. Requires TypeScript >= 2.9"
-}
\ No newline at end of file
+ "javascript.suggestionActions.enabled": "Enable/disable suggestion diagnostics for JavaScript files in the editor. Requires using TypeScript 2.8 or newer in the workspace.",
+ "typescript.suggestionActions.enabled": "Enable/disable suggestion diagnostics for TypeScript files in the editor. Requires using TypeScript 2.8 or newer in the workspace.",
+ "typescript.preferences.quoteStyle": "Preferred quote style to use for quick fixes: `single` quotes, `double` quotes, or `auto` infer quote type from existing imports. Requires using TypeScript 2.9 or newer in the workspace.",
+ "typescript.preferences.importModuleSpecifier": "Preferred path style for auto imports.",
+ "typescript.preferences.importModuleSpecifier.auto": "Infer the shortest path type.",
+ "typescript.preferences.importModuleSpecifier.relative": "Relative to the file location.",
+ "typescript.preferences.importModuleSpecifier.nonRelative": "Based on the `baseUrl` configured in your `jsconfig.json` / `tsconfig.json`.",
+ "typescript.updateImportsOnFileMove.enabled": "Enable/disable automatic updating of import paths when you rename or move a file in VS Code. Requires using TypeScript 2.9 or newer in the workspace.",
+ "typescript.updateImportsOnFileMove.enabled.prompt": "Prompt on each rename.",
+ "typescript.updateImportsOnFileMove.enabled.always": "Always update paths automatically.",
+ "typescript.updateImportsOnFileMove.enabled.never": "Never rename paths and don't prompt.",
+ "typescript.autoClosingTags": "Enable/disable automatic closing of JSX tags. Requires using TypeScript 3.0 or newer in the workspace.",
+ "typescript.suggest.enabled": "Enabled/disable autocomplete suggestions."
+}
diff --git a/extensions/typescript-language-features/src/commands.ts b/extensions/typescript-language-features/src/commands.ts
index 0f7c3b4a99f..2c40c512e18 100644
--- a/extensions/typescript-language-features/src/commands.ts
+++ b/extensions/typescript-language-features/src/commands.ts
@@ -4,13 +4,14 @@
*--------------------------------------------------------------------------------------------*/
import * as vscode from 'vscode';
-
+import * as nls from 'vscode-nls';
import TypeScriptServiceClientHost from './typeScriptServiceClientHost';
import { Command } from './utils/commandManager';
import { Lazy } from './utils/lazy';
-import { openOrCreateConfigFile, isImplicitProjectConfigFile } from './utils/tsconfig';
+import { isImplicitProjectConfigFile, openOrCreateConfigFile } from './utils/tsconfig';
+import { nulToken } from './utils/cancellation';
+
-import * as nls from 'vscode-nls';
const localize = nls.loadMessageBundle();
@@ -121,7 +122,7 @@ async function goToProjectConfig(
const file = client.toPath(resource);
// TSServer errors when 'projectInfo' is invoked on a non js/ts file
- if (!file || !clientHost.handles(resource)) {
+ if (!file || !await clientHost.handles(resource)) {
vscode.window.showWarningMessage(
localize(
'typescript.projectConfigUnsupportedFile',
@@ -131,7 +132,7 @@ async function goToProjectConfig(
let res: protocol.ProjectInfoResponse | undefined = undefined;
try {
- res = await client.execute('projectInfo', { file, needFileNameList: false } as protocol.ProjectInfoRequestArgs);
+ res = await client.execute('projectInfo', { file, needFileNameList: false }, nulToken);
} catch {
// noop
}
diff --git a/extensions/typescript-language-features/src/extension.ts b/extensions/typescript-language-features/src/extension.ts
index 521da08e6dc..74f0ac6f509 100644
--- a/extensions/typescript-language-features/src/extension.ts
+++ b/extensions/typescript-language-features/src/extension.ts
@@ -16,6 +16,7 @@ import LogDirectoryProvider from './utils/logDirectoryProvider';
import ManagedFileContextManager from './utils/managedFileContext';
import { getContributedTypeScriptServerPlugins, TypeScriptServerPlugin } from './utils/plugins';
import * as ProjectStatus from './utils/projectStatus';
+import { flatten } from './utils/arrays';
export function activate(
@@ -32,7 +33,14 @@ export function activate(
context.subscriptions.push(new TypeScriptTaskProviderManager(lazyClientHost.map(x => x.serviceClient)));
context.subscriptions.push(new LanguageConfigurationManager());
- const supportedLanguage = [].concat.apply([], standardLanguageDescriptions.map(x => x.modeIds).concat(plugins.map(x => x.languages)));
+ import('./features/tsconfig').then(module => {
+ context.subscriptions.push(module.register());
+ });
+
+ const supportedLanguage = flatten([
+ ...standardLanguageDescriptions.map(x => x.modeIds),
+ ...plugins.map(x => x.languages)
+ ]);
function didOpenTextDocument(textDocument: vscode.TextDocument): boolean {
if (isSupportedDocument(supportedLanguage, textDocument)) {
openListener.dispose();
diff --git a/extensions/typescript-language-features/src/features/baseCodeLensProvider.ts b/extensions/typescript-language-features/src/features/baseCodeLensProvider.ts
index 8e30d03c0ba..6204d3521ac 100644
--- a/extensions/typescript-language-features/src/features/baseCodeLensProvider.ts
+++ b/extensions/typescript-language-features/src/features/baseCodeLensProvider.ts
@@ -3,18 +3,18 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
-import { CodeLensProvider, CodeLens, CancellationToken, TextDocument, Range, Uri, Position, Event, EventEmitter } from 'vscode';
+import * as vscode from 'vscode';
import * as Proto from '../protocol';
-
import { ITypeScriptServiceClient } from '../typescriptService';
-import * as typeConverters from '../utils/typeConverters';
import { escapeRegExp } from '../utils/regexp';
+import * as typeConverters from '../utils/typeConverters';
-export class ReferencesCodeLens extends CodeLens {
+
+export class ReferencesCodeLens extends vscode.CodeLens {
constructor(
- public document: Uri,
+ public document: vscode.Uri,
public file: string,
- range: Range
+ range: vscode.Range
) {
super(range);
}
@@ -26,7 +26,7 @@ export class CachedNavTreeResponse {
private document: string = '';
public execute(
- document: TextDocument,
+ document: vscode.TextDocument,
f: () => Promise
) {
if (this.matches(document)) {
@@ -36,12 +36,12 @@ export class CachedNavTreeResponse {
return this.update(document, f());
}
- private matches(document: TextDocument): boolean {
+ private matches(document: vscode.TextDocument): boolean {
return this.version === document.version && this.document === document.uri.toString();
}
private update(
- document: TextDocument,
+ document: vscode.TextDocument,
response: Promise
): Promise {
this.response = response;
@@ -51,19 +51,19 @@ export class CachedNavTreeResponse {
}
}
-export abstract class TypeScriptBaseCodeLensProvider implements CodeLensProvider {
- private onDidChangeCodeLensesEmitter = new EventEmitter();
+export abstract class TypeScriptBaseCodeLensProvider implements vscode.CodeLensProvider {
+ private onDidChangeCodeLensesEmitter = new vscode.EventEmitter();
public constructor(
protected client: ITypeScriptServiceClient,
private cachedResponse: CachedNavTreeResponse
) { }
- public get onDidChangeCodeLenses(): Event {
+ public get onDidChangeCodeLenses(): vscode.Event {
return this.onDidChangeCodeLensesEmitter.event;
}
- async provideCodeLenses(document: TextDocument, token: CancellationToken): Promise {
+ async provideCodeLenses(document: vscode.TextDocument, token: vscode.CancellationToken): Promise {
const filepath = this.client.toPath(document.uri);
if (!filepath) {
return [];
@@ -76,7 +76,7 @@ export abstract class TypeScriptBaseCodeLensProvider implements CodeLensProvider
}
const tree = response.body;
- const referenceableSpans: Range[] = [];
+ const referenceableSpans: vscode.Range[] = [];
if (tree && tree.childItems) {
tree.childItems.forEach(item => this.walkNavTree(document, item, null, referenceableSpans));
}
@@ -87,16 +87,16 @@ export abstract class TypeScriptBaseCodeLensProvider implements CodeLensProvider
}
protected abstract extractSymbol(
- document: TextDocument,
+ document: vscode.TextDocument,
item: Proto.NavigationTree,
parent: Proto.NavigationTree | null
- ): Range | null;
+ ): vscode.Range | null;
private walkNavTree(
- document: TextDocument,
+ document: vscode.TextDocument,
item: Proto.NavigationTree,
parent: Proto.NavigationTree | null,
- results: Range[]
+ results: vscode.Range[]
): void {
if (!item) {
return;
@@ -109,16 +109,17 @@ export abstract class TypeScriptBaseCodeLensProvider implements CodeLensProvider
(item.childItems || []).forEach(child => this.walkNavTree(document, child, item, results));
}
-
- /**
- * TODO: TS currently requires the position for 'references 'to be inside of the identifer
- * Massage the range to make sure this is the case
- */
- protected getSymbolRange(document: TextDocument, item: Proto.NavigationTree): Range | null {
+ protected getSymbolRange(document: vscode.TextDocument, item: Proto.NavigationTree): vscode.Range | null {
if (!item) {
return null;
}
+ // TS 3.0+ provides a span for just the symbol
+ if (item.nameSpan) {
+ return typeConverters.Range.fromTextSpan((item as any).nameSpan);
+ }
+
+ // In older versions, we have to calculate this manually. See #23924
const span = item.spans && item.spans[0];
if (!span) {
return null;
@@ -130,8 +131,8 @@ export abstract class TypeScriptBaseCodeLensProvider implements CodeLensProvider
const identifierMatch = new RegExp(`^(.*?(\\b|\\W))${escapeRegExp(item.text || '')}(\\b|\\W)`, 'gm');
const match = identifierMatch.exec(text);
const prefixLength = match ? match.index + match[1].length : 0;
- const startOffset = document.offsetAt(new Position(range.start.line, range.start.character)) + prefixLength;
- return new Range(
+ const startOffset = document.offsetAt(new vscode.Position(range.start.line, range.start.character)) + prefixLength;
+ return new vscode.Range(
document.positionAt(startOffset),
document.positionAt(startOffset + item.text.length));
}
diff --git a/extensions/typescript-language-features/src/features/bufferSyncSupport.ts b/extensions/typescript-language-features/src/features/bufferSyncSupport.ts
index faa6d7c483d..d180d95c460 100644
--- a/extensions/typescript-language-features/src/features/bufferSyncSupport.ts
+++ b/extensions/typescript-language-features/src/features/bufferSyncSupport.ts
@@ -4,25 +4,21 @@
*--------------------------------------------------------------------------------------------*/
import * as fs from 'fs';
-import { CancellationTokenSource, Disposable, TextDocument, TextDocumentChangeEvent, TextDocumentContentChangeEvent, Uri, workspace, EventEmitter } from 'vscode';
+import * as vscode from 'vscode';
import * as Proto from '../protocol';
import { ITypeScriptServiceClient } from '../typescriptService';
-import { Delayer } from '../utils/async';
-import { disposeAll } from '../utils/dispose';
-import * as languageModeIds from '../utils/languageModeIds';
import API from '../utils/api';
-import { memoize } from '../utils/memoize';
-import { getTempFile } from '../utils/temp';
+import { Delayer } from '../utils/async';
+import { Disposable } from '../utils/dispose';
+import * as languageModeIds from '../utils/languageModeIds';
+import { ResourceMap } from '../utils/resourceMap';
+import * as typeConverters from '../utils/typeConverters';
enum BufferKind {
TypeScript = 1,
JavaScript = 2,
}
-interface IDiagnosticRequestor {
- requestDiagnostic(resource: Uri): void;
-}
-
function mode2ScriptKind(mode: string): 'TS' | 'TSX' | 'JS' | 'JSX' | undefined {
switch (mode) {
case languageModeIds.typescript: return 'TS';
@@ -36,9 +32,8 @@ function mode2ScriptKind(mode: string): 'TS' | 'TSX' | 'JS' | 'JSX' | undefined
class SyncedBuffer {
constructor(
- private readonly document: TextDocument,
+ private readonly document: vscode.TextDocument,
public readonly filepath: string,
- private readonly diagnosticRequestor: IDiagnosticRequestor,
private readonly client: ITypeScriptServiceClient
) { }
@@ -68,10 +63,10 @@ class SyncedBuffer {
}
}
- this.client.execute('open', args, false);
+ this.client.executeWithoutWaitingForResponse('open', args);
}
- public get resource(): Uri {
+ public get resource(): vscode.Uri {
return this.document.uri;
}
@@ -96,105 +91,123 @@ class SyncedBuffer {
const args: Proto.FileRequestArgs = {
file: this.filepath
};
- this.client.execute('close', args, false);
+ this.client.executeWithoutWaitingForResponse('close', args);
}
- public onContentChanged(events: TextDocumentContentChangeEvent[]): void {
+ public onContentChanged(events: vscode.TextDocumentContentChangeEvent[]): void {
for (const { range, text } of events) {
const args: Proto.ChangeRequestArgs = {
- file: this.filepath,
- line: range.start.line + 1,
- offset: range.start.character + 1,
- endLine: range.end.line + 1,
- endOffset: range.end.character + 1,
- insertString: text
+ insertString: text,
+ ...typeConverters.Range.toFormattingRequestArgs(this.filepath, range)
};
- this.client.execute('change', args, false);
+ this.client.executeWithoutWaitingForResponse('change', args);
}
- this.diagnosticRequestor.requestDiagnostic(this.document.uri);
}
}
-class SyncedBufferMap {
- private readonly _map = new Map();
-
- constructor(
- private readonly _normalizePath: (resource: Uri) => string | null
- ) { }
-
- public has(resource: Uri): boolean {
- const file = this.toKey(resource);
- return !!file && this._map.has(file);
- }
-
- public get(resource: Uri): SyncedBuffer | undefined {
- const file = this.toKey(resource);
- return file ? this._map.get(file) : undefined;
- }
+class SyncedBufferMap extends ResourceMap {
public getForPath(filePath: string): SyncedBuffer | undefined {
- return this.get(Uri.file(filePath));
- }
-
- public set(resource: Uri, buffer: SyncedBuffer) {
- const file = this.toKey(resource);
- if (file) {
- this._map.set(file, buffer);
- }
- }
-
- public delete(resource: Uri): void {
- const file = this.toKey(resource);
- if (file) {
- this._map.delete(file);
- }
+ return this.get(vscode.Uri.file(filePath));
}
public get allBuffers(): Iterable {
- return this._map.values();
- }
-
- public get allResources(): Iterable {
- return this._map.keys();
- }
-
- private toKey(resource: Uri): string | null {
- return this._normalizePath(resource);
+ return this.values;
}
}
+class PendingDiagnostics extends ResourceMap {
+ public getOrderedFileSet(): ResourceMap {
+ const orderedResources = Array.from(this.entries)
+ .sort((a, b) => a.value - b.value)
+ .map(entry => entry.resource);
-export default class BufferSyncSupport {
+ const map = new ResourceMap();
+ for (const resource of orderedResources) {
+ map.set(resource, void 0);
+ }
+ return map;
+ }
+}
+
+class GetErrRequest {
+
+ public static executeGetErrRequest(
+ client: ITypeScriptServiceClient,
+ files: ResourceMap,
+ onDone: () => void
+ ) {
+ const token = new vscode.CancellationTokenSource();
+ return new GetErrRequest(client, files, token, onDone);
+ }
+
+ private _done: boolean = false;
+
+ private constructor(
+ client: ITypeScriptServiceClient,
+ public readonly files: ResourceMap,
+ private readonly _token: vscode.CancellationTokenSource,
+ onDone: () => void
+ ) {
+ const args: Proto.GeterrRequestArgs = {
+ delay: 0,
+ files: Array.from(files.entries)
+ .map(entry => client.normalizedPath(entry.resource))
+ .filter(x => !!x) as string[]
+ };
+
+ client.executeAsync('geterr', args, _token.token)
+ .then(undefined, () => { })
+ .then(() => {
+ if (this._done) {
+ return;
+ }
+ this._done = true;
+ onDone();
+ });
+ }
+
+ public cancel(): any {
+ if (!this._done) {
+ this._token.cancel();
+ }
+
+ this._token.dispose();
+ }
+}
+
+export default class BufferSyncSupport extends Disposable {
private readonly client: ITypeScriptServiceClient;
private _validateJavaScript: boolean = true;
private _validateTypeScript: boolean = true;
private readonly modeIds: Set;
- private readonly disposables: Disposable[] = [];
private readonly syncedBuffers: SyncedBufferMap;
-
- private readonly pendingDiagnostics = new Map();
+ private readonly pendingDiagnostics: PendingDiagnostics;
private readonly diagnosticDelayer: Delayer;
- private pendingGetErr: { request: Promise, files: string[], token: CancellationTokenSource } | undefined;
+ private pendingGetErr: GetErrRequest | undefined;
private listening: boolean = false;
constructor(
client: ITypeScriptServiceClient,
modeIds: string[]
) {
+ super();
this.client = client;
this.modeIds = new Set(modeIds);
this.diagnosticDelayer = new Delayer(300);
- this.syncedBuffers = new SyncedBufferMap(path => this.normalizePath(path));
+ const pathNormalizer = (path: vscode.Uri) => this.client.normalizedPath(path);
+ this.syncedBuffers = new SyncedBufferMap(pathNormalizer);
+ this.pendingDiagnostics = new PendingDiagnostics(pathNormalizer);
this.updateConfiguration();
- workspace.onDidChangeConfiguration(() => this.updateConfiguration(), null);
+ vscode.workspace.onDidChangeConfiguration(this.updateConfiguration, this, this._disposables);
}
- private readonly _onDelete = new EventEmitter();
+ private readonly _onDelete = this._register(new vscode.EventEmitter());
public readonly onDelete = this._onDelete.event;
public listen(): void {
@@ -202,22 +215,22 @@ export default class BufferSyncSupport {
return;
}
this.listening = true;
- workspace.onDidOpenTextDocument(this.openTextDocument, this, this.disposables);
- workspace.onDidCloseTextDocument(this.onDidCloseTextDocument, this, this.disposables);
- workspace.onDidChangeTextDocument(this.onDidChangeTextDocument, this, this.disposables);
- workspace.textDocuments.forEach(this.openTextDocument, this);
+ vscode.workspace.onDidOpenTextDocument(this.openTextDocument, this, this._disposables);
+ vscode.workspace.onDidCloseTextDocument(this.onDidCloseTextDocument, this, this._disposables);
+ vscode.workspace.onDidChangeTextDocument(this.onDidChangeTextDocument, this, this._disposables);
+ vscode.workspace.textDocuments.forEach(this.openTextDocument, this);
}
- public handles(resource: Uri): boolean {
+ public handles(resource: vscode.Uri): boolean {
return this.syncedBuffers.has(resource);
}
- public toResource(filePath: string): Uri {
+ public toResource(filePath: string): vscode.Uri {
const buffer = this.syncedBuffers.getForPath(filePath);
if (buffer) {
return buffer.resource;
}
- return Uri.file(filePath);
+ return vscode.Uri.file(filePath);
}
public reOpenDocuments(): void {
@@ -226,12 +239,7 @@ export default class BufferSyncSupport {
}
}
- public dispose(): void {
- disposeAll(this.disposables);
- this._onDelete.dispose();
- }
-
- public openTextDocument(document: TextDocument): void {
+ public openTextDocument(document: vscode.TextDocument): void {
if (!this.modeIds.has(document.languageId)) {
return;
}
@@ -245,17 +253,18 @@ export default class BufferSyncSupport {
return;
}
- const syncedBuffer = new SyncedBuffer(document, filepath, this, this.client);
+ const syncedBuffer = new SyncedBuffer(document, filepath, this.client);
this.syncedBuffers.set(resource, syncedBuffer);
syncedBuffer.open();
- this.requestDiagnostic(resource);
+ this.requestDiagnostic(syncedBuffer);
}
- public closeResource(resource: Uri): void {
+ public closeResource(resource: vscode.Uri): void {
const syncedBuffer = this.syncedBuffers.get(resource);
if (!syncedBuffer) {
return;
}
+ this.pendingDiagnostics.delete(resource);
this.syncedBuffers.delete(resource);
syncedBuffer.close();
if (!fs.existsSync(resource.fsPath)) {
@@ -264,121 +273,113 @@ export default class BufferSyncSupport {
}
}
- private onDidCloseTextDocument(document: TextDocument): void {
+ public interuptGetErr(f: () => R): R {
+ if (!this.pendingGetErr) {
+ return f();
+ }
+
+ this.pendingGetErr.cancel();
+ this.pendingGetErr = undefined;
+ const result = f();
+ this.triggerDiagnostics();
+ return result;
+ }
+
+ private onDidCloseTextDocument(document: vscode.TextDocument): void {
this.closeResource(document.uri);
}
- private onDidChangeTextDocument(e: TextDocumentChangeEvent): void {
+ private onDidChangeTextDocument(e: vscode.TextDocumentChangeEvent): void {
const syncedBuffer = this.syncedBuffers.get(e.document.uri);
if (!syncedBuffer) {
return;
}
syncedBuffer.onContentChanged(e.contentChanges);
- if (this.pendingGetErr) {
- this.pendingGetErr.token.cancel();
+ const didTrigger = this.requestDiagnostic(syncedBuffer);
+
+ if (!didTrigger && this.pendingGetErr) {
+ // In this case we always want to re-trigger all diagnostics
+ this.pendingGetErr.cancel();
this.pendingGetErr = undefined;
+ this.triggerDiagnostics();
}
}
public requestAllDiagnostics() {
for (const buffer of this.syncedBuffers.allBuffers) {
if (this.shouldValidate(buffer)) {
- this.pendingDiagnostics.set(buffer.filepath, Date.now());
+ this.pendingDiagnostics.set(buffer.resource, Date.now());
}
}
- this.diagnosticDelayer.trigger(() => {
- this.sendPendingDiagnostics();
- }, 200);
+ this.triggerDiagnostics();
}
- public getErr(resources: Uri[]): any {
+ public getErr(resources: vscode.Uri[]): any {
const handledResources = resources.filter(resource => this.handles(resource));
if (!handledResources.length) {
return;
}
for (const resource of handledResources) {
- const file = this.client.normalizedPath(resource);
- if (file) {
- this.pendingDiagnostics.set(file, Date.now());
- }
+ this.pendingDiagnostics.set(resource, Date.now());
}
- this.diagnosticDelayer.trigger(() => {
- this.sendPendingDiagnostics();
- }, 200);
+ this.triggerDiagnostics();
}
- public requestDiagnostic(resource: Uri): void {
- const file = this.client.normalizedPath(resource);
- if (!file) {
- return;
- }
-
- this.pendingDiagnostics.set(file, Date.now());
- const buffer = this.syncedBuffers.get(resource);
- if (!buffer || !this.shouldValidate(buffer)) {
- return;
- }
-
- let delay = 300;
- const lineCount = buffer.lineCount;
- delay = Math.min(Math.max(Math.ceil(lineCount / 20), 300), 800);
+ private triggerDiagnostics(delay: number = 200) {
this.diagnosticDelayer.trigger(() => {
this.sendPendingDiagnostics();
}, delay);
}
- public hasPendingDiagnostics(resource: Uri): boolean {
- const file = this.client.normalizedPath(resource);
- return !file || this.pendingDiagnostics.has(file);
+ private requestDiagnostic(buffer: SyncedBuffer): boolean {
+ if (!this.shouldValidate(buffer)) {
+ return false;
+ }
+
+ this.pendingDiagnostics.set(buffer.resource, Date.now());
+
+ const delay = Math.min(Math.max(Math.ceil(buffer.lineCount / 20), 300), 800);
+ this.triggerDiagnostics(delay);
+ return true;
+ }
+
+ public hasPendingDiagnostics(resource: vscode.Uri): boolean {
+ return this.pendingDiagnostics.has(resource);
}
private sendPendingDiagnostics(): void {
- const files = new Set(Array.from(this.pendingDiagnostics.entries())
- .sort((a, b) => a[1] - b[1])
- .map(entry => entry[0]));
+ const orderedFileSet = this.pendingDiagnostics.getOrderedFileSet();
// Add all open TS buffers to the geterr request. They might be visible
- for (const file of this.syncedBuffers.allResources) {
- if (!this.pendingDiagnostics.get(file)) {
- files.add(file);
+ for (const buffer of this.syncedBuffers.values) {
+ orderedFileSet.set(buffer.resource, void 0);
+ }
+
+ if (orderedFileSet.size) {
+ if (this.pendingGetErr) {
+ this.pendingGetErr.cancel();
+
+ for (const file of this.pendingGetErr.files.entries) {
+ orderedFileSet.set(file.resource, void 0);
+ }
}
+
+ const getErr = this.pendingGetErr = GetErrRequest.executeGetErrRequest(this.client, orderedFileSet, () => {
+ if (this.pendingGetErr === getErr) {
+ this.pendingGetErr = undefined;
+ }
+ });
}
- if (this.pendingGetErr) {
- for (const file of this.pendingGetErr.files) {
- files.add(file);
- }
- }
-
- if (files.size) {
- const fileList = Array.from(files);
- const args: Proto.GeterrRequestArgs = {
- delay: 0,
- files: fileList
- };
- const token = new CancellationTokenSource();
-
- const getErr = this.pendingGetErr = {
- request: this.client.executeAsync('geterr', args, token.token)
- .then(undefined, () => { })
- .then(() => {
- if (this.pendingGetErr === getErr) {
- this.pendingGetErr = undefined;
- }
- }),
- files: fileList,
- token
- };
- }
this.pendingDiagnostics.clear();
}
private updateConfiguration() {
- const jsConfig = workspace.getConfiguration('javascript', null);
- const tsConfig = workspace.getConfiguration('typescript', null);
+ const jsConfig = vscode.workspace.getConfiguration('javascript', null);
+ const tsConfig = vscode.workspace.getConfiguration('typescript', null);
this._validateJavaScript = jsConfig.get('validate.enable', true);
this._validateTypeScript = tsConfig.get('validate.enable', true);
@@ -394,40 +395,4 @@ export default class BufferSyncSupport {
return this._validateTypeScript;
}
}
-
- private normalizePath(path: Uri): string | null {
- const key = this.client.normalizedPath(path);
- if (!key) {
- return key;
- }
-
- return this.isCaseInsensitivePath(key) ? key.toLowerCase() : key;
- }
-
- private isCaseInsensitivePath(path: string) {
- if (isWindowsPath(path)) {
- return true;
- }
-
- return path[0] === '/' && this.onIsCaseInsenitiveFileSystem;
- }
-
- @memoize
- private get onIsCaseInsenitiveFileSystem() {
- if (process.platform === 'win32') {
- return true;
- }
-
- if (process.platform !== 'darwin') {
- return false;
- }
-
- const temp = getTempFile('typescript-case-check');
- fs.writeFileSync(temp, '');
- return fs.existsSync(temp.toUpperCase());
- }
-}
-
-function isWindowsPath(path: string): boolean {
- return /^[a-zA-Z]:\\/.test(path);
}
diff --git a/extensions/typescript-language-features/src/features/completions.ts b/extensions/typescript-language-features/src/features/completions.ts
index da141a3f244..6eb216c3689 100644
--- a/extensions/typescript-language-features/src/features/completions.ts
+++ b/extensions/typescript-language-features/src/features/completions.ts
@@ -4,23 +4,30 @@
*--------------------------------------------------------------------------------------------*/
import * as vscode from 'vscode';
-
-import { ITypeScriptServiceClient } from '../typescriptService';
-import TypingsStatus from '../utils/typingsStatus';
-
+import * as nls from 'vscode-nls';
import * as Proto from '../protocol';
import * as PConst from '../protocol.const';
+import { ITypeScriptServiceClient } from '../typescriptService';
+import API from '../utils/api';
+import { nulToken } from '../utils/cancellation';
+import { applyCodeAction } from '../utils/codeAction';
+import { Command, CommandManager } from '../utils/commandManager';
+import { ConfigurationDependentRegistration } from '../utils/dependentRegistration';
+import { memoize } from '../utils/memoize';
import * as Previewer from '../utils/previewer';
import * as typeConverters from '../utils/typeConverters';
-
-import * as nls from 'vscode-nls';
-import { applyCodeAction } from '../utils/codeAction';
-import { CommandManager, Command } from '../utils/commandManager';
+import TypingsStatus from '../utils/typingsStatus';
import FileConfigurationManager from './fileConfigurationManager';
-import API from '../utils/api';
const localize = nls.loadMessageBundle();
+
+interface CommitCharactersSettings {
+ readonly isNewIdentifierLocation: boolean;
+ readonly isInValidCommitCharacterContext: boolean;
+ readonly enableCallCompletions: boolean;
+}
+
class MyCompletionItem extends vscode.CompletionItem {
public readonly useCodeSnippet: boolean;
@@ -29,15 +36,16 @@ class MyCompletionItem extends vscode.CompletionItem {
public readonly document: vscode.TextDocument,
line: string,
public readonly tsEntry: Proto.CompletionEntry,
- enableDotCompletions: boolean,
- useCodeSnippetsOnMethodSuggest: boolean
+ useCodeSnippetsOnMethodSuggest: boolean,
+ public readonly commitCharactersSettings: CommitCharactersSettings
) {
- super(tsEntry.name);
+ super(tsEntry.name, MyCompletionItem.convertKind(tsEntry.kind));
if (tsEntry.isRecommended) {
// Make sure isRecommended property always comes first
// https://github.com/Microsoft/vscode/issues/40325
- this.sortText = '\0' + tsEntry.sortText;
+ this.sortText = tsEntry.sortText;
+ this.preselect = true;
} else if (tsEntry.source) {
// De-prioritze auto-imports
// https://github.com/Microsoft/vscode/issues/40311
@@ -46,11 +54,8 @@ class MyCompletionItem extends vscode.CompletionItem {
this.sortText = tsEntry.sortText;
}
- this.kind = MyCompletionItem.convertKind(tsEntry.kind);
this.position = position;
- this.commitCharacters = MyCompletionItem.getCommitCharacters(enableDotCompletions, !useCodeSnippetsOnMethodSuggest, tsEntry.kind);
this.useCodeSnippet = useCodeSnippetsOnMethodSuggest && (this.kind === vscode.CompletionItemKind.Function || this.kind === vscode.CompletionItemKind.Method);
-
if (tsEntry.replacementSpan) {
this.range = typeConverters.Range.fromTextSpan(tsEntry.replacementSpan);
}
@@ -81,19 +86,22 @@ class MyCompletionItem extends vscode.CompletionItem {
}
this.label += '?';
}
+ this.resolveRange(line);
}
- public resolve(): void {
- if (!this.range) {
- // Try getting longer, prefix based range for completions that span words
- const wordRange = this.document.getWordRangeAtPosition(this.position);
- const text = this.document.getText(new vscode.Range(this.position.line, Math.max(0, this.position.character - this.label.length), this.position.line, this.position.character)).toLowerCase();
- const entryName = this.label.toLowerCase();
- for (let i = entryName.length; i >= 0; --i) {
- if (text.endsWith(entryName.substr(0, i)) && (!wordRange || wordRange.start.character > this.position.character - i)) {
- this.range = new vscode.Range(this.position.line, Math.max(0, this.position.character - i), this.position.line, this.position.character);
- break;
- }
+ private resolveRange(line: string): void {
+ if (this.range) {
+ return;
+ }
+
+ // Try getting longer, prefix based range for completions that span words
+ const wordRange = this.document.getWordRangeAtPosition(this.position);
+ const text = line.slice(Math.max(0, this.position.character - this.label.length), this.position.character).toLowerCase();
+ const entryName = this.label.toLowerCase();
+ for (let i = entryName.length; i >= 0; --i) {
+ if (text.endsWith(entryName.substr(0, i)) && (!wordRange || wordRange.start.character > this.position.character - i)) {
+ this.range = new vscode.Range(this.position.line, Math.max(0, this.position.character - i), this.position.line, this.position.character);
+ break;
}
}
}
@@ -132,7 +140,6 @@ class MyCompletionItem extends vscode.CompletionItem {
case PConst.Kind.interface:
return vscode.CompletionItemKind.Interface;
case PConst.Kind.warning:
- case PConst.Kind.file:
case PConst.Kind.script:
return vscode.CompletionItemKind.File;
case PConst.Kind.directory:
@@ -143,12 +150,14 @@ class MyCompletionItem extends vscode.CompletionItem {
return vscode.CompletionItemKind.Property;
}
- private static getCommitCharacters(
- enableDotCompletions: boolean,
- enableCallCompletions: boolean,
- kind: string
- ): string[] | undefined {
- switch (kind) {
+ @memoize
+ public get commitCharacters(): string[] | undefined {
+ if (this.commitCharactersSettings.isNewIdentifierLocation || !this.commitCharactersSettings.isInValidCommitCharacterContext) {
+ return undefined;
+ }
+
+ const commitCharacters: string[] = [];
+ switch (this.tsEntry.kind) {
case PConst.Kind.memberGetAccessor:
case PConst.Kind.memberSetAccessor:
case PConst.Kind.constructSignature:
@@ -156,7 +165,9 @@ class MyCompletionItem extends vscode.CompletionItem {
case PConst.Kind.indexSignature:
case PConst.Kind.enum:
case PConst.Kind.interface:
- return enableDotCompletions ? ['.'] : undefined;
+ commitCharacters.push('.', ';');
+
+ break;
case PConst.Kind.module:
case PConst.Kind.alias:
@@ -168,10 +179,14 @@ class MyCompletionItem extends vscode.CompletionItem {
case PConst.Kind.class:
case PConst.Kind.function:
case PConst.Kind.memberFunction:
- return enableDotCompletions ? (enableCallCompletions ? ['.', '('] : ['.']) : undefined;
+ case PConst.Kind.keyword:
+ commitCharacters.push('.', ',', ';');
+ if (this.commitCharactersSettings.enableCallCompletions) {
+ commitCharacters.push('(');
+ }
+ break;
}
-
- return undefined;
+ return commitCharacters.length === 0 ? undefined : commitCharacters;
}
}
@@ -189,7 +204,7 @@ class ApplyCompletionCodeActionCommand implements Command {
}
if (codeActions.length === 1) {
- return applyCodeAction(this.client, codeActions[0]);
+ return applyCodeAction(this.client, codeActions[0], nulToken);
}
interface MyQuickPickItem extends vscode.QuickPickItem {
@@ -214,33 +229,39 @@ class ApplyCompletionCodeActionCommand implements Command {
if (!action) {
return false;
}
- return applyCodeAction(this.client, action);
+ return applyCodeAction(this.client, action, nulToken);
}
}
interface CompletionConfiguration {
readonly useCodeSnippetsOnMethodSuggest: boolean;
readonly nameSuggestions: boolean;
- readonly quickSuggestionsForPaths: boolean;
+ readonly pathSuggestions: boolean;
readonly autoImportSuggestions: boolean;
}
namespace CompletionConfiguration {
export const useCodeSnippetsOnMethodSuggest = 'useCodeSnippetsOnMethodSuggest';
- export const nameSuggestions = 'nameSuggestions';
- export const quickSuggestionsForPaths = 'quickSuggestionsForPaths';
- export const autoImportSuggestions = 'autoImportSuggestions.enabled';
+ export const nameSuggestions = 'suggest.names';
+ export const nameSuggestions_deprecated = 'nameSuggestions';
+ export const pathSuggestions = 'suggest.paths';
+ export const autoImportSuggestions = 'suggest.autoImports';
+ export const autoImportSuggestions_deprecated = 'autoImportSuggestions.enabled';
export function getConfigurationForResource(
+ modeId: string,
resource: vscode.Uri
): CompletionConfiguration {
- // TS settings are shared by both JS and TS.
+ const config = vscode.workspace.getConfiguration(modeId, resource);
+
+ // Deprecated TS settings that were shared by both JS and TS.
const typeScriptConfig = vscode.workspace.getConfiguration('typescript', resource);
+
return {
useCodeSnippetsOnMethodSuggest: typeScriptConfig.get(CompletionConfiguration.useCodeSnippetsOnMethodSuggest, false),
- quickSuggestionsForPaths: typeScriptConfig.get(CompletionConfiguration.quickSuggestionsForPaths, true),
- autoImportSuggestions: typeScriptConfig.get(CompletionConfiguration.autoImportSuggestions, true),
- nameSuggestions: vscode.workspace.getConfiguration('javascript', resource).get(CompletionConfiguration.nameSuggestions, true)
+ pathSuggestions: config.get(CompletionConfiguration.pathSuggestions, true),
+ autoImportSuggestions: config.get(CompletionConfiguration.autoImportSuggestions, typeScriptConfig.get(CompletionConfiguration.autoImportSuggestions_deprecated, true)),
+ nameSuggestions: config.get(CompletionConfiguration.nameSuggestions, vscode.workspace.getConfiguration('javascript', resource).get(CompletionConfiguration.nameSuggestions_deprecated, true))
};
}
}
@@ -251,6 +272,7 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider
constructor(
private readonly client: ITypeScriptServiceClient,
+ private readonly modeId: string,
private readonly typingsStatus: TypingsStatus,
private readonly fileConfigurationManager: FileConfigurationManager,
commandManager: CommandManager
@@ -263,7 +285,7 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider
position: vscode.Position,
token: vscode.CancellationToken,
context: vscode.CompletionContext
- ): Promise {
+ ): Promise {
if (this.typingsStatus.isAcquiringTypings) {
return Promise.reject({
label: localize(
@@ -277,17 +299,17 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider
const file = this.client.toPath(document.uri);
if (!file) {
- return [];
+ return null;
}
const line = document.lineAt(position.line);
- const completionConfiguration = CompletionConfiguration.getConfigurationForResource(document.uri);
+ const completionConfiguration = CompletionConfiguration.getConfigurationForResource(this.modeId, document.uri);
- if (!this.shouldTrigger(context, completionConfiguration, line, position)) {
- return [];
+ if (!this.shouldTrigger(context, line, position)) {
+ return null;
}
- await this.fileConfigurationManager.ensureConfigurationForDocument(document, token);
+ await this.client.interuptGetErr(() => this.fileConfigurationManager.ensureConfigurationForDocument(document, token));
const args: Proto.CompletionsRequestArgs = {
...typeConverters.Position.toFileLocationRequestArgs(file, position),
@@ -296,32 +318,35 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider
triggerCharacter: context.triggerCharacter as Proto.CompletionsTriggerCharacter
};
- let msg: Proto.CompletionEntry[] | undefined = undefined;
+ let isNewIdentifierLocation = true;
+ let msg: ReadonlyArray | undefined = undefined;
try {
- const response = await this.client.execute('completions', args, token);
- msg = response.body;
- if (!msg) {
- return [];
+ if (this.client.apiVersion.gte(API.v300)) {
+ const { body } = await this.client.interuptGetErr(() => this.client.execute('completionInfo', args, token));
+ if (!body) {
+ return null;
+ }
+ isNewIdentifierLocation = body.isNewIdentifierLocation;
+ msg = body.entries;
+ } else {
+ const { body } = await this.client.interuptGetErr(() => this.client.execute('completions', args, token));
+ if (!body) {
+ return null;
+ }
+ msg = body;
}
} catch {
- return [];
+ return null;
}
- const enableDotCompletions = this.shouldEnableDotCompletions(document, position);
-
- const completionItems: vscode.CompletionItem[] = [];
- for (const element of msg) {
- if (element.kind === PConst.Kind.warning && !completionConfiguration.nameSuggestions) {
- continue;
- }
- if (!completionConfiguration.autoImportSuggestions && element.hasAction) {
- continue;
- }
- const item = new MyCompletionItem(position, document, line.text, element, enableDotCompletions, completionConfiguration.useCodeSnippetsOnMethodSuggest);
- completionItems.push(item);
- }
-
- return completionItems;
+ const isInValidCommitCharacterContext = this.isInValidCommitCharacterContext(document, position);
+ return msg
+ .filter(entry => !shouldExcludeCompletionEntry(entry, completionConfiguration))
+ .map(entry => new MyCompletionItem(position, document, line.text, entry, completionConfiguration.useCodeSnippetsOnMethodSuggest, {
+ isNewIdentifierLocation,
+ isInValidCommitCharacterContext,
+ enableCallCompletions: !completionConfiguration.useCodeSnippetsOnMethodSuggest
+ }));
}
public async resolveCompletionItem(
@@ -337,8 +362,6 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider
return undefined;
}
- item.resolve();
-
const args: Proto.CompletionDetailsRequestArgs = {
...typeConverters.Position.toFileLocationRequestArgs(filepath, item.position),
entryNames: [
@@ -346,14 +369,14 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider
]
};
- let response: Proto.CompletionDetailsResponse;
+ let details: Proto.CompletionEntryDetails[] | undefined;
try {
- response = await this.client.execute('completionEntryDetails', args, token);
+ const { body } = await this.client.execute('completionEntryDetails', args, token);
+ details = body;
} catch {
return item;
}
- const details = response.body;
if (!details || !details.length || !details[0]) {
return item;
}
@@ -366,7 +389,7 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider
item.additionalTextEdits = additionalTextEdits;
if (detail && item.useCodeSnippet) {
- const shouldCompleteFunction = await this.isValidFunctionCompletionContext(filepath, item.position);
+ const shouldCompleteFunction = await this.isValidFunctionCompletionContext(filepath, item.position, token);
if (shouldCompleteFunction) {
item.insertText = this.snippetForFunctionCall(item, detail);
}
@@ -425,7 +448,7 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider
};
}
- private shouldEnableDotCompletions(
+ private isInValidCommitCharacterContext(
document: vscode.TextDocument,
position: vscode.Position
): boolean {
@@ -436,7 +459,7 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider
const preText = document.getText(new vscode.Range(
position.line, 0,
position.line, position.character - 1));
- return preText.match(/[a-z_$\)\]\}]\s*$/ig) !== null;
+ return preText.match(/(^|[a-z_$\(\)\[\]\{\}])\s*$/ig) !== null;
}
return true;
@@ -444,46 +467,39 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider
private shouldTrigger(
context: vscode.CompletionContext,
- config: CompletionConfiguration,
line: vscode.TextLine,
position: vscode.Position
): boolean {
- if ((context.triggerCharacter === '"' || context.triggerCharacter === '\'') && !this.client.apiVersion.gte(API.v290)) {
- if (!config.quickSuggestionsForPaths) {
- return false;
+ if (context.triggerCharacter && !this.client.apiVersion.gte(API.v290)) {
+ if ((context.triggerCharacter === '"' || context.triggerCharacter === '\'')) {
+ // make sure we are in something that looks like the start of an import
+ const pre = line.text.slice(0, position.character);
+ if (!pre.match(/\b(from|import)\s*["']$/) && !pre.match(/\b(import|require)\(['"]$/)) {
+ return false;
+ }
}
- // make sure we are in something that looks like the start of an import
- const pre = line.text.slice(0, position.character);
- if (!pre.match(/\b(from|import)\s*["']$/) && !pre.match(/\b(import|require)\(['"]$/)) {
- return false;
- }
- }
-
- if (context.triggerCharacter === '/') {
- if (!config.quickSuggestionsForPaths) {
- return false;
+ if (context.triggerCharacter === '/') {
+ // make sure we are in something that looks like an import path
+ const pre = line.text.slice(0, position.character);
+ if (!pre.match(/\b(from|import)\s*["'][^'"]*$/) && !pre.match(/\b(import|require)\(['"][^'"]*$/)) {
+ return false;
+ }
}
- // make sure we are in something that looks like an import path
- const pre = line.text.slice(0, position.character);
- if (!pre.match(/\b(from|import)\s*["'][^'"]*$/) && !pre.match(/\b(import|require)\(['"][^'"]*$/)) {
+ if (context.triggerCharacter === '@') {
+ // make sure we are in something that looks like the start of a jsdoc comment
+ const pre = line.text.slice(0, position.character);
+ if (!pre.match(/^\s*\*[ ]?@/) && !pre.match(/\/\*\*+[ ]?@/)) {
+ return false;
+ }
+ }
+
+ if (context.triggerCharacter === '<') {
return false;
}
}
- if (context.triggerCharacter === '@' && !this.client.apiVersion.gte(API.v290)) {
- // make sure we are in something that looks like the start of a jsdoc comment
- const pre = line.text.slice(0, position.character);
- if (!pre.match(/^\s*\*[ ]?@/) && !pre.match(/\/\*\*+[ ]?@/)) {
- return false;
- }
- }
-
- if (context.triggerCharacter === '<') {
- return this.client.apiVersion.gte(API.v290);
- }
-
return true;
}
@@ -504,14 +520,14 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider
private async isValidFunctionCompletionContext(
filepath: string,
- position: vscode.Position
+ position: vscode.Position,
+ token: vscode.CancellationToken
): Promise {
// Workaround for https://github.com/Microsoft/TypeScript/issues/12677
// Don't complete function calls inside of destructive assigments or imports
try {
- const infoResponse = await this.client.execute('quickinfo', typeConverters.Position.toFileLocationRequestArgs(filepath, position));
- const info = infoResponse.body;
- switch (info && info.kind) {
+ const { body } = await this.client.execute('quickinfo', typeConverters.Position.toFileLocationRequestArgs(filepath, position), token);
+ switch (body && body.kind) {
case 'var':
case 'let':
case 'const':
@@ -583,15 +599,28 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider
}
}
+function shouldExcludeCompletionEntry(
+ element: Proto.CompletionEntry,
+ completionConfiguration: CompletionConfiguration
+) {
+ return (
+ (!completionConfiguration.nameSuggestions && element.kind === PConst.Kind.warning)
+ || (!completionConfiguration.pathSuggestions &&
+ (element.kind === PConst.Kind.directory || element.kind === PConst.Kind.script || element.kind === PConst.Kind.externalModuleName))
+ || (!completionConfiguration.autoImportSuggestions && element.hasAction)
+ );
+}
export function register(
selector: vscode.DocumentSelector,
+ modeId: string,
client: ITypeScriptServiceClient,
typingsStatus: TypingsStatus,
fileConfigurationManager: FileConfigurationManager,
commandManager: CommandManager,
) {
- return vscode.languages.registerCompletionItemProvider(selector,
- new TypeScriptCompletionItemProvider(client, typingsStatus, fileConfigurationManager, commandManager),
- ...TypeScriptCompletionItemProvider.triggerCharacters);
-}
\ No newline at end of file
+ return new ConfigurationDependentRegistration(modeId, 'suggest.enabled', () =>
+ vscode.languages.registerCompletionItemProvider(selector,
+ new TypeScriptCompletionItemProvider(client, modeId, typingsStatus, fileConfigurationManager, commandManager),
+ ...TypeScriptCompletionItemProvider.triggerCharacters));
+}
diff --git a/extensions/typescript-language-features/src/features/definitionProviderBase.ts b/extensions/typescript-language-features/src/features/definitionProviderBase.ts
index c34d6df3382..186d3e711dd 100644
--- a/extensions/typescript-language-features/src/features/definitionProviderBase.ts
+++ b/extensions/typescript-language-features/src/features/definitionProviderBase.ts
@@ -3,23 +3,23 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
-import { TextDocument, Position, CancellationToken, Location } from 'vscode';
-
+import * as vscode from 'vscode';
import * as Proto from '../protocol';
import { ITypeScriptServiceClient } from '../typescriptService';
import * as typeConverters from '../utils/typeConverters';
+
export default class TypeScriptDefinitionProviderBase {
constructor(
- private readonly client: ITypeScriptServiceClient
+ protected readonly client: ITypeScriptServiceClient
) { }
protected async getSymbolLocations(
definitionType: 'definition' | 'implementation' | 'typeDefinition',
- document: TextDocument,
- position: Position,
- token: CancellationToken | boolean
- ): Promise {
+ document: vscode.TextDocument,
+ position: vscode.Position,
+ token: vscode.CancellationToken
+ ): Promise {
const filepath = this.client.toPath(document.uri);
if (!filepath) {
return undefined;
@@ -32,7 +32,7 @@ export default class TypeScriptDefinitionProviderBase {
return locations.map(location =>
typeConverters.Location.fromTextSpan(this.client.toResource(location.file), location));
} catch {
- return [];
+ return undefined;
}
}
}
\ No newline at end of file
diff --git a/extensions/typescript-language-features/src/features/definitions.ts b/extensions/typescript-language-features/src/features/definitions.ts
index 0f5e565390a..6e260d5d089 100644
--- a/extensions/typescript-language-features/src/features/definitions.ts
+++ b/extensions/typescript-language-features/src/features/definitions.ts
@@ -5,10 +5,50 @@
import * as vscode from 'vscode';
import { ITypeScriptServiceClient } from '../typescriptService';
+import API from '../utils/api';
+import * as typeConverters from '../utils/typeConverters';
import DefinitionProviderBase from './definitionProviderBase';
-class TypeScriptDefinitionProvider extends DefinitionProviderBase implements vscode.DefinitionProvider {
- public provideDefinition(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken | boolean): Promise {
+export default class TypeScriptDefinitionProvider extends DefinitionProviderBase implements vscode.DefinitionProvider {
+ constructor(
+ client: ITypeScriptServiceClient
+ ) {
+ super(client);
+ }
+
+ public async provideDefinition(
+ document: vscode.TextDocument,
+ position: vscode.Position,
+ token: vscode.CancellationToken
+ ): Promise {
+ if (this.client.apiVersion.gte(API.v270)) {
+ const filepath = this.client.toPath(document.uri);
+ if (!filepath) {
+ return undefined;
+ }
+
+ const args = typeConverters.Position.toFileLocationRequestArgs(filepath, position);
+ try {
+ const { body } = await this.client.execute('definitionAndBoundSpan', args, token);
+ if (!body) {
+ return undefined;
+ }
+
+ const span = body.textSpan ? typeConverters.Range.fromTextSpan(body.textSpan) : undefined;
+ return body.definitions
+ .map(location => {
+ const target = typeConverters.Location.fromTextSpan(this.client.toResource(location.file), location);
+ return {
+ originSelectionRange: span,
+ targetRange: target.range,
+ targetUri: target.uri,
+ };
+ });
+ } catch {
+ return [];
+ }
+ }
+
return this.getSymbolLocations('definition', document, position, token);
}
}
diff --git a/extensions/typescript-language-features/src/features/diagnostics.ts b/extensions/typescript-language-features/src/features/diagnostics.ts
index e2884f74d36..a37cd310c42 100644
--- a/extensions/typescript-language-features/src/features/diagnostics.ts
+++ b/extensions/typescript-language-features/src/features/diagnostics.ts
@@ -3,127 +3,203 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
-import * as vscode from 'vscode';
+import * as vscode from 'vscode';
+import { ResourceMap } from '../utils/resourceMap';
+import { DiagnosticLanguage, allDiagnosticLangauges } from '../utils/languageDescription';
-export class DiagnosticSet {
- private _map: ObjectMap = Object.create(null);
-
- public set(
- file: vscode.Uri,
- diagnostics: vscode.Diagnostic[]
- ) {
- this._map[this.key(file)] = diagnostics;
- }
-
- public get(file: vscode.Uri): vscode.Diagnostic[] {
- return this._map[this.key(file)] || [];
- }
-
- public clear(): void {
- this._map = Object.create(null);
- }
-
- private key(file: vscode.Uri): string {
- return file.toString(true);
- }
-}
-
-export enum DiagnosticKind {
+export const enum DiagnosticKind {
Syntax,
Semantic,
Suggestion
}
-const allDiagnosticKinds = [DiagnosticKind.Syntax, DiagnosticKind.Semantic, DiagnosticKind.Suggestion];
+class FileDiagnostics {
+ private readonly _diagnostics = new Map();
+
+ constructor(
+ public readonly file: vscode.Uri,
+ public language: DiagnosticLanguage
+ ) { }
+
+ public updateDiagnostics(
+ language: DiagnosticLanguage,
+ kind: DiagnosticKind,
+ diagnostics: vscode.Diagnostic[]
+ ): boolean {
+ if (language !== this.language) {
+ this._diagnostics.clear();
+ this.language = language;
+ }
+
+ if (diagnostics.length === 0) {
+ const existing = this._diagnostics.get(kind);
+ if (!existing || existing && existing.length === 0) {
+ // No need to update
+ return false;
+ }
+ }
+
+ this._diagnostics.set(kind, diagnostics);
+ return true;
+ }
+
+ public getDiagnostics(settings: DiagnosticSettings): vscode.Diagnostic[] {
+ if (!settings.getValidate(this.language)) {
+ return [];
+ }
+
+ return [
+ ...this.get(DiagnosticKind.Syntax),
+ ...this.get(DiagnosticKind.Semantic),
+ ...this.getSuggestionDiagnostics(settings),
+ ];
+ }
+
+ private getSuggestionDiagnostics(settings: DiagnosticSettings) {
+ const enableSuggestions = settings.getEnableSuggestions(this.language);
+ return this.get(DiagnosticKind.Suggestion).filter(x => {
+ if (!enableSuggestions) {
+ // Still show unused
+ return x.tags && x.tags.indexOf(vscode.DiagnosticTag.Unnecessary) !== -1;
+ }
+ return true;
+ });
+ }
+
+ private get(kind: DiagnosticKind): vscode.Diagnostic[] {
+ return this._diagnostics.get(kind) || [];
+ }
+}
+
+interface LangaugeDiagnosticSettings {
+ readonly validate: boolean;
+ readonly enableSuggestions: boolean;
+}
+
+class DiagnosticSettings {
+ private static readonly defaultSettings: LangaugeDiagnosticSettings = {
+ validate: true,
+ enableSuggestions: true
+ };
+
+ private readonly _languageSettings = new Map();
+
+ constructor() {
+ for (const language of allDiagnosticLangauges) {
+ this._languageSettings.set(language, DiagnosticSettings.defaultSettings);
+ }
+ }
+
+ public getValidate(language: DiagnosticLanguage): boolean {
+ return this.get(language).validate;
+ }
+
+ public setValidate(language: DiagnosticLanguage, value: boolean): boolean {
+ return this.update(language, settings => ({
+ validate: value,
+ enableSuggestions: settings.enableSuggestions
+ }));
+ }
+
+ public getEnableSuggestions(language: DiagnosticLanguage): boolean {
+ return this.get(language).enableSuggestions;
+ }
+
+ public setEnableSuggestions(language: DiagnosticLanguage, value: boolean): boolean {
+ return this.update(language, settings => ({
+ validate: settings.validate,
+ enableSuggestions: value
+ }));
+ }
+
+ private get(language: DiagnosticLanguage): LangaugeDiagnosticSettings {
+ return this._languageSettings.get(language) || DiagnosticSettings.defaultSettings;
+ }
+
+ private update(language: DiagnosticLanguage, f: (x: LangaugeDiagnosticSettings) => LangaugeDiagnosticSettings): boolean {
+ const currentSettings = this.get(language);
+ const newSettings = f(currentSettings);
+ this._languageSettings.set(language, newSettings);
+ return currentSettings.validate === newSettings.validate
+ && currentSettings.enableSuggestions && currentSettings.enableSuggestions;
+ }
+}
export class DiagnosticsManager {
-
- private readonly _diagnostics = new Map();
+ private readonly _diagnostics = new ResourceMap();
+ private readonly _settings = new DiagnosticSettings();
private readonly _currentDiagnostics: vscode.DiagnosticCollection;
- private readonly _pendingUpdates: { [key: string]: any } = Object.create(null);
- private _validate: boolean = true;
- private _enableSuggestions: boolean = true;
+ private _pendingUpdates = new ResourceMap();
- private readonly updateDelay = 50;
+ private readonly _updateDelay = 50;
constructor(
owner: string
) {
- for (const kind of allDiagnosticKinds) {
- this._diagnostics.set(kind, new DiagnosticSet());
- }
-
this._currentDiagnostics = vscode.languages.createDiagnosticCollection(owner);
}
public dispose() {
this._currentDiagnostics.dispose();
- for (const key of Object.keys(this._pendingUpdates)) {
- clearTimeout(this._pendingUpdates[key]);
- delete this._pendingUpdates[key];
+ for (const value of this._pendingUpdates.values) {
+ clearTimeout(value);
}
+ this._pendingUpdates = new ResourceMap();
}
public reInitialize(): void {
this._currentDiagnostics.clear();
+ this._diagnostics.clear();
+ }
- for (const diagnosticSet of this._diagnostics.values()) {
- diagnosticSet.clear();
+ public setValidate(language: DiagnosticLanguage, value: boolean) {
+ const didUpdate = this._settings.setValidate(language, value);
+ if (didUpdate) {
+ this.rebuild();
}
}
- public set validate(value: boolean) {
- if (this._validate === value) {
- return;
- }
-
- this._validate = value;
- if (!value) {
- this._currentDiagnostics.clear();
+ public setEnableSuggestions(language: DiagnosticLanguage, value: boolean) {
+ const didUpdate = this._settings.setEnableSuggestions(language, value);
+ if (didUpdate) {
+ this.rebuild();
}
}
- public set enableSuggestions(value: boolean) {
- if (this._enableSuggestions === value) {
- return;
- }
-
- this._enableSuggestions = value;
- if (!value) {
- this._currentDiagnostics.clear();
- }
- }
-
- public diagnosticsReceived(
+ public updateDiagnostics(
+ file: vscode.Uri,
+ language: DiagnosticLanguage,
kind: DiagnosticKind,
+ diagnostics: vscode.Diagnostic[]
+ ): void {
+
+ let didUpdate = false;
+ const entry = this._diagnostics.get(file);
+ if (entry) {
+ didUpdate = entry.updateDiagnostics(language, kind, diagnostics);
+ } else if (diagnostics.length) {
+ const fileDiagnostics = new FileDiagnostics(file, language);
+ fileDiagnostics.updateDiagnostics(language, kind, diagnostics);
+ this._diagnostics.set(file, fileDiagnostics);
+ didUpdate = true;
+ }
+
+ if (didUpdate) {
+ this.scheduleDiagnosticsUpdate(file);
+ }
+ }
+
+ public configFileDiagnosticsReceived(
file: vscode.Uri,
diagnostics: vscode.Diagnostic[]
): void {
- const collection = this._diagnostics.get(kind);
- if (!collection) {
- return;
- }
-
- if (diagnostics.length === 0) {
- const existing = collection.get(file);
- if (existing.length === 0) {
- // No need to update
- return;
- }
- }
-
- collection.set(file, diagnostics);
-
- this.scheduleDiagnosticsUpdate(file);
- }
-
- public configFileDiagnosticsReceived(file: vscode.Uri, diagnostics: vscode.Diagnostic[]): void {
this._currentDiagnostics.set(file, diagnostics);
}
public delete(resource: vscode.Uri): void {
this._currentDiagnostics.delete(resource);
+ this._diagnostics.delete(resource);
}
public getDiagnostics(file: vscode.Uri): vscode.Diagnostic[] {
@@ -131,37 +207,25 @@ export class DiagnosticsManager {
}
private scheduleDiagnosticsUpdate(file: vscode.Uri) {
- const key = file.fsPath;
- if (!this._pendingUpdates[key]) {
- this._pendingUpdates[key] = setTimeout(() => this.updateCurrentDiagnostics(file), this.updateDelay);
+ if (!this._pendingUpdates.has(file)) {
+ this._pendingUpdates.set(file, setTimeout(() => this.updateCurrentDiagnostics(file), this._updateDelay));
}
}
- private updateCurrentDiagnostics(file: vscode.Uri) {
- if (this._pendingUpdates[file.fsPath]) {
- clearTimeout(this._pendingUpdates[file.fsPath]);
- delete this._pendingUpdates[file.fsPath];
+ private updateCurrentDiagnostics(file: vscode.Uri): void {
+ if (this._pendingUpdates.has(file)) {
+ clearTimeout(this._pendingUpdates.get(file));
+ this._pendingUpdates.delete(file);
}
- if (!this._validate) {
- return;
- }
-
- const allDiagnostics = [
- ...this._diagnostics.get(DiagnosticKind.Syntax)!.get(file),
- ...this._diagnostics.get(DiagnosticKind.Semantic)!.get(file),
- ...this.getSuggestionDiagnostics(file),
- ];
- this._currentDiagnostics.set(file, allDiagnostics);
+ const fileDiagnostics = this._diagnostics.get(file);
+ this._currentDiagnostics.set(file, fileDiagnostics ? fileDiagnostics.getDiagnostics(this._settings) : []);
}
- private getSuggestionDiagnostics(file: vscode.Uri) {
- return this._diagnostics.get(DiagnosticKind.Suggestion)!.get(file).filter(x => {
- if (!this._enableSuggestions) {
- // Still show unused
- return x.customTags && x.customTags.indexOf(vscode.DiagnosticTag.Unnecessary) !== -1;
- }
- return true;
- });
+ private rebuild(): void {
+ this._currentDiagnostics.clear();
+ for (const fileDiagnostic of Array.from(this._diagnostics.values)) {
+ this._currentDiagnostics.set(fileDiagnostic.file, fileDiagnostic.getDiagnostics(this._settings));
+ }
}
}
\ No newline at end of file
diff --git a/extensions/typescript-language-features/src/features/directiveCommentCompletions.ts b/extensions/typescript-language-features/src/features/directiveCommentCompletions.ts
index 41d5bd8e8cd..8ec98eefb8f 100644
--- a/extensions/typescript-language-features/src/features/directiveCommentCompletions.ts
+++ b/extensions/typescript-language-features/src/features/directiveCommentCompletions.ts
@@ -6,14 +6,14 @@
import * as vscode from 'vscode';
import * as nls from 'vscode-nls';
import { ITypeScriptServiceClient } from '../typescriptService';
-import { VersionDependentRegistration } from '../utils/dependentRegistration';
import API from '../utils/api';
+import { VersionDependentRegistration } from '../utils/dependentRegistration';
const localize = nls.loadMessageBundle();
interface Directive {
- value: string;
- description: string;
+ readonly value: string;
+ readonly description: string;
}
const directives: Directive[] = [
@@ -21,17 +21,17 @@ const directives: Directive[] = [
value: '@ts-check',
description: localize(
'ts-check',
- 'Enables semantic checking in a JavaScript file. Must be at the top of a file.')
+ "Enables semantic checking in a JavaScript file. Must be at the top of a file.")
}, {
value: '@ts-nocheck',
description: localize(
'ts-nocheck',
- 'Disables semantic checking in a JavaScript file. Must be at the top of a file.')
+ "Disables semantic checking in a JavaScript file. Must be at the top of a file.")
}, {
value: '@ts-ignore',
description: localize(
'ts-ignore',
- 'Suppresses @ts-check errors on the next line of a file.')
+ "Suppresses @ts-check errors on the next line of a file.")
}
];
@@ -63,13 +63,6 @@ class DirectiveCommentCompletionProvider implements vscode.CompletionItemProvide
}
return [];
}
-
- public resolveCompletionItem(
- item: vscode.CompletionItem,
- _token: vscode.CancellationToken
- ) {
- return item;
- }
}
export function register(
diff --git a/extensions/typescript-language-features/src/features/documentHighlight.ts b/extensions/typescript-language-features/src/features/documentHighlight.ts
index 2e7f619739f..d661e154fdd 100644
--- a/extensions/typescript-language-features/src/features/documentHighlight.ts
+++ b/extensions/typescript-language-features/src/features/documentHighlight.ts
@@ -4,12 +4,12 @@
*--------------------------------------------------------------------------------------------*/
import * as vscode from 'vscode';
-
import * as Proto from '../protocol';
-
import { ITypeScriptServiceClient } from '../typescriptService';
import * as typeConverters from '../utils/typeConverters';
+
+
class TypeScriptDocumentHighlightProvider implements vscode.DocumentHighlightProvider {
public constructor(
private readonly client: ITypeScriptServiceClient
@@ -26,18 +26,20 @@ class TypeScriptDocumentHighlightProvider implements vscode.DocumentHighlightPro
}
const args = typeConverters.Position.toFileLocationRequestArgs(file, position);
+ let items: Proto.OccurrencesResponseItem[];
try {
- const response = await this.client.execute('occurrences', args, token);
- if (response && response.body) {
- return response.body
- .filter(x => !x.isInString)
- .map(documentHighlightFromOccurance);
+ const { body } = await this.client.execute('occurrences', args, token);
+ if (!body) {
+ return [];
}
+ items = body;
} catch {
- // noop
+ return [];
}
- return [];
+ return items
+ .filter(x => !x.isInString)
+ .map(documentHighlightFromOccurance);
}
}
diff --git a/extensions/typescript-language-features/src/features/documentSymbol.ts b/extensions/typescript-language-features/src/features/documentSymbol.ts
index 8df78a13761..8925d2fb3b1 100644
--- a/extensions/typescript-language-features/src/features/documentSymbol.ts
+++ b/extensions/typescript-language-features/src/features/documentSymbol.ts
@@ -4,12 +4,10 @@
*--------------------------------------------------------------------------------------------*/
import * as vscode from 'vscode';
-
import * as Proto from '../protocol';
import * as PConst from '../protocol.const';
import { ITypeScriptServiceClient } from '../typescriptService';
import * as typeConverters from '../utils/typeConverters';
-import API from '../utils/api';
const getSymbolKind = (kind: string): vscode.SymbolKind => {
switch (kind) {
@@ -33,82 +31,63 @@ const getSymbolKind = (kind: string): vscode.SymbolKind => {
class TypeScriptDocumentSymbolProvider implements vscode.DocumentSymbolProvider {
public constructor(
- private readonly client: ITypeScriptServiceClient) { }
+ private readonly client: ITypeScriptServiceClient
+ ) { }
- public async provideDocumentSymbols(resource: vscode.TextDocument, token: vscode.CancellationToken): Promise { // todo@joh `any[]` temporary hack to make typescript happy...
- const filepath = this.client.toPath(resource.uri);
- if (!filepath) {
- return [];
+ public async provideDocumentSymbols(resource: vscode.TextDocument, token: vscode.CancellationToken): Promise {
+ const file = this.client.toPath(resource.uri);
+ if (!file) {
+ return undefined;
}
- const args: Proto.FileRequestArgs = {
- file: filepath
- };
+ let tree: Proto.NavigationTree;
try {
- if (this.client.apiVersion.gte(API.v206)) {
- const response = await this.client.execute('navtree', args, token);
- if (response.body) {
- // The root represents the file. Ignore this when showing in the UI
- const tree = response.body;
- if (tree.childItems) {
- const result = new Array();
- tree.childItems.forEach(item => TypeScriptDocumentSymbolProvider.convertNavTree(resource.uri, result, item));
- return result;
- }
- }
- } else {
- const response = await this.client.execute('navbar', args, token);
- if (response.body) {
- const result = new Array();
- const foldingMap: ObjectMap = Object.create(null);
- response.body.forEach(item => TypeScriptDocumentSymbolProvider.convertNavBar(resource.uri, 0, foldingMap, result as vscode.SymbolInformation[], item));
- return result;
- }
+ const args: Proto.FileRequestArgs = { file };
+ const { body } = await this.client.execute('navtree', args, token);
+ if (!body) {
+ return undefined;
}
- return [];
- } catch (e) {
- return [];
+ tree = body;
+ } catch {
+ return undefined;
}
+
+ if (tree && tree.childItems) {
+ // The root represents the file. Ignore this when showing in the UI
+ const result: vscode.DocumentSymbol[] = [];
+ tree.childItems.forEach(item => TypeScriptDocumentSymbolProvider.convertNavTree(resource.uri, result, item));
+ return result;
+ }
+
+ return undefined;
}
- private static convertNavBar(resource: vscode.Uri, indent: number, foldingMap: ObjectMap, bucket: vscode.SymbolInformation[], item: Proto.NavigationBarItem, containerLabel?: string): void {
- const realIndent = indent + item.indent;
- const key = `${realIndent}|${item.text}`;
- if (realIndent !== 0 && !foldingMap[key] && TypeScriptDocumentSymbolProvider.shouldInclueEntry(item)) {
- const result = new vscode.SymbolInformation(item.text,
- getSymbolKind(item.kind),
- containerLabel ? containerLabel : '',
- typeConverters.Location.fromTextSpan(resource, item.spans[0]));
- foldingMap[key] = result;
- bucket.push(result);
- }
- if (item.childItems && item.childItems.length > 0) {
- for (const child of item.childItems) {
- TypeScriptDocumentSymbolProvider.convertNavBar(resource, realIndent + 1, foldingMap, bucket, child, item.text);
- }
- }
- }
-
- private static convertNavTree(resource: vscode.Uri, bucket: vscode.SymbolInformation[], item: Proto.NavigationTree): boolean {
- const symbolInfo = new vscode.SymbolInformation2(
- item.text,
- getSymbolKind(item.kind),
- '', // no container name
- typeConverters.Location.fromTextSpan(resource, item.spans[0]),
- );
-
+ private static convertNavTree(resource: vscode.Uri, bucket: vscode.DocumentSymbol[], item: Proto.NavigationTree): boolean {
let shouldInclude = TypeScriptDocumentSymbolProvider.shouldInclueEntry(item);
- if (item.childItems) {
- for (const child of item.childItems) {
- const includedChild = TypeScriptDocumentSymbolProvider.convertNavTree(resource, symbolInfo.children, child);
- shouldInclude = shouldInclude || includedChild;
+ const children = new Set(item.childItems || []);
+ for (const span of item.spans) {
+ const range = typeConverters.Range.fromTextSpan(span);
+ const symbolInfo = new vscode.DocumentSymbol(
+ item.text,
+ '',
+ getSymbolKind(item.kind),
+ range,
+ range);
+
+ for (const child of children) {
+ if (child.spans.some(span => !!range.intersection(typeConverters.Range.fromTextSpan(span)))) {
+ const includedChild = TypeScriptDocumentSymbolProvider.convertNavTree(resource, symbolInfo.children, child);
+ shouldInclude = shouldInclude || includedChild;
+ children.delete(child);
+ }
+ }
+
+ if (shouldInclude) {
+ bucket.push(symbolInfo);
}
}
- if (shouldInclude) {
- bucket.push(symbolInfo);
- }
return shouldInclude;
}
diff --git a/extensions/typescript-language-features/src/features/fileConfigurationManager.ts b/extensions/typescript-language-features/src/features/fileConfigurationManager.ts
index 0cb8c3da539..3068e8df5e1 100644
--- a/extensions/typescript-language-features/src/features/fileConfigurationManager.ts
+++ b/extensions/typescript-language-features/src/features/fileConfigurationManager.ts
@@ -3,12 +3,13 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
-import { workspace as Workspace, FormattingOptions, TextDocument, CancellationToken, window, Disposable, workspace, WorkspaceConfiguration } from 'vscode';
-
+import * as vscode from 'vscode';
import * as Proto from '../protocol';
import { ITypeScriptServiceClient } from '../typescriptService';
-import * as languageIds from '../utils/languageModeIds';
import API from '../utils/api';
+import { isTypeScriptDocument } from '../utils/languageModeIds';
+import { ResourceMap } from '../utils/resourceMap';
+
function objsAreEqual(a: T, b: T): boolean {
let keys = Object.keys(a);
@@ -22,8 +23,8 @@ function objsAreEqual(a: T, b: T): boolean {
}
interface FileConfiguration {
- formatOptions: Proto.FormatCodeSettings;
- preferences: Proto.UserPreferences;
+ readonly formatOptions: Proto.FormatCodeSettings;
+ readonly preferences: Proto.UserPreferences;
}
function areFileConfigurationsEqual(a: FileConfiguration, b: FileConfiguration): boolean {
@@ -34,19 +35,18 @@ function areFileConfigurationsEqual(a: FileConfiguration, b: FileConfiguration):
}
export default class FileConfigurationManager {
- private onDidCloseTextDocumentSub: Disposable | undefined;
- private formatOptions: { [key: string]: FileConfiguration | undefined } = Object.create(null);
+ private onDidCloseTextDocumentSub: vscode.Disposable | undefined;
+ private formatOptions = new ResourceMap();
public constructor(
private readonly client: ITypeScriptServiceClient
) {
- this.onDidCloseTextDocumentSub = Workspace.onDidCloseTextDocument((textDocument) => {
- const key = textDocument.uri.toString();
+ this.onDidCloseTextDocumentSub = vscode.workspace.onDidCloseTextDocument((textDocument) => {
// When a document gets closed delete the cached formatting options.
// This is necessary since the tsserver now closed a project when its
// last file in it closes which drops the stored formatting options
// as well.
- delete this.formatOptions[key];
+ this.formatOptions.delete(textDocument.uri);
});
}
@@ -58,53 +58,74 @@ export default class FileConfigurationManager {
}
public async ensureConfigurationForDocument(
- document: TextDocument,
- token: CancellationToken | undefined
+ document: vscode.TextDocument,
+ token: vscode.CancellationToken
): Promise {
- const editor = window.visibleTextEditors.find(editor => editor.document.fileName === document.fileName);
- if (editor) {
- const formattingOptions = {
- tabSize: editor.options.tabSize,
- insertSpaces: editor.options.insertSpaces
- } as FormattingOptions;
+ const formattingOptions = this.getFormattingOptions(document);
+ if (formattingOptions) {
return this.ensureConfigurationOptions(document, formattingOptions, token);
}
}
+ private getFormattingOptions(
+ document: vscode.TextDocument
+ ): vscode.FormattingOptions | undefined {
+ const editor = vscode.window.visibleTextEditors.find(editor => editor.document.fileName === document.fileName);
+ return editor
+ ? {
+ tabSize: editor.options.tabSize,
+ insertSpaces: editor.options.insertSpaces
+ } as vscode.FormattingOptions
+ : undefined;
+ }
+
public async ensureConfigurationOptions(
- document: TextDocument,
- options: FormattingOptions,
- token: CancellationToken | undefined
+ document: vscode.TextDocument,
+ options: vscode.FormattingOptions,
+ token: vscode.CancellationToken
): Promise {
const file = this.client.toPath(document.uri);
if (!file) {
return;
}
- const key = document.uri.toString();
- const cachedOptions = this.formatOptions[key];
+ const cachedOptions = this.formatOptions.get(document.uri);
const currentOptions = this.getFileOptions(document, options);
-
if (cachedOptions && areFileConfigurationsEqual(cachedOptions, currentOptions)) {
return;
}
+ this.formatOptions.set(document.uri, currentOptions);
const args: Proto.ConfigureRequestArguments = {
file,
...currentOptions,
};
await this.client.execute('configure', args, token);
- this.formatOptions[key] = currentOptions;
+ }
+
+ public async setGlobalConfigurationFromDocument(
+ document: vscode.TextDocument,
+ token: vscode.CancellationToken,
+ ): Promise {
+ const formattingOptions = this.getFormattingOptions(document);
+ if (!formattingOptions) {
+ return;
+ }
+
+ const args: Proto.ConfigureRequestArguments = {
+ file: undefined /*global*/,
+ ...this.getFileOptions(document, formattingOptions),
+ };
+ await this.client.execute('configure', args, token);
}
public reset() {
- this.formatOptions = Object.create(null);
+ this.formatOptions.clear();
}
-
private getFileOptions(
- document: TextDocument,
- options: FormattingOptions
+ document: vscode.TextDocument,
+ options: vscode.FormattingOptions
): FileConfiguration {
return {
formatOptions: this.getFormatOptions(document, options),
@@ -113,10 +134,10 @@ export default class FileConfigurationManager {
}
private getFormatOptions(
- document: TextDocument,
- options: FormattingOptions
+ document: vscode.TextDocument,
+ options: vscode.FormattingOptions
): Proto.FormatCodeSettings {
- const config = workspace.getConfiguration(
+ const config = vscode.workspace.getConfiguration(
isTypeScriptDocument(document) ? 'typescript.format' : 'javascript.format',
document.uri);
@@ -144,12 +165,12 @@ export default class FileConfigurationManager {
};
}
- private getPreferences(document: TextDocument): Proto.UserPreferences {
+ private getPreferences(document: vscode.TextDocument): Proto.UserPreferences {
if (!this.client.apiVersion.gte(API.v290)) {
return {};
}
- const preferences = workspace.getConfiguration(
+ const preferences = vscode.workspace.getConfiguration(
isTypeScriptDocument(document) ? 'typescript.preferences' : 'javascript.preferences',
document.uri);
@@ -161,7 +182,7 @@ export default class FileConfigurationManager {
}
}
-function getQuoteStylePreference(config: WorkspaceConfiguration) {
+function getQuoteStylePreference(config: vscode.WorkspaceConfiguration) {
switch (config.get('quoteStyle')) {
case 'single': return 'single';
case 'double': return 'double';
@@ -169,14 +190,10 @@ function getQuoteStylePreference(config: WorkspaceConfiguration) {
}
}
-function getImportModuleSpecifierPreference(config: WorkspaceConfiguration) {
+function getImportModuleSpecifierPreference(config: vscode.WorkspaceConfiguration) {
switch (config.get('importModuleSpecifier')) {
case 'relative': return 'relative';
case 'non-relative': return 'non-relative';
default: return undefined;
}
-}
-
-function isTypeScriptDocument(document: TextDocument) {
- return document.languageId === languageIds.typescript || document.languageId === languageIds.typescriptreact;
-}
+}
\ No newline at end of file
diff --git a/extensions/typescript-language-features/src/features/folding.ts b/extensions/typescript-language-features/src/features/folding.ts
index 556fafcbaa9..471cf26cff2 100644
--- a/extensions/typescript-language-features/src/features/folding.ts
+++ b/extensions/typescript-language-features/src/features/folding.ts
@@ -6,9 +6,9 @@
import * as vscode from 'vscode';
import * as Proto from '../protocol';
import { ITypeScriptServiceClient } from '../typescriptService';
-import * as typeConverters from '../utils/typeConverters';
-import { VersionDependentRegistration } from '../utils/dependentRegistration';
import API from '../utils/api';
+import { VersionDependentRegistration } from '../utils/dependentRegistration';
+import * as typeConverters from '../utils/typeConverters';
class TypeScriptFoldingProvider implements vscode.FoldingRangeProvider {
public constructor(
@@ -26,12 +26,12 @@ class TypeScriptFoldingProvider implements vscode.FoldingRangeProvider {
}
const args: Proto.FileRequestArgs = { file };
- const response: Proto.OutliningSpansResponse = await this.client.execute('getOutliningSpans', args, token);
- if (!response || !response.body) {
+ const { body } = await this.client.execute('getOutliningSpans', args, token);
+ if (!body) {
return;
}
- return response.body
+ return body
.map(span => this.convertOutliningSpan(span, document))
.filter(foldingRange => !!foldingRange) as vscode.FoldingRange[];
}
diff --git a/extensions/typescript-language-features/src/features/formatting.ts b/extensions/typescript-language-features/src/features/formatting.ts
index e0556c99ec8..b3ecff09d17 100644
--- a/extensions/typescript-language-features/src/features/formatting.ts
+++ b/extensions/typescript-language-features/src/features/formatting.ts
@@ -10,59 +10,38 @@ import { ConfigurationDependentRegistration } from '../utils/dependentRegistrati
import * as typeConverters from '../utils/typeConverters';
import FileConfigurationManager from './fileConfigurationManager';
-
class TypeScriptFormattingProvider implements vscode.DocumentRangeFormattingEditProvider, vscode.OnTypeFormattingEditProvider {
- private enabled: boolean = true;
-
public constructor(
private readonly client: ITypeScriptServiceClient,
private readonly formattingOptionsManager: FileConfigurationManager
) { }
- public updateConfiguration(config: vscode.WorkspaceConfiguration): void {
- this.enabled = config.get('format.enable', true);
- }
-
- public isEnabled(): boolean {
- return this.enabled;
- }
-
- private async doFormat(
- document: vscode.TextDocument,
- options: vscode.FormattingOptions,
- args: Proto.FormatRequestArgs,
- token: vscode.CancellationToken
- ): Promise {
- await this.formattingOptionsManager.ensureConfigurationOptions(document, options, token);
- try {
- const response = await this.client.execute('format', args, token);
- if (response.body) {
- return response.body.map(typeConverters.TextEdit.fromCodeEdit);
- }
- } catch {
- // noop
- }
- return [];
- }
-
public async provideDocumentRangeFormattingEdits(
document: vscode.TextDocument,
range: vscode.Range,
options: vscode.FormattingOptions,
token: vscode.CancellationToken
- ): Promise {
- const absPath = this.client.toPath(document.uri);
- if (!absPath) {
- return [];
+ ): Promise {
+ const file = this.client.toPath(document.uri);
+ if (!file) {
+ return undefined;
}
- const args: Proto.FormatRequestArgs = {
- file: absPath,
- line: range.start.line + 1,
- offset: range.start.character + 1,
- endLine: range.end.line + 1,
- endOffset: range.end.character + 1
- };
- return this.doFormat(document, options, args, token);
+
+ await this.formattingOptionsManager.ensureConfigurationOptions(document, options, token);
+
+ let edits: Proto.CodeEdit[];
+ try {
+ const args = typeConverters.Range.toFormattingRequestArgs(file, range);
+ const { body } = await this.client.execute('format', args, token);
+ if (!body) {
+ return undefined;
+ }
+ edits = body;
+ } catch {
+ return undefined;
+ }
+
+ return edits.map(typeConverters.TextEdit.fromCodeEdit);
}
public async provideOnTypeFormattingEdits(
@@ -72,22 +51,20 @@ class TypeScriptFormattingProvider implements vscode.DocumentRangeFormattingEdit
options: vscode.FormattingOptions,
token: vscode.CancellationToken
): Promise {
- const filepath = this.client.toPath(document.uri);
- if (!filepath) {
+ const file = this.client.toPath(document.uri);
+ if (!file) {
return [];
}
await this.formattingOptionsManager.ensureConfigurationOptions(document, options, token);
const args: Proto.FormatOnKeyRequestArgs = {
- file: filepath,
- line: position.line + 1,
- offset: position.character + 1,
+ ...typeConverters.Position.toFileLocationRequestArgs(file, position),
key: ch
};
try {
- const response = await this.client.execute('formatonkey', args, token);
- const edits = response.body;
+ const { body } = await this.client.execute('formatonkey', args, token);
+ const edits = body;
const result: vscode.TextEdit[] = [];
if (!edits) {
return result;
diff --git a/extensions/typescript-language-features/src/features/hover.ts b/extensions/typescript-language-features/src/features/hover.ts
index e6fce8635c1..19f78ee5f33 100644
--- a/extensions/typescript-language-features/src/features/hover.ts
+++ b/extensions/typescript-language-features/src/features/hover.ts
@@ -4,12 +4,12 @@
*--------------------------------------------------------------------------------------------*/
import * as vscode from 'vscode';
-
import * as Proto from '../protocol';
import { ITypeScriptServiceClient } from '../typescriptService';
import { tagsMarkdownPreview } from '../utils/previewer';
import * as typeConverters from '../utils/typeConverters';
+
class TypeScriptHoverProvider implements vscode.HoverProvider {
public constructor(
@@ -25,14 +25,14 @@ class TypeScriptHoverProvider implements vscode.HoverProvider {
if (!filepath) {
return undefined;
}
+
const args = typeConverters.Position.toFileLocationRequestArgs(filepath, position);
try {
- const response = await this.client.execute('quickinfo', args, token);
- if (response && response.body) {
- const data = response.body;
+ const { body } = await this.client.interuptGetErr(() => this.client.execute('quickinfo', args, token));
+ if (body) {
return new vscode.Hover(
- TypeScriptHoverProvider.getContents(data),
- typeConverters.Range.fromTextSpan(data));
+ TypeScriptHoverProvider.getContents(body),
+ typeConverters.Range.fromTextSpan(body));
}
} catch (e) {
// noop
diff --git a/extensions/typescript-language-features/src/features/implementations.ts b/extensions/typescript-language-features/src/features/implementations.ts
index c2627a35244..d750587ea8d 100644
--- a/extensions/typescript-language-features/src/features/implementations.ts
+++ b/extensions/typescript-language-features/src/features/implementations.ts
@@ -10,7 +10,7 @@ import { VersionDependentRegistration } from '../utils/dependentRegistration';
import DefinitionProviderBase from './definitionProviderBase';
class TypeScriptImplementationProvider extends DefinitionProviderBase implements vscode.ImplementationProvider {
- public provideImplementation(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken | boolean): Promise {
+ public provideImplementation(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): Promise {
return this.getSymbolLocations('implementation', document, position, token);
}
}
diff --git a/extensions/typescript-language-features/src/features/implementationsCodeLens.ts b/extensions/typescript-language-features/src/features/implementationsCodeLens.ts
index 8bb4cfa2e8b..32559e09e21 100644
--- a/extensions/typescript-language-features/src/features/implementationsCodeLens.ts
+++ b/extensions/typescript-language-features/src/features/implementationsCodeLens.ts
@@ -10,50 +10,45 @@ import * as PConst from '../protocol.const';
import { ITypeScriptServiceClient } from '../typescriptService';
import API from '../utils/api';
import { ConfigurationDependentRegistration, VersionDependentRegistration } from '../utils/dependentRegistration';
-import * as typeConverters from '../utils/typeConverters';
import { CachedNavTreeResponse, ReferencesCodeLens, TypeScriptBaseCodeLensProvider } from './baseCodeLensProvider';
const localize = nls.loadMessageBundle();
export default class TypeScriptImplementationsCodeLensProvider extends TypeScriptBaseCodeLensProvider {
- public resolveCodeLens(inputCodeLens: vscode.CodeLens, token: vscode.CancellationToken): Promise {
+ public async resolveCodeLens(
+ inputCodeLens: vscode.CodeLens,
+ _token: vscode.CancellationToken,
+ ): Promise {
const codeLens = inputCodeLens as ReferencesCodeLens;
- const args = typeConverters.Position.toFileLocationRequestArgs(codeLens.file, codeLens.range.start);
- return this.client.execute('implementation', args, token).then(response => {
- if (!response || !response.body) {
- throw codeLens;
+ try {
+ const locations: vscode.Location[] | undefined = await vscode.commands.executeCommand('vscode.executeImplementationProvider', codeLens.document, codeLens.range.start);
+ if (locations) {
+ codeLens.command = this.getCommand(locations, codeLens);
+ return codeLens;
}
+ } catch {
+ // noop
+ }
- const locations = response.body
- .map(reference =>
- // Only take first line on implementation: https://github.com/Microsoft/vscode/issues/23924
- new vscode.Location(this.client.toResource(reference.file),
- reference.start.line === reference.end.line
- ? typeConverters.Range.fromTextSpan(reference)
- : new vscode.Range(
- reference.start.line - 1, reference.start.offset - 1,
- reference.start.line, 0)))
- // Exclude original from implementations
- .filter(location =>
- !(location.uri.toString() === codeLens.document.toString() &&
- location.range.start.line === codeLens.range.start.line &&
- location.range.start.character === codeLens.range.start.character));
+ codeLens.command = {
+ title: localize('implementationsErrorLabel', 'Could not determine implementations'),
+ command: ''
+ };
+ return codeLens;
+ }
- codeLens.command = {
- title: locations.length === 1
- ? localize('oneImplementationLabel', '1 implementation')
- : localize('manyImplementationLabel', '{0} implementations', locations.length),
- command: locations.length ? 'editor.action.showReferences' : '',
- arguments: [codeLens.document, codeLens.range.start, locations]
- };
- return codeLens;
- }).catch(() => {
- codeLens.command = {
- title: localize('implementationsErrorLabel', 'Could not determine implementations'),
- command: ''
- };
- return codeLens;
- });
+ private getCommand(locations: vscode.Location[], codeLens: ReferencesCodeLens): vscode.Command | undefined {
+ return {
+ title: this.getTitle(locations),
+ command: locations.length ? 'editor.action.showReferences' : '',
+ arguments: [codeLens.document, codeLens.range.start, locations]
+ };
+ }
+
+ private getTitle(locations: vscode.Location[]): string {
+ return locations.length === 1
+ ? localize('oneImplementationLabel', '1 implementation')
+ : localize('manyImplementationLabel', '{0} implementations', locations.length);
}
protected extractSymbol(
diff --git a/extensions/typescript-language-features/src/features/jsDocCompletions.ts b/extensions/typescript-language-features/src/features/jsDocCompletions.ts
index b8683b81e77..e251e37542e 100644
--- a/extensions/typescript-language-features/src/features/jsDocCompletions.ts
+++ b/extensions/typescript-language-features/src/features/jsDocCompletions.ts
@@ -3,192 +3,102 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
-import { CancellationToken, CompletionItem, CompletionItemKind, CompletionItemProvider, Disposable, DocumentSelector, languages, Position, Range, SnippetString, TextDocument, TextEditor, Uri, window } from 'vscode';
+import * as vscode from 'vscode';
import * as nls from 'vscode-nls';
import * as Proto from '../protocol';
import { ITypeScriptServiceClient } from '../typescriptService';
-import { Command, CommandManager } from '../utils/commandManager';
import { ConfigurationDependentRegistration } from '../utils/dependentRegistration';
import * as typeConverters from '../utils/typeConverters';
const localize = nls.loadMessageBundle();
-class JsDocCompletionItem extends CompletionItem {
+const defaultJsDoc = new vscode.SnippetString(`/**\n * $0\n */`);
+
+class JsDocCompletionItem extends vscode.CompletionItem {
constructor(
- document: TextDocument,
- position: Position
+ public readonly document: vscode.TextDocument,
+ public readonly position: vscode.Position
) {
- super('/** */', CompletionItemKind.Snippet);
+ super('/** */', vscode.CompletionItemKind.Snippet);
this.detail = localize('typescript.jsDocCompletionItem.documentation', 'JSDoc comment');
- this.insertText = '';
this.sortText = '\0';
const line = document.lineAt(position.line).text;
const prefix = line.slice(0, position.character).match(/\/\**\s*$/);
const suffix = line.slice(position.character).match(/^\s*\**\//);
const start = position.translate(0, prefix ? -prefix[0].length : 0);
- this.range = new Range(
+ this.range = new vscode.Range(
start,
position.translate(0, suffix ? suffix[0].length : 0));
-
- this.command = {
- title: 'Try Complete JSDoc',
- command: TryCompleteJsDocCommand.COMMAND_NAME,
- arguments: [document.uri, start]
- };
}
}
-class JsDocCompletionProvider implements CompletionItemProvider {
+class JsDocCompletionProvider implements vscode.CompletionItemProvider {
constructor(
private readonly client: ITypeScriptServiceClient,
- commandManager: CommandManager
- ) {
- commandManager.register(new TryCompleteJsDocCommand(client));
- }
+ ) { }
public async provideCompletionItems(
- document: TextDocument,
- position: Position,
- token: CancellationToken
- ): Promise {
+ document: vscode.TextDocument,
+ position: vscode.Position,
+ token: vscode.CancellationToken
+ ): Promise {
const file = this.client.toPath(document.uri);
if (!file) {
- return [];
+ return undefined;
}
- if (!this.isValidCursorPosition(document, position)) {
- return [];
+ if (!this.isPotentiallyValidDocCompletionPosition(document, position)) {
+ return undefined;
}
- if (!await this.isCommentableLocation(file, position, token)) {
- return [];
+ const args = typeConverters.Position.toFileLocationRequestArgs(file, position);
+ let res: Proto.DocCommandTemplateResponse | undefined;
+ try {
+ res = await this.client.execute('docCommentTemplate', args, token);
+ } catch {
+ return undefined;
}
- return [new JsDocCompletionItem(document, position)];
+ if (!res.body) {
+ return undefined;
+ }
+
+ const item = new JsDocCompletionItem(document, position);
+
+ // Workaround for #43619
+ // docCommentTemplate previously returned undefined for empty jsdoc templates.
+ // TS 2.7 now returns a single line doc comment, which breaks indentation.
+ if (res.body.newText === '/** */') {
+ item.insertText = defaultJsDoc;
+ } else {
+ item.insertText = templateToSnippet(res.body.newText);
+ }
+
+ return [item];
}
- private async isCommentableLocation(
- file: string,
- position: Position,
- token: CancellationToken
- ): Promise {
- const args: Proto.FileRequestArgs = {
- file
- };
- const response = await Promise.race([
- this.client.execute('navtree', args, token),
- new Promise((resolve) => setTimeout(resolve, 250))
- ]);
-
- if (!response || !response.body) {
- return false;
- }
-
- const body = response.body;
-
- function matchesPosition(tree: Proto.NavigationTree): boolean {
- if (!tree.spans.length) {
- return false;
- }
- const span = typeConverters.Range.fromTextSpan(tree.spans[0]);
- if (position.line === span.start.line - 1 || position.line === span.start.line) {
- return true;
- }
-
- return tree.childItems ? tree.childItems.some(matchesPosition) : false;
- }
-
- return matchesPosition(body);
- }
-
- private isValidCursorPosition(document: TextDocument, position: Position): boolean {
+ private isPotentiallyValidDocCompletionPosition(
+ document: vscode.TextDocument,
+ position: vscode.Position
+ ): boolean {
// Only show the JSdoc completion when the everything before the cursor is whitespace
// or could be the opening of a comment
const line = document.lineAt(position.line).text;
const prefix = line.slice(0, position.character);
- return prefix.match(/^\s*$|\/\*\*\s*$|^\s*\/\*\*+\s*$/) !== null;
- }
+ if (prefix.match(/^\s*$|\/\*\*\s*$|^\s*\/\*\*+\s*$/) === null) {
+ return false;
+ }
- public resolveCompletionItem(item: CompletionItem, _token: CancellationToken) {
- return item;
+ // And everything after is possibly a closing comment or more whitespace
+ const suffix = line.slice(position.character);
+ return suffix.match(/^\s*\*+\//) !== null;
}
}
-class TryCompleteJsDocCommand implements Command {
- public static readonly COMMAND_NAME = '_typeScript.tryCompleteJsDoc';
- public readonly id = TryCompleteJsDocCommand.COMMAND_NAME;
-
- constructor(
- private readonly client: ITypeScriptServiceClient
- ) { }
-
- /**
- * Try to insert a jsdoc comment, using a template provide by typescript
- * if possible, otherwise falling back to a default comment format.
- */
- public async execute(resource: Uri, start: Position): Promise {
- const file = this.client.toPath(resource);
- if (!file) {
- return false;
- }
-
- const editor = window.activeTextEditor;
- if (!editor || editor.document.uri.fsPath !== resource.fsPath) {
- return false;
- }
-
- const didInsertFromTemplate = await this.tryInsertJsDocFromTemplate(editor, file, start);
- if (didInsertFromTemplate) {
- return true;
- }
-
- return this.tryInsertDefaultDoc(editor, start);
- }
-
- private async tryInsertJsDocFromTemplate(editor: TextEditor, file: string, position: Position): Promise {
- const snippet = await TryCompleteJsDocCommand.getSnippetTemplate(this.client, file, position);
- if (!snippet) {
- return false;
- }
- return editor.insertSnippet(
- snippet,
- position,
- { undoStopBefore: false, undoStopAfter: true });
- }
-
- public static getSnippetTemplate(client: ITypeScriptServiceClient, file: string, position: Position): Promise {
- const args = typeConverters.Position.toFileLocationRequestArgs(file, position);
- return Promise.race([
- client.execute('docCommentTemplate', args),
- new Promise((_, reject) => setTimeout(reject, 250))
- ]).then((res: Proto.DocCommandTemplateResponse) => {
- if (!res || !res.body) {
- return undefined;
- }
- // Workaround for #43619
- // docCommentTemplate previously returned undefined for empty jsdoc templates.
- // TS 2.7 now returns a single line doc comment, which breaks indentation.
- if (res.body.newText === '/** */') {
- return undefined;
- }
- return templateToSnippet(res.body.newText);
- }, () => undefined);
- }
-
- /**
- * Insert the default JSDoc
- */
- private tryInsertDefaultDoc(editor: TextEditor, position: Position): Thenable {
- const snippet = new SnippetString(`/**\n * $0\n */`);
- return editor.insertSnippet(snippet, position, { undoStopBefore: false, undoStopAfter: true });
- }
-}
-
-
-export function templateToSnippet(template: string): SnippetString {
+export function templateToSnippet(template: string): vscode.SnippetString {
// TODO: use append placeholder
let snippetIndex = 1;
template = template.replace(/\$/g, '\\$');
@@ -204,17 +114,16 @@ export function templateToSnippet(template: string): SnippetString {
out += post + ` \${${snippetIndex++}}`;
return out;
});
- return new SnippetString(template);
+ return new vscode.SnippetString(template);
}
export function register(
- selector: DocumentSelector,
+ selector: vscode.DocumentSelector,
client: ITypeScriptServiceClient,
- commandManager: CommandManager
-): Disposable {
+): vscode.Disposable {
return new ConfigurationDependentRegistration('jsDocCompletion', 'enabled', () => {
- return languages.registerCompletionItemProvider(selector,
- new JsDocCompletionProvider(client, commandManager),
+ return vscode.languages.registerCompletionItemProvider(selector,
+ new JsDocCompletionProvider(client),
'*');
});
}
diff --git a/extensions/typescript-language-features/src/features/languageConfiguration.ts b/extensions/typescript-language-features/src/features/languageConfiguration.ts
index fc6fd3269eb..99515964e77 100644
--- a/extensions/typescript-language-features/src/features/languageConfiguration.ts
+++ b/extensions/typescript-language-features/src/features/languageConfiguration.ts
@@ -9,14 +9,12 @@
* ------------------------------------------------------------------------------------------ */
import * as vscode from 'vscode';
-import { disposeAll } from '../utils/dispose';
+import { Disposable } from '../utils/dispose';
import * as languageModeIds from '../utils/languageModeIds';
const jsTsLanguageConfiguration: vscode.LanguageConfiguration = {
indentationRules: {
- // ^(.*\*/)?\s*\}.*$
- decreaseIndentPattern: /^((?!.*?\/\*).*\*\/)?\s*[\}\]\)].*$/,
- // ^.*\{[^}"']*$
+ decreaseIndentPattern: /^((?!.*?\/\*).*\*\/)?\s*[\}\]].*$/,
increaseIndentPattern: /^((?!\/\/).)*(\{[^}"'`]*|\([^)"'`]*|\[[^\]"'`]*)$/
},
wordPattern: /(-?\d*\.\d\w*)|([^\`\~\!\@\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,
@@ -65,10 +63,10 @@ const jsxTagsLanguageConfiguration: vscode.LanguageConfiguration = {
],
};
-export class LanguageConfigurationManager {
- private readonly _registrations: vscode.Disposable[] = [];
+export class LanguageConfigurationManager extends Disposable {
constructor() {
+ super();
const standardLanguages = [
languageModeIds.javascript,
languageModeIds.javascriptreact,
@@ -83,10 +81,6 @@ export class LanguageConfigurationManager {
}
private registerConfiguration(language: string, config: vscode.LanguageConfiguration) {
- this._registrations.push(vscode.languages.setLanguageConfiguration(language, config));
- }
-
- dispose() {
- disposeAll(this._registrations);
+ this._register(vscode.languages.setLanguageConfiguration(language, config));
}
}
diff --git a/extensions/typescript-language-features/src/features/organizeImports.ts b/extensions/typescript-language-features/src/features/organizeImports.ts
index 7d8697903a7..302da37e8fe 100644
--- a/extensions/typescript-language-features/src/features/organizeImports.ts
+++ b/extensions/typescript-language-features/src/features/organizeImports.ts
@@ -7,11 +7,13 @@ import * as vscode from 'vscode';
import * as nls from 'vscode-nls';
import * as Proto from '../protocol';
import { ITypeScriptServiceClient } from '../typescriptService';
+import API from '../utils/api';
import { Command, CommandManager } from '../utils/commandManager';
+import { VersionDependentRegistration } from '../utils/dependentRegistration';
import * as typeconverts from '../utils/typeConverters';
import FileConfigurationManager from './fileConfigurationManager';
-import { VersionDependentRegistration } from '../utils/dependentRegistration';
-import API from '../utils/api';
+import TelemetryReporter from '../utils/telemetry';
+import { nulToken } from '../utils/cancellation';
const localize = nls.loadMessageBundle();
@@ -22,10 +24,20 @@ class OrganizeImportsCommand implements Command {
public readonly id = OrganizeImportsCommand.Id;
constructor(
- private readonly client: ITypeScriptServiceClient
+ private readonly client: ITypeScriptServiceClient,
+ private readonly telemetryReporter: TelemetryReporter,
) { }
public async execute(file: string): Promise {
+ /* __GDPR__
+ "organizeImports.execute" : {
+ "${include}": [
+ "${TypeScriptCommonProperties}"
+ ]
+ }
+ */
+ this.telemetryReporter.logTelemetry('organizeImports.execute', {});
+
const args: Proto.OrganizeImportsRequestArgs = {
scope: {
type: 'file',
@@ -34,13 +46,9 @@ class OrganizeImportsCommand implements Command {
}
}
};
- const response = await this.client.execute('organizeImports', args);
- if (!response || !response.success) {
- return false;
- }
-
- const edits = typeconverts.WorkspaceEdit.fromFromFileCodeEdits(this.client, response.body);
- return await vscode.workspace.applyEdit(edits);
+ const { body } = await this.client.execute('organizeImports', args, nulToken);
+ const edits = typeconverts.WorkspaceEdit.fromFileCodeEdits(this.client, body);
+ return vscode.workspace.applyEdit(edits);
}
}
@@ -49,8 +57,10 @@ export class OrganizeImportsCodeActionProvider implements vscode.CodeActionProvi
private readonly client: ITypeScriptServiceClient,
commandManager: CommandManager,
private readonly fileConfigManager: FileConfigurationManager,
+ telemetryReporter: TelemetryReporter,
+
) {
- commandManager.register(new OrganizeImportsCommand(client));
+ commandManager.register(new OrganizeImportsCommand(client, telemetryReporter));
}
public readonly metadata: vscode.CodeActionProviderMetadata = {
@@ -60,7 +70,7 @@ export class OrganizeImportsCodeActionProvider implements vscode.CodeActionProvi
public provideCodeActions(
document: vscode.TextDocument,
_range: vscode.Range,
- _context: vscode.CodeActionContext,
+ context: vscode.CodeActionContext,
token: vscode.CancellationToken
): vscode.CodeAction[] {
const file = this.client.toPath(document.uri);
@@ -68,6 +78,10 @@ export class OrganizeImportsCodeActionProvider implements vscode.CodeActionProvi
return [];
}
+ if (!context.only || !context.only.contains(vscode.CodeActionKind.SourceOrganizeImports)) {
+ return [];
+ }
+
this.fileConfigManager.ensureConfigurationForDocument(document, token);
const action = new vscode.CodeAction(
@@ -82,10 +96,11 @@ export function register(
selector: vscode.DocumentSelector,
client: ITypeScriptServiceClient,
commandManager: CommandManager,
- fileConfigurationManager: FileConfigurationManager
+ fileConfigurationManager: FileConfigurationManager,
+ telemetryReporter: TelemetryReporter,
) {
return new VersionDependentRegistration(client, API.v280, () => {
- const organizeImportsProvider = new OrganizeImportsCodeActionProvider(client, commandManager, fileConfigurationManager);
+ const organizeImportsProvider = new OrganizeImportsCodeActionProvider(client, commandManager, fileConfigurationManager, telemetryReporter);
return vscode.languages.registerCodeActionsProvider(selector,
organizeImportsProvider,
organizeImportsProvider.metadata);
diff --git a/extensions/typescript-language-features/src/features/quickFix.ts b/extensions/typescript-language-features/src/features/quickFix.ts
index 8a9762def39..769f08cb51a 100644
--- a/extensions/typescript-language-features/src/features/quickFix.ts
+++ b/extensions/typescript-language-features/src/features/quickFix.ts
@@ -10,10 +10,12 @@ import { ITypeScriptServiceClient } from '../typescriptService';
import API from '../utils/api';
import { applyCodeActionCommands, getEditForCodeAction } from '../utils/codeAction';
import { Command, CommandManager } from '../utils/commandManager';
+import { VersionDependentRegistration } from '../utils/dependentRegistration';
import TelemetryReporter from '../utils/telemetry';
import * as typeConverters from '../utils/typeConverters';
import { DiagnosticsManager } from './diagnostics';
import FileConfigurationManager from './fileConfigurationManager';
+import { nulToken } from '../utils/cancellation';
const localize = nls.loadMessageBundle();
@@ -29,20 +31,19 @@ class ApplyCodeActionCommand implements Command {
public async execute(
action: Proto.CodeFixAction
): Promise {
- if (action.fixName) {
- /* __GDPR__
- "quickFix.execute" : {
- "fixName" : { "classification": "PublicNonPersonalData", "purpose": "FeatureInsight" },
- "${include}": [
- "${TypeScriptCommonProperties}"
- ]
- }
- */
- this.telemetryReporter.logTelemetry('quickFix.execute', {
- fixName: action.fixName
- });
- }
- return applyCodeActionCommands(this.client, action);
+ /* __GDPR__
+ "quickFix.execute" : {
+ "fixName" : { "classification": "PublicNonPersonalData", "purpose": "FeatureInsight" },
+ "${include}": [
+ "${TypeScriptCommonProperties}"
+ ]
+ }
+ */
+ this.telemetryReporter.logTelemetry('quickFix.execute', {
+ fixName: action.fixName
+ });
+
+ return applyCodeActionCommands(this.client, action.commands, nulToken);
}
}
@@ -64,19 +65,17 @@ class ApplyFixAllCodeAction implements Command {
return;
}
- if (tsAction.fixName) {
- /* __GDPR__
- "quickFixAll.execute" : {
- "fixName" : { "classification": "PublicNonPersonalData", "purpose": "FeatureInsight" },
- "${include}": [
- "${TypeScriptCommonProperties}"
- ]
- }
- */
- this.telemetryReporter.logTelemetry('quickFixAll.execute', {
- fixName: tsAction.fixName
- });
- }
+ /* __GDPR__
+ "quickFixAll.execute" : {
+ "fixName" : { "classification": "PublicNonPersonalData", "purpose": "FeatureInsight" },
+ "${include}": [
+ "${TypeScriptCommonProperties}"
+ ]
+ }
+ */
+ this.telemetryReporter.logTelemetry('quickFixAll.execute', {
+ fixName: tsAction.fixName
+ });
const args: Proto.GetCombinedCodeFixRequestArgs = {
scope: {
@@ -87,17 +86,14 @@ class ApplyFixAllCodeAction implements Command {
};
try {
- const combinedCodeFixesResponse = await this.client.execute('getCombinedCodeFix', args);
- if (!combinedCodeFixesResponse.body) {
+ const { body } = await this.client.execute('getCombinedCodeFix', args, nulToken);
+ if (!body) {
return;
}
- const edit = typeConverters.WorkspaceEdit.fromFromFileCodeEdits(this.client, combinedCodeFixesResponse.body.changes);
+ const edit = typeConverters.WorkspaceEdit.fromFileCodeEdits(this.client, body.changes);
await vscode.workspace.applyEdit(edit);
-
- if (combinedCodeFixesResponse.command) {
- await vscode.commands.executeCommand(ApplyCodeActionCommand.ID, combinedCodeFixesResponse.command);
- }
+ await applyCodeActionCommands(this.client, body.commands, nulToken);
} catch {
// noop
}
@@ -128,6 +124,34 @@ class DiagnosticsSet {
public get values(): Iterable {
return this._values.values();
}
+
+ public get size() {
+ return this._values.size;
+ }
+}
+
+class CodeActionSet {
+ private _actions: vscode.CodeAction[] = [];
+ private _fixAllActions = new Set<{}>();
+
+ public get values() {
+ return this._actions;
+ }
+
+ public addAction(action: vscode.CodeAction) {
+ this._actions.push(action);
+ }
+
+ public addFixAllAction(fixId: {}, action: vscode.CodeAction) {
+ if (!this.hasFixAllAction(fixId)) {
+ this.addAction(action);
+ this._fixAllActions.add(fixId);
+ }
+ }
+
+ public hasFixAllAction(fixId: {}) {
+ return this._fixAllActions.has(fixId);
+ }
}
class SupportedCodeActionProvider {
@@ -137,15 +161,14 @@ class SupportedCodeActionProvider {
private readonly client: ITypeScriptServiceClient
) { }
- public async getFixableDiagnosticsForContext(context: vscode.CodeActionContext): Promise {
+ public async getFixableDiagnosticsForContext(context: vscode.CodeActionContext): Promise {
const supportedActions = await this.supportedCodeActions;
- const fixableDiagnostics = DiagnosticsSet.from(context.diagnostics.filter(diagnostic => supportedActions.has(+(diagnostic.code!))));
- return Array.from(fixableDiagnostics.values);
+ return DiagnosticsSet.from(context.diagnostics.filter(diagnostic => supportedActions.has(+(diagnostic.code!))));
}
private get supportedCodeActions(): Thenable> {
if (!this._supportedCodeActions) {
- this._supportedCodeActions = this.client.execute('getSupportedCodeFixes', null, undefined)
+ this._supportedCodeActions = this.client.execute('getSupportedCodeFixes', null, nulToken)
.then(response => response.body || [])
.then(codes => codes.map(code => +code).filter(code => !isNaN(code)))
.then(codes => new Set(codes));
@@ -156,6 +179,10 @@ class SupportedCodeActionProvider {
class TypeScriptQuickFixProvider implements vscode.CodeActionProvider {
+ public static readonly metadata: vscode.CodeActionProviderMetadata = {
+ providedCodeActionKinds: [vscode.CodeActionKind.QuickFix]
+ };
+
private readonly supportedCodeActionProvider: SupportedCodeActionProvider;
constructor(
@@ -177,17 +204,13 @@ class TypeScriptQuickFixProvider implements vscode.CodeActionProvider {
context: vscode.CodeActionContext,
token: vscode.CancellationToken
): Promise {
- if (!this.client.apiVersion.gte(API.v213)) {
- return [];
- }
-
const file = this.client.toPath(document.uri);
if (!file) {
return [];
}
const fixableDiagnostics = await this.supportedCodeActionProvider.getFixableDiagnosticsForContext(context);
- if (!fixableDiagnostics.length) {
+ if (!fixableDiagnostics.size) {
return [];
}
@@ -198,7 +221,7 @@ class TypeScriptQuickFixProvider implements vscode.CodeActionProvider {
await this.formattingConfigurationManager.ensureConfigurationForDocument(document, token);
const results: vscode.CodeAction[] = [];
- for (const diagnostic of fixableDiagnostics) {
+ for (const diagnostic of fixableDiagnostics.values) {
results.push(...await this.getFixesForDiagnostic(document, file, diagnostic, token));
}
return results;
@@ -214,26 +237,28 @@ class TypeScriptQuickFixProvider implements vscode.CodeActionProvider {
...typeConverters.Range.toFileRangeRequestArgs(file, diagnostic.range),
errorCodes: [+(diagnostic.code!)]
};
- const codeFixesResponse = await this.client.execute('getCodeFixes', args, token);
- if (codeFixesResponse.body) {
- const results: vscode.CodeAction[] = [];
- for (const tsCodeFix of codeFixesResponse.body) {
- results.push(...await this.getAllFixesForTsCodeAction(document, file, diagnostic, tsCodeFix));
- }
- return results;
+ const { body } = await this.client.execute('getCodeFixes', args, token);
+ if (!body) {
+ return [];
}
- return [];
+
+ const results = new CodeActionSet();
+ for (const tsCodeFix of body) {
+ this.addAllFixesForTsCodeAction(results, document, file, diagnostic, tsCodeFix);
+ }
+ return results.values;
}
- private async getAllFixesForTsCodeAction(
+ private addAllFixesForTsCodeAction(
+ results: CodeActionSet,
document: vscode.TextDocument,
file: string,
diagnostic: vscode.Diagnostic,
tsAction: Proto.CodeAction
- ): Promise> {
- const singleFix = this.getSingleFixForTsCodeAction(diagnostic, tsAction);
- const fixAll = await this.getFixAllForTsCodeAction(document, file, diagnostic, tsAction as Proto.CodeFixAction);
- return fixAll ? [singleFix, fixAll] : [singleFix];
+ ): CodeActionSet {
+ results.addAction(this.getSingleFixForTsCodeAction(diagnostic, tsAction));
+ this.addFixAllForTsCodeAction(results, document, file, diagnostic, tsAction as Proto.CodeFixAction);
+ return results;
}
private getSingleFixForTsCodeAction(
@@ -243,42 +268,41 @@ class TypeScriptQuickFixProvider implements vscode.CodeActionProvider {
const codeAction = new vscode.CodeAction(tsAction.description, vscode.CodeActionKind.QuickFix);
codeAction.edit = getEditForCodeAction(this.client, tsAction);
codeAction.diagnostics = [diagnostic];
- if (tsAction.commands) {
- codeAction.command = {
- command: ApplyCodeActionCommand.ID,
- arguments: [tsAction],
- title: tsAction.description
- };
- }
+ codeAction.command = {
+ command: ApplyCodeActionCommand.ID,
+ arguments: [tsAction],
+ title: ''
+ };
return codeAction;
}
- private async getFixAllForTsCodeAction(
+ private addFixAllForTsCodeAction(
+ results: CodeActionSet,
document: vscode.TextDocument,
file: string,
diagnostic: vscode.Diagnostic,
tsAction: Proto.CodeFixAction,
- ): Promise {
- if (!tsAction.fixId || !this.client.apiVersion.gte(API.v270)) {
- return undefined;
+ ): CodeActionSet {
+ if (!tsAction.fixId || !this.client.apiVersion.gte(API.v270) || results.hasFixAllAction(results)) {
+ return results;
}
// Make sure there are multiple diagnostics of the same type in the file
if (!this.diagnosticsManager.getDiagnostics(document.uri).some(x => x.code === diagnostic.code && x !== diagnostic)) {
- return;
+ return results;
}
const action = new vscode.CodeAction(
tsAction.fixAllDescription || localize('fixAllInFileLabel', '{0} (Fix all in file)', tsAction.description),
vscode.CodeActionKind.QuickFix);
action.diagnostics = [diagnostic];
-
action.command = {
command: ApplyFixAllCodeAction.ID,
arguments: [file, tsAction],
title: ''
};
- return action;
+ results.addFixAllAction(tsAction.fixId, action);
+ return results;
}
}
@@ -290,6 +314,8 @@ export function register(
diagnosticsManager: DiagnosticsManager,
telemetryReporter: TelemetryReporter
) {
- return vscode.languages.registerCodeActionsProvider(selector,
- new TypeScriptQuickFixProvider(client, fileConfigurationManager, commandManager, diagnosticsManager, telemetryReporter));
+ return new VersionDependentRegistration(client, API.v213, () =>
+ vscode.languages.registerCodeActionsProvider(selector,
+ new TypeScriptQuickFixProvider(client, fileConfigurationManager, commandManager, diagnosticsManager, telemetryReporter),
+ TypeScriptQuickFixProvider.metadata));
}
diff --git a/extensions/typescript-language-features/src/features/refactor.ts b/extensions/typescript-language-features/src/features/refactor.ts
index bd65b8481a6..7817a2fef68 100644
--- a/extensions/typescript-language-features/src/features/refactor.ts
+++ b/extensions/typescript-language-features/src/features/refactor.ts
@@ -4,22 +4,24 @@
*--------------------------------------------------------------------------------------------*/
import * as vscode from 'vscode';
-import * as fs from 'fs';
-
import * as Proto from '../protocol';
import { ITypeScriptServiceClient } from '../typescriptService';
+import API from '../utils/api';
+import { Command, CommandManager } from '../utils/commandManager';
+import { VersionDependentRegistration } from '../utils/dependentRegistration';
+import TelemetryReporter from '../utils/telemetry';
import * as typeConverters from '../utils/typeConverters';
import FormattingOptionsManager from './fileConfigurationManager';
-import { CommandManager, Command } from '../utils/commandManager';
-import { VersionDependentRegistration } from '../utils/dependentRegistration';
-import API from '../utils/api';
+import { nulToken } from '../utils/cancellation';
+
class ApplyRefactoringCommand implements Command {
public static readonly ID = '_typescript.applyRefactoring';
public readonly id = ApplyRefactoringCommand.ID;
constructor(
- private readonly client: ITypeScriptServiceClient
+ private readonly client: ITypeScriptServiceClient,
+ private readonly telemetryReporter: TelemetryReporter
) { }
public async execute(
@@ -29,36 +31,34 @@ class ApplyRefactoringCommand implements Command {
action: string,
range: vscode.Range
): Promise {
+ /* __GDPR__
+ "refactor.execute" : {
+ "action" : { "classification": "PublicNonPersonalData", "purpose": "FeatureInsight" },
+ "${include}": [
+ "${TypeScriptCommonProperties}"
+ ]
+ }
+ */
+ this.telemetryReporter.logTelemetry('refactor.execute', {
+ action: action
+ });
+
const args: Proto.GetEditsForRefactorRequestArgs = {
...typeConverters.Range.toFileRangeRequestArgs(file, range),
refactor,
action
};
- const response = await this.client.execute('getEditsForRefactor', args);
- if (!response || !response.body || !response.body.edits.length) {
+ const { body } = await this.client.execute('getEditsForRefactor', args, nulToken);
+ if (!body || !body.edits.length) {
return false;
}
- for (const edit of response.body.edits) {
- try {
- await vscode.workspace.openTextDocument(edit.fileName);
- } catch {
- try {
- if (!fs.existsSync(edit.fileName)) {
- fs.writeFileSync(edit.fileName, '');
- }
- } catch {
- // noop
- }
- }
- }
-
- const edit = typeConverters.WorkspaceEdit.fromFromFileCodeEdits(this.client, response.body.edits);
- if (!(await vscode.workspace.applyEdit(edit))) {
+ const workspaceEdit = await this.toWorkspaceEdit(body);
+ if (!(await vscode.workspace.applyEdit(workspaceEdit))) {
return false;
}
- const renameLocation = response.body.renameLocation;
+ const renameLocation = body.renameLocation;
if (renameLocation) {
await vscode.commands.executeCommand('editor.action.rename', [
document.uri,
@@ -67,6 +67,15 @@ class ApplyRefactoringCommand implements Command {
}
return true;
}
+
+ private async toWorkspaceEdit(body: Proto.RefactorEditInfo) {
+ const workspaceEdit = new vscode.WorkspaceEdit();
+ for (const edit of body.edits) {
+ workspaceEdit.createFile(this.client.toResource(edit.fileName), { ignoreIfExists: true });
+ }
+ typeConverters.WorkspaceEdit.withFileCodeEdits(workspaceEdit, this.client, body.edits);
+ return workspaceEdit;
+ }
}
class SelectRefactorCommand implements Command {
@@ -102,9 +111,10 @@ class TypeScriptRefactorProvider implements vscode.CodeActionProvider {
constructor(
private readonly client: ITypeScriptServiceClient,
private readonly formattingOptionsManager: FormattingOptionsManager,
- commandManager: CommandManager
+ commandManager: CommandManager,
+ telemetryReporter: TelemetryReporter
) {
- const doRefactoringCommand = commandManager.register(new ApplyRefactoringCommand(this.client));
+ const doRefactoringCommand = commandManager.register(new ApplyRefactoringCommand(this.client, telemetryReporter));
commandManager.register(new SelectRefactorCommand(doRefactoringCommand));
}
@@ -127,20 +137,21 @@ class TypeScriptRefactorProvider implements vscode.CodeActionProvider {
return undefined;
}
- await this.formattingOptionsManager.ensureConfigurationForDocument(document, undefined);
+ await this.formattingOptionsManager.ensureConfigurationForDocument(document, token);
const args: Proto.GetApplicableRefactorsRequestArgs = typeConverters.Range.toFileRangeRequestArgs(file, rangeOrSelection);
- let response: Proto.GetApplicableRefactorsResponse;
+ let refactorings: Proto.ApplicableRefactorInfo[];
try {
- response = await this.client.execute('getApplicableRefactors', args, token);
- if (!response || !response.body) {
+ const { body } = await this.client.execute('getApplicableRefactors', args, token);
+ if (!body) {
return undefined;
}
+ refactorings = body;
} catch {
return undefined;
}
- return this.convertApplicableRefactors(response.body, document, file, rangeOrSelection);
+ return this.convertApplicableRefactors(refactorings, document, file, rangeOrSelection);
}
private convertApplicableRefactors(
@@ -189,7 +200,7 @@ class TypeScriptRefactorProvider implements vscode.CodeActionProvider {
return false;
}
- return rangeOrSelection instanceof vscode.Selection && (!rangeOrSelection.isEmpty || context.triggerKind === vscode.CodeActionTrigger.Manual);
+ return rangeOrSelection instanceof vscode.Selection && !rangeOrSelection.isEmpty;
}
private static getKind(refactor: Proto.RefactorActionInfo) {
@@ -209,10 +220,11 @@ export function register(
client: ITypeScriptServiceClient,
formattingOptionsManager: FormattingOptionsManager,
commandManager: CommandManager,
+ telemetryReporter: TelemetryReporter,
) {
return new VersionDependentRegistration(client, API.v240, () => {
return vscode.languages.registerCodeActionsProvider(selector,
- new TypeScriptRefactorProvider(client, formattingOptionsManager, commandManager),
+ new TypeScriptRefactorProvider(client, formattingOptionsManager, commandManager, telemetryReporter),
TypeScriptRefactorProvider.metadata);
});
}
diff --git a/extensions/typescript-language-features/src/features/references.ts b/extensions/typescript-language-features/src/features/references.ts
index 4664c1b1ce3..50c62b3b722 100644
--- a/extensions/typescript-language-features/src/features/references.ts
+++ b/extensions/typescript-language-features/src/features/references.ts
@@ -4,10 +4,10 @@
*--------------------------------------------------------------------------------------------*/
import * as vscode from 'vscode';
-
import { ITypeScriptServiceClient } from '../typescriptService';
-import * as typeConverters from '../utils/typeConverters';
import API from '../utils/api';
+import * as typeConverters from '../utils/typeConverters';
+
class TypeScriptReferenceSupport implements vscode.ReferenceProvider {
public constructor(
@@ -26,13 +26,13 @@ class TypeScriptReferenceSupport implements vscode.ReferenceProvider {
const args = typeConverters.Position.toFileLocationRequestArgs(filepath, position);
try {
- const msg = await this.client.execute('references', args, token);
- if (!msg.body) {
+ const { body } = await this.client.execute('references', args, token);
+ if (!body) {
return [];
}
const result: vscode.Location[] = [];
const has203Features = this.client.apiVersion.gte(API.v203);
- for (const ref of msg.body.refs) {
+ for (const ref of body.refs) {
if (!options.includeDeclaration && has203Features && ref.isDefinition) {
continue;
}
diff --git a/extensions/typescript-language-features/src/features/referencesCodeLens.ts b/extensions/typescript-language-features/src/features/referencesCodeLens.ts
index 059d3e9e16e..ea227ac99c1 100644
--- a/extensions/typescript-language-features/src/features/referencesCodeLens.ts
+++ b/extensions/typescript-language-features/src/features/referencesCodeLens.ts
@@ -10,38 +10,33 @@ import * as PConst from '../protocol.const';
import { ITypeScriptServiceClient } from '../typescriptService';
import API from '../utils/api';
import { ConfigurationDependentRegistration, VersionDependentRegistration } from '../utils/dependentRegistration';
-import * as typeConverters from '../utils/typeConverters';
import { CachedNavTreeResponse, ReferencesCodeLens, TypeScriptBaseCodeLensProvider } from './baseCodeLensProvider';
const localize = nls.loadMessageBundle();
class TypeScriptReferencesCodeLensProvider extends TypeScriptBaseCodeLensProvider {
- public resolveCodeLens(inputCodeLens: vscode.CodeLens, token: vscode.CancellationToken): Promise {
+ public resolveCodeLens(inputCodeLens: vscode.CodeLens, _token: vscode.CancellationToken): Thenable {
const codeLens = inputCodeLens as ReferencesCodeLens;
- const args = typeConverters.Position.toFileLocationRequestArgs(codeLens.file, codeLens.range.start);
- return this.client.execute('references', args, token).then(response => {
- if (!response || !response.body) {
+ return vscode.commands.executeCommand('vscode.executeReferenceProvider', codeLens.document, codeLens.range.start).then((locations: vscode.Location[] | undefined) => {
+ if (!locations) {
throw codeLens;
}
- const locations = response.body.refs
- .map(reference =>
- typeConverters.Location.fromTextSpan(this.client.toResource(reference.file), reference))
- .filter(location =>
- // Exclude original definition from references
- !(location.uri.toString() === codeLens.document.toString() &&
- location.range.start.isEqual(codeLens.range.start)));
+ const referenceLocations = locations.filter(location =>
+ // Exclude original definition from references
+ !(location.uri.toString() === codeLens.document.toString() &&
+ location.range.start.isEqual(codeLens.range.start)));
codeLens.command = {
- title: locations.length === 1
+ title: referenceLocations.length === 1
? localize('oneReferenceLabel', '1 reference')
- : localize('manyReferenceLabel', '{0} references', locations.length),
- command: locations.length ? 'editor.action.showReferences' : '',
- arguments: [codeLens.document, codeLens.range.start, locations]
+ : localize('manyReferenceLabel', '{0} references', referenceLocations.length),
+ command: referenceLocations.length ? 'editor.action.showReferences' : '',
+ arguments: [codeLens.document, codeLens.range.start, referenceLocations]
};
return codeLens;
- }).catch(() => {
+ }).then(undefined, () => {
codeLens.command = {
title: localize('referenceErrorLabel', 'Could not determine references'),
command: ''
diff --git a/extensions/typescript-language-features/src/features/rename.ts b/extensions/typescript-language-features/src/features/rename.ts
index 576f7fa62f0..a8589ad988d 100644
--- a/extensions/typescript-language-features/src/features/rename.ts
+++ b/extensions/typescript-language-features/src/features/rename.ts
@@ -4,11 +4,11 @@
*--------------------------------------------------------------------------------------------*/
import * as vscode from 'vscode';
-
import * as Proto from '../protocol';
import { ITypeScriptServiceClient } from '../typescriptService';
import * as typeConverters from '../utils/typeConverters';
+
class TypeScriptRenameProvider implements vscode.RenameProvider {
public constructor(
private readonly client: ITypeScriptServiceClient
@@ -31,22 +31,22 @@ class TypeScriptRenameProvider implements vscode.RenameProvider {
findInComments: false
};
+ let body: Proto.RenameResponseBody | undefined;
try {
- const response = await this.client.execute('rename', args, token);
- if (!response.body) {
+ body = (await this.client.execute('rename', args, token)).body;
+ if (!body) {
return null;
}
-
- const renameInfo = response.body.info;
- if (!renameInfo.canRename) {
- return Promise.reject(renameInfo.localizedErrorMessage);
- }
-
- return this.toWorkspaceEdit(response.body.locs, newName);
} catch {
// noop
+ return null;
}
- return null;
+
+ const renameInfo = body.info;
+ if (!renameInfo.canRename) {
+ return Promise.reject(renameInfo.localizedErrorMessage);
+ }
+ return this.toWorkspaceEdit(body.locs, newName);
}
private toWorkspaceEdit(
diff --git a/extensions/typescript-language-features/src/features/signatureHelp.ts b/extensions/typescript-language-features/src/features/signatureHelp.ts
index b682e0b0367..d5698187e34 100644
--- a/extensions/typescript-language-features/src/features/signatureHelp.ts
+++ b/extensions/typescript-language-features/src/features/signatureHelp.ts
@@ -20,21 +20,25 @@ class TypeScriptSignatureHelpProvider implements vscode.SignatureHelpProvider {
public async provideSignatureHelp(
document: vscode.TextDocument,
position: vscode.Position,
- token: vscode.CancellationToken
+ token: vscode.CancellationToken,
+ context?: vscode.SignatureHelpContext,
): Promise {
const filepath = this.client.toPath(document.uri);
if (!filepath) {
return undefined;
}
- const args: Proto.SignatureHelpRequestArgs = typeConverters.Position.toFileLocationRequestArgs(filepath, position);
+ const args: Proto.SignatureHelpRequestArgs = {
+ ...typeConverters.Position.toFileLocationRequestArgs(filepath, position),
+ triggerReason: toTsTriggerReason(context!)
+ };
- let info: Proto.SignatureHelpItems | undefined = undefined;
+ let info: Proto.SignatureHelpItems;
try {
- const response = await this.client.execute('signatureHelp', args, token);
- info = response.body;
- if (!info) {
+ const { body } = await this.client.execute('signatureHelp', args, token);
+ if (!body) {
return undefined;
}
+ info = body;
} catch {
return undefined;
}
@@ -71,6 +75,23 @@ class TypeScriptSignatureHelpProvider implements vscode.SignatureHelpProvider {
}
}
+function toTsTriggerReason(context: vscode.SignatureHelpContext): Proto.SignatureHelpTriggerReason {
+ switch (context.triggerReason) {
+ case vscode.SignatureHelpTriggerReason.Retrigger:
+ return { kind: 'retrigger' };
+
+ case vscode.SignatureHelpTriggerReason.TriggerCharacter:
+ if (context.triggerCharacter) {
+ return { kind: 'characterTyped', triggerCharacter: context.triggerCharacter as any };
+ } else {
+ return { kind: 'invoked' };
+ }
+
+ case vscode.SignatureHelpTriggerReason.Invoke:
+ default:
+ return { kind: 'invoked' };
+ }
+}
export function register(
selector: vscode.DocumentSelector,
client: ITypeScriptServiceClient,
diff --git a/extensions/typescript-language-features/src/features/tagClosing.ts b/extensions/typescript-language-features/src/features/tagClosing.ts
new file mode 100644
index 00000000000..ab9843ae7f2
--- /dev/null
+++ b/extensions/typescript-language-features/src/features/tagClosing.ts
@@ -0,0 +1,169 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import * as vscode from 'vscode';
+import * as Proto from '../protocol';
+import { ITypeScriptServiceClient } from '../typescriptService';
+import API from '../utils/api';
+import { ConditionalRegistration, ConfigurationDependentRegistration, VersionDependentRegistration } from '../utils/dependentRegistration';
+import { Disposable } from '../utils/dispose';
+import * as typeConverters from '../utils/typeConverters';
+
+class TagClosing extends Disposable {
+
+ private _disposed = false;
+ private _timeout: NodeJS.Timer | undefined = undefined;
+ private _cancel: vscode.CancellationTokenSource | undefined = undefined;
+
+ constructor(
+ private readonly client: ITypeScriptServiceClient
+ ) {
+ super();
+ vscode.workspace.onDidChangeTextDocument(
+ event => this.onDidChangeTextDocument(event.document, event.contentChanges),
+ null,
+ this._disposables);
+ }
+
+ public dispose() {
+ super.dispose();
+ this._disposed = true;
+
+ if (this._timeout) {
+ clearTimeout(this._timeout);
+ this._timeout = undefined;
+ }
+
+ if (this._cancel) {
+ this._cancel.cancel();
+ this._cancel.dispose();
+ this._cancel = undefined;
+ }
+ }
+
+ private onDidChangeTextDocument(
+ document: vscode.TextDocument,
+ changes: vscode.TextDocumentContentChangeEvent[]
+ ) {
+ const activeDocument = vscode.window.activeTextEditor && vscode.window.activeTextEditor.document;
+ if (document !== activeDocument || changes.length === 0) {
+ return;
+ }
+
+ const filepath = this.client.toPath(document.uri);
+ if (!filepath) {
+ return;
+ }
+
+ if (typeof this._timeout !== 'undefined') {
+ clearTimeout(this._timeout);
+ }
+
+ if (this._cancel) {
+ this._cancel.cancel();
+ this._cancel.dispose();
+ this._cancel = undefined;
+ }
+
+ const lastChange = changes[changes.length - 1];
+ const lastCharacter = lastChange.text[lastChange.text.length - 1];
+ if (lastChange.rangeLength > 0 || lastCharacter !== '>' && lastCharacter !== '/') {
+ return;
+ }
+
+ const priorCharacter = lastChange.range.start.character > 0
+ ? document.getText(new vscode.Range(lastChange.range.start.translate({ characterDelta: -1 }), lastChange.range.start))
+ : '';
+ if (priorCharacter === '>') {
+ return;
+ }
+
+ const rangeStart = lastChange.range.start;
+ const version = document.version;
+ this._timeout = setTimeout(async () => {
+ this._timeout = undefined;
+
+ if (this._disposed) {
+ return;
+ }
+
+ let position = new vscode.Position(rangeStart.line, rangeStart.character + lastChange.text.length);
+ let insertion: Proto.TextInsertion;
+ const args: Proto.JsxClosingTagRequestArgs = typeConverters.Position.toFileLocationRequestArgs(filepath, position);
+
+ this._cancel = new vscode.CancellationTokenSource();
+ try {
+ const { body } = await this.client.execute('jsxClosingTag', args, this._cancel.token);
+ if (!body) {
+ return;
+ }
+ insertion = body;
+ } catch {
+ return;
+ }
+
+ if (this._disposed) {
+ return;
+ }
+
+ const activeEditor = vscode.window.activeTextEditor;
+ if (!activeEditor) {
+ return;
+ }
+
+ const activeDocument = activeEditor.document;
+ if (document === activeDocument && activeDocument.version === version) {
+ activeEditor.insertSnippet(
+ this.getTagSnippet(insertion),
+ this.getInsertionPositions(activeEditor, position));
+ }
+ }, 100);
+ }
+
+ private getTagSnippet(closingTag: Proto.TextInsertion): vscode.SnippetString {
+ const snippet = new vscode.SnippetString();
+ snippet.appendPlaceholder('', 0);
+ snippet.appendText(closingTag.newText);
+ return snippet;
+ }
+
+ private getInsertionPositions(editor: vscode.TextEditor, position: vscode.Position) {
+ const activeSelectionPositions = editor.selections.map(s => s.active);
+ return activeSelectionPositions.some(p => p.isEqual(position))
+ ? activeSelectionPositions
+ : position;
+ }
+}
+
+export class ActiveDocumentDependentRegistration extends Disposable {
+ private readonly _registration: ConditionalRegistration;
+
+ constructor(
+ private readonly selector: vscode.DocumentSelector,
+ register: () => vscode.Disposable,
+ ) {
+ super();
+ this._registration = this._register(new ConditionalRegistration(register));
+ vscode.window.onDidChangeActiveTextEditor(this.update, this, this._disposables);
+ this.update();
+ }
+
+ private update() {
+ const editor = vscode.window.activeTextEditor;
+ const enabled = !!(editor && vscode.languages.match(this.selector, editor.document));
+ this._registration.update(enabled);
+ }
+}
+
+export function register(
+ selector: vscode.DocumentSelector,
+ modeId: string,
+ client: ITypeScriptServiceClient,
+) {
+ return new VersionDependentRegistration(client, API.v300, () =>
+ new ConfigurationDependentRegistration(modeId, 'autoClosingTags', () =>
+ new ActiveDocumentDependentRegistration(selector, () =>
+ new TagClosing(client))));
+}
diff --git a/extensions/typescript-language-features/src/features/task.ts b/extensions/typescript-language-features/src/features/task.ts
index c0d7fb00511..e819a1c092b 100644
--- a/extensions/typescript-language-features/src/features/task.ts
+++ b/extensions/typescript-language-features/src/features/task.ts
@@ -8,14 +8,14 @@
import * as fs from 'fs';
import * as path from 'path';
import * as vscode from 'vscode';
-
+import * as nls from 'vscode-nls';
import * as Proto from '../protocol';
import { ITypeScriptServiceClient } from '../typescriptService';
-import TsConfigProvider, { TSConfig } from '../utils/tsconfigProvider';
-import { isImplicitProjectConfigFile } from '../utils/tsconfig';
-
-import * as nls from 'vscode-nls';
import { Lazy } from '../utils/lazy';
+import { isImplicitProjectConfigFile } from '../utils/tsconfig';
+import TsConfigProvider, { TSConfig } from '../utils/tsconfigProvider';
+
+
const localize = nls.loadMessageBundle();
type AutoDetect = 'on' | 'off' | 'build' | 'watch';
@@ -78,7 +78,10 @@ class TscTaskProvider implements vscode.TaskProvider {
private async getAllTsConfigs(token: vscode.CancellationToken): Promise {
const out = new Set();
- const configs = (await this.getTsConfigForActiveFile(token)).concat(await this.getTsConfigsInWorkspace());
+ const configs = [
+ ...await this.getTsConfigForActiveFile(token),
+ ...await this.getTsConfigsInWorkspace()
+ ];
for (const config of configs) {
if (await exists(config.path)) {
out.add(config);
diff --git a/extensions/typescript-language-features/src/features/tsconfig.ts b/extensions/typescript-language-features/src/features/tsconfig.ts
new file mode 100644
index 00000000000..a7e89ea1332
--- /dev/null
+++ b/extensions/typescript-language-features/src/features/tsconfig.ts
@@ -0,0 +1,115 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import * as jsonc from 'jsonc-parser';
+import { dirname, join, basename } from 'path';
+import * as vscode from 'vscode';
+import { flatten } from '../utils/arrays';
+
+function mapChildren(node: jsonc.Node | undefined, f: (x: jsonc.Node) => R): R[] {
+ return node && node.type === 'array' && node.children
+ ? node.children.map(f)
+ : [];
+}
+
+class TsconfigLinkProvider implements vscode.DocumentLinkProvider {
+
+ public provideDocumentLinks(
+ document: vscode.TextDocument,
+ _token: vscode.CancellationToken
+ ): vscode.ProviderResult {
+ const root = jsonc.parseTree(document.getText());
+ if (!root) {
+ return null;
+ }
+
+ return [
+ this.getExendsLink(document, root),
+ ...this.getFilesLinks(document, root),
+ ...this.getReferencesLinks(document, root)
+ ].filter(x => !!x) as vscode.DocumentLink[];
+ }
+
+ private getExendsLink(document: vscode.TextDocument, root: jsonc.Node): vscode.DocumentLink | undefined {
+ const extendsNode = jsonc.findNodeAtLocation(root, ['extends']);
+ if (!this.isPathValue(extendsNode)) {
+ return undefined;
+ }
+
+ return new vscode.DocumentLink(
+ this.getRange(document, extendsNode),
+ basename(extendsNode.value).match('.json$')
+ ? this.getFileTarget(document, extendsNode)
+ : vscode.Uri.file(join(dirname(document.uri.fsPath), extendsNode!.value + '.json')));
+ }
+
+ private getFilesLinks(document: vscode.TextDocument, root: jsonc.Node) {
+ return mapChildren(
+ jsonc.findNodeAtLocation(root, ['files']),
+ child => this.pathNodeToLink(document, child));
+ }
+
+ private getReferencesLinks(document: vscode.TextDocument, root: jsonc.Node) {
+ return mapChildren(
+ jsonc.findNodeAtLocation(root, ['references']),
+ child => {
+ const pathNode = jsonc.findNodeAtLocation(child, ['path']);
+ if (!this.isPathValue(pathNode)) {
+ return undefined;
+ }
+
+ return new vscode.DocumentLink(this.getRange(document, pathNode),
+ basename(pathNode.value).match('.json$')
+ ? this.getFileTarget(document, pathNode)
+ : this.getFolderTarget(document, pathNode));
+ });
+ }
+
+ private pathNodeToLink(
+ document: vscode.TextDocument,
+ node: jsonc.Node | undefined
+ ): vscode.DocumentLink | undefined {
+ return this.isPathValue(node)
+ ? new vscode.DocumentLink(this.getRange(document, node), this.getFileTarget(document, node))
+ : undefined;
+ }
+
+ private isPathValue(extendsNode: jsonc.Node | undefined): extendsNode is jsonc.Node {
+ return extendsNode
+ && extendsNode.type === 'string'
+ && extendsNode.value
+ && !(extendsNode.value as string).includes('*'); // don't treat globs as links.
+ }
+
+ private getFileTarget(document: vscode.TextDocument, node: jsonc.Node): vscode.Uri {
+ return vscode.Uri.file(join(dirname(document.uri.fsPath), node!.value));
+ }
+
+ private getFolderTarget(document: vscode.TextDocument, node: jsonc.Node): vscode.Uri {
+ return vscode.Uri.file(join(dirname(document.uri.fsPath), node!.value, 'tsconfig.json'));
+ }
+
+ private getRange(document: vscode.TextDocument, node: jsonc.Node) {
+ const offset = node!.offset;
+ const start = document.positionAt(offset + 1);
+ const end = document.positionAt(offset + (node!.length - 1));
+ return new vscode.Range(start, end);
+ }
+}
+
+export function register() {
+ const patterns: vscode.GlobPattern[] = [
+ '**/[jt]sconfig.json',
+ '**/[jt]sconfig.*.json',
+ ];
+
+ const languages = ['json', 'jsonc'];
+
+ const selector: vscode.DocumentSelector = flatten(
+ languages.map(language =>
+ patterns.map((pattern): vscode.DocumentFilter => ({ language, pattern }))));
+
+ return vscode.languages.registerDocumentLinkProvider(selector, new TsconfigLinkProvider());
+}
diff --git a/extensions/typescript-language-features/src/features/typeDefinitions.ts b/extensions/typescript-language-features/src/features/typeDefinitions.ts
index 9ec9b48222e..45d89aeaedd 100644
--- a/extensions/typescript-language-features/src/features/typeDefinitions.ts
+++ b/extensions/typescript-language-features/src/features/typeDefinitions.ts
@@ -5,12 +5,12 @@
import * as vscode from 'vscode';
import { ITypeScriptServiceClient } from '../typescriptService';
+import API from '../utils/api';
import { VersionDependentRegistration } from '../utils/dependentRegistration';
import DefinitionProviderBase from './definitionProviderBase';
-import API from '../utils/api';
export default class TypeScriptTypeDefinitionProvider extends DefinitionProviderBase implements vscode.TypeDefinitionProvider {
- public provideTypeDefinition(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken | boolean): Promise {
+ public provideTypeDefinition(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): Promise {
return this.getSymbolLocations('typeDefinition', document, position, token);
}
}
diff --git a/extensions/typescript-language-features/src/features/updatePathsOnRename.ts b/extensions/typescript-language-features/src/features/updatePathsOnRename.ts
index e0662805aa6..3d266ef00ec 100644
--- a/extensions/typescript-language-features/src/features/updatePathsOnRename.ts
+++ b/extensions/typescript-language-features/src/features/updatePathsOnRename.ts
@@ -3,15 +3,20 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
+import * as fs from 'fs';
import * as path from 'path';
import * as vscode from 'vscode';
import * as nls from 'vscode-nls';
import * as Proto from '../protocol';
import { ITypeScriptServiceClient } from '../typescriptService';
import API from '../utils/api';
-import * as languageIds from '../utils/languageModeIds';
+import * as fileSchemes from '../utils/fileSchemes';
+import { isTypeScriptDocument } from '../utils/languageModeIds';
+import { escapeRegExp } from '../utils/regexp';
import * as typeConverters from '../utils/typeConverters';
import FileConfigurationManager from './fileConfigurationManager';
+import { VersionDependentRegistration } from '../utils/dependentRegistration';
+import { nulToken } from '../utils/cancellation';
const localize = nls.loadMessageBundle();
@@ -23,16 +28,16 @@ enum UpdateImportsOnFileMoveSetting {
Never = 'never',
}
-export class UpdateImportsOnFileRenameHandler {
+class UpdateImportsOnFileRenameHandler {
private readonly _onDidRenameSub: vscode.Disposable;
public constructor(
private readonly client: ITypeScriptServiceClient,
private readonly fileConfigurationManager: FileConfigurationManager,
- private readonly handles: (uri: vscode.Uri) => Promise,
+ private readonly _handles: (uri: vscode.Uri) => Promise,
) {
- this._onDidRenameSub = vscode.workspace.onDidRenameResource(e => {
- this.doRename(e.oldResource, e.newResource);
+ this._onDidRenameSub = vscode.workspace.onDidRenameFile(e => {
+ this.doRename(e.oldUri, e.newUri);
});
}
@@ -44,11 +49,13 @@ export class UpdateImportsOnFileRenameHandler {
oldResource: vscode.Uri,
newResource: vscode.Uri,
): Promise {
- if (!this.client.apiVersion.gte(API.v290)) {
+ const targetResource = await this.getTargetResource(newResource);
+ if (!targetResource) {
return;
}
- if (!await this.handles(newResource)) {
+ const targetFile = this.client.toPath(targetResource);
+ if (!targetFile) {
return;
}
@@ -62,7 +69,7 @@ export class UpdateImportsOnFileRenameHandler {
return;
}
- const document = await vscode.workspace.openTextDocument(newResource);
+ const document = await vscode.workspace.openTextDocument(targetResource);
const config = this.getConfiguration(document);
const setting = config.get(updateImportsOnFileMoveName);
@@ -71,20 +78,37 @@ export class UpdateImportsOnFileRenameHandler {
}
// Make sure TS knows about file
- this.client.bufferSyncSupport.closeResource(oldResource);
+ this.client.bufferSyncSupport.closeResource(targetResource);
this.client.bufferSyncSupport.openTextDocument(document);
- const edits = await this.getEditsForFileRename(document, oldFile, newFile);
+ if (!this.client.apiVersion.gte(API.v300) && !fs.lstatSync(newResource.fsPath).isDirectory()) {
+ // Workaround for https://github.com/Microsoft/vscode/issues/52967
+ // Never attempt to update import paths if the file does not contain something the looks like an export
+ try {
+ const { body } = await this.client.execute('navtree', { file: newFile }, nulToken);
+ const hasExport = (node: Proto.NavigationTree): boolean => {
+ return !!node.kindModifiers.match(/\bexports?\b/g) || !!(node.childItems && node.childItems.some(hasExport));
+ };
+ if (!body || !hasExport(body)) {
+ return;
+ }
+ } catch {
+ // noop
+ }
+ }
+
+ const edits = await this.getEditsForFileRename(targetFile, document, oldFile, newFile);
if (!edits || !edits.size) {
return;
}
- if (await this.confirmActionWithUser(document)) {
+ if (await this.confirmActionWithUser(newResource, document)) {
await vscode.workspace.applyEdit(edits);
}
}
private async confirmActionWithUser(
+ newResource: vscode.Uri,
newDocument: vscode.TextDocument
): Promise {
const config = this.getConfiguration(newDocument);
@@ -96,7 +120,7 @@ export class UpdateImportsOnFileRenameHandler {
return false;
case UpdateImportsOnFileMoveSetting.Prompt:
default:
- return this.promptUser(newDocument);
+ return this.promptUser(newResource, newDocument);
}
}
@@ -105,6 +129,7 @@ export class UpdateImportsOnFileRenameHandler {
}
private async promptUser(
+ newResource: vscode.Uri,
newDocument: vscode.TextDocument
): Promise {
enum Choice {
@@ -120,7 +145,7 @@ export class UpdateImportsOnFileRenameHandler {
}
const response = await vscode.window.showInformationMessage- (
- localize('prompt', "Automatically update imports for moved file: '{0}'?", path.basename(newDocument.fileName)), {
+ localize('prompt', "Automatically update imports for moved file: '{0}'?", path.basename(newResource.fsPath)), {
modal: true,
},
{
@@ -177,27 +202,113 @@ export class UpdateImportsOnFileRenameHandler {
return false;
}
+ private async getTargetResource(resource: vscode.Uri): Promise {
+ if (resource.scheme !== fileSchemes.file) {
+ return undefined;
+ }
+
+ const isDirectory = fs.lstatSync(resource.fsPath).isDirectory();
+ if (isDirectory && this.client.apiVersion.gte(API.v300)) {
+ return resource;
+ }
+
+ if (isDirectory && this.client.apiVersion.gte(API.v292)) {
+ const files = await vscode.workspace.findFiles({
+ base: resource.fsPath,
+ pattern: '**/*.{ts,tsx,js,jsx}',
+ }, '**/node_modules/**', 1);
+ return files[0];
+ }
+
+ return (await this._handles(resource)) ? resource : undefined;
+ }
+
private async getEditsForFileRename(
+ targetResource: string,
document: vscode.TextDocument,
oldFile: string,
newFile: string,
) {
- await this.fileConfigurationManager.ensureConfigurationForDocument(document, undefined);
+ const isDirectoryRename = fs.lstatSync(newFile).isDirectory();
+ await this.fileConfigurationManager.setGlobalConfigurationFromDocument(document, nulToken);
- const args: Proto.GetEditsForFileRenameRequestArgs = {
- file: newFile,
+ const args: Proto.GetEditsForFileRenameRequestArgs & { file: string } = {
+ file: targetResource,
oldFilePath: oldFile,
newFilePath: newFile,
};
- const response = await this.client.execute('getEditsForFileRename', args);
+ const response = await this.client.execute('getEditsForFileRename', args, nulToken);
if (!response || !response.body) {
return;
}
- return typeConverters.WorkspaceEdit.fromFromFileCodeEdits(this.client, response.body);
+ const edits: Proto.FileCodeEdits[] = [];
+ for (const edit of response.body) {
+ // Workaround for https://github.com/Microsoft/vscode/issues/52675
+ if (!this.client.apiVersion.gte(API.v300)) {
+ if ((edit as Proto.FileCodeEdits).fileName.match(/[\/\\]node_modules[\/\\]/gi)) {
+ continue;
+ }
+ for (const change of (edit as Proto.FileCodeEdits).textChanges) {
+ if (change.newText.match(/\/node_modules\//gi)) {
+ continue;
+ }
+ }
+ }
+
+ edits.push(await this.fixEdit(edit, isDirectoryRename, oldFile, newFile));
+ }
+ return typeConverters.WorkspaceEdit.fromFileCodeEdits(this.client, edits);
+ }
+
+ private async fixEdit(
+ edit: Proto.FileCodeEdits,
+ isDirectoryRename: boolean,
+ oldFile: string,
+ newFile: string,
+ ): Promise {
+ if (!isDirectoryRename || this.client.apiVersion.gte(API.v300)) {
+ return edit;
+ }
+
+ const document = await vscode.workspace.openTextDocument(edit.fileName);
+ const oldFileRe = new RegExp('/' + escapeRegExp(path.basename(oldFile)) + '/');
+
+ // Workaround for https://github.com/Microsoft/TypeScript/issues/24968
+ const textChanges = edit.textChanges.map((change): Proto.CodeEdit => {
+ const existingText = document.getText(typeConverters.Range.fromTextSpan(change));
+ const existingMatch = existingText.match(oldFileRe);
+ if (!existingMatch) {
+ return change;
+ }
+
+ const match = new RegExp('/' + escapeRegExp(path.basename(newFile)) + '/(.+)$', 'g').exec(change.newText);
+ if (!match) {
+ return change;
+ }
+
+ return {
+ newText: change.newText.slice(0, -match[1].length),
+ start: change.start,
+ end: {
+ line: change.end.line,
+ offset: change.end.offset - match[1].length
+ }
+ };
+ });
+
+ return {
+ fileName: edit.fileName,
+ textChanges
+ };
}
}
-function isTypeScriptDocument(document: vscode.TextDocument) {
- return document.languageId === languageIds.typescript || document.languageId === languageIds.typescriptreact;
-}
+export function register(
+ client: ITypeScriptServiceClient,
+ fileConfigurationManager: FileConfigurationManager,
+ handles: (uri: vscode.Uri) => Promise,
+) {
+ return new VersionDependentRegistration(client, API.v290, () =>
+ new UpdateImportsOnFileRenameHandler(client, fileConfigurationManager, handles));
+}
\ No newline at end of file
diff --git a/extensions/typescript-language-features/src/features/workspaceSymbols.ts b/extensions/typescript-language-features/src/features/workspaceSymbols.ts
index 5d987b85133..4d06850baa0 100644
--- a/extensions/typescript-language-features/src/features/workspaceSymbols.ts
+++ b/extensions/typescript-language-features/src/features/workspaceSymbols.ts
@@ -44,13 +44,13 @@ class TypeScriptWorkspaceSymbolProvider implements vscode.WorkspaceSymbolProvide
file: filepath,
searchValue: search
};
- const response = await this.client.execute('navto', args, token);
- if (!response.body) {
+ const { body } = await this.client.execute('navto', args, token);
+ if (!body) {
return [];
}
const result: vscode.SymbolInformation[] = [];
- for (const item of response.body) {
+ for (const item of body) {
if (!item.containerName && item.kind === 'alias') {
continue;
}
diff --git a/extensions/typescript-language-features/src/languageProvider.ts b/extensions/typescript-language-features/src/languageProvider.ts
index d98389d62ea..f0cf8759915 100644
--- a/extensions/typescript-language-features/src/languageProvider.ts
+++ b/extensions/typescript-language-features/src/languageProvider.ts
@@ -3,34 +3,25 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
-import * as vscode from 'vscode';
import { basename } from 'path';
-
-import TypeScriptServiceClient from './typescriptServiceClient';
-import TypingsStatus from './utils/typingsStatus';
-import FileConfigurationManager from './features/fileConfigurationManager';
-import { CommandManager } from './utils/commandManager';
-import { DiagnosticsManager, DiagnosticKind } from './features/diagnostics';
-import { LanguageDescription } from './utils/languageDescription';
-import * as fileSchemes from './utils/fileSchemes';
+import * as vscode from 'vscode';
import { CachedNavTreeResponse } from './features/baseCodeLensProvider';
+import { DiagnosticKind } from './features/diagnostics';
+import FileConfigurationManager from './features/fileConfigurationManager';
+import TypeScriptServiceClient from './typescriptServiceClient';
+import { CommandManager } from './utils/commandManager';
+import { Disposable } from './utils/dispose';
+import * as fileSchemes from './utils/fileSchemes';
+import { LanguageDescription } from './utils/languageDescription';
import { memoize } from './utils/memoize';
-import { disposeAll } from './utils/dispose';
import TelemetryReporter from './utils/telemetry';
-import { UpdateImportsOnFileRenameHandler } from './features/updatePathsOnRename';
+import TypingsStatus from './utils/typingsStatus';
+
const validateSetting = 'validate.enable';
const suggestionSetting = 'suggestionActions.enabled';
-export default class LanguageProvider {
- private readonly diagnosticsManager: DiagnosticsManager;
-
- private _validate: boolean = true;
- private _enableSuggestionDiagnostics: boolean = true;
-
- private readonly disposables: vscode.Disposable[] = [];
-
- private readonly renameHandler: UpdateImportsOnFileRenameHandler;
+export default class LanguageProvider extends Disposable {
constructor(
private readonly client: TypeScriptServiceClient,
@@ -40,35 +31,15 @@ export default class LanguageProvider {
private readonly typingsStatus: TypingsStatus,
private readonly fileConfigurationManager: FileConfigurationManager
) {
- this.client.bufferSyncSupport.onDelete(resource => {
- this.diagnosticsManager.delete(resource);
- }, null, this.disposables);
-
- this.diagnosticsManager = new DiagnosticsManager(description.diagnosticOwner);
-
- vscode.workspace.onDidChangeConfiguration(this.configurationChanged, this, this.disposables);
+ super();
+ vscode.workspace.onDidChangeConfiguration(this.configurationChanged, this, this._disposables);
this.configurationChanged();
client.onReady(async () => {
await this.registerProviders();
});
-
- this.renameHandler = new UpdateImportsOnFileRenameHandler(this.client, this.fileConfigurationManager, async uri => {
- try {
- const doc = await vscode.workspace.openTextDocument(uri);
- return this.handles(uri, doc);
- } catch {
- return false;
- }
- });
}
- public dispose(): void {
- disposeAll(this.disposables);
-
- this.diagnosticsManager.dispose();
- this.renameHandler.dispose();
- }
@memoize
private get documentSelector(): vscode.DocumentFilter[] {
@@ -86,26 +57,27 @@ export default class LanguageProvider {
const cachedResponse = new CachedNavTreeResponse();
- this.disposables.push((await import('./features/completions')).register(selector, this.client, this.typingsStatus, this.fileConfigurationManager, this.commandManager));
- this.disposables.push((await import('./features/definitions')).register(selector, this.client));
- this.disposables.push((await import('./features/directiveCommentCompletions')).register(selector, this.client));
- this.disposables.push((await import('./features/documentHighlight')).register(selector, this.client));
- this.disposables.push((await import('./features/documentSymbol')).register(selector, this.client));
- this.disposables.push((await import('./features/folding')).register(selector, this.client));
- this.disposables.push((await import('./features/formatting')).register(selector, this.description.id, this.client, this.fileConfigurationManager));
- this.disposables.push((await import('./features/hover')).register(selector, this.client));
- this.disposables.push((await import('./features/implementations')).register(selector, this.client));
- this.disposables.push((await import('./features/implementationsCodeLens')).register(selector, this.description.id, this.client, cachedResponse));
- this.disposables.push((await import('./features/jsDocCompletions')).register(selector, this.client, this.commandManager));
- this.disposables.push((await import('./features/organizeImports')).register(selector, this.client, this.commandManager, this.fileConfigurationManager));
- this.disposables.push((await import('./features/quickFix')).register(selector, this.client, this.fileConfigurationManager, this.commandManager, this.diagnosticsManager, this.telemetryReporter));
- this.disposables.push((await import('./features/refactor')).register(selector, this.client, this.fileConfigurationManager, this.commandManager));
- this.disposables.push((await import('./features/references')).register(selector, this.client));
- this.disposables.push((await import('./features/referencesCodeLens')).register(selector, this.description.id, this.client, cachedResponse));
- this.disposables.push((await import('./features/rename')).register(selector, this.client));
- this.disposables.push((await import('./features/signatureHelp')).register(selector, this.client));
- this.disposables.push((await import('./features/typeDefinitions')).register(selector, this.client));
- this.disposables.push((await import('./features/workspaceSymbols')).register(this.client, this.description.modeIds));
+ this._register((await import('./features/completions')).register(selector, this.description.id, this.client, this.typingsStatus, this.fileConfigurationManager, this.commandManager));
+ this._register((await import('./features/definitions')).register(selector, this.client));
+ this._register((await import('./features/directiveCommentCompletions')).register(selector, this.client));
+ this._register((await import('./features/documentHighlight')).register(selector, this.client));
+ this._register((await import('./features/documentSymbol')).register(selector, this.client));
+ this._register((await import('./features/folding')).register(selector, this.client));
+ this._register((await import('./features/formatting')).register(selector, this.description.id, this.client, this.fileConfigurationManager));
+ this._register((await import('./features/hover')).register(selector, this.client));
+ this._register((await import('./features/implementations')).register(selector, this.client));
+ this._register((await import('./features/implementationsCodeLens')).register(selector, this.description.id, this.client, cachedResponse));
+ this._register((await import('./features/jsDocCompletions')).register(selector, this.client));
+ this._register((await import('./features/organizeImports')).register(selector, this.client, this.commandManager, this.fileConfigurationManager, this.telemetryReporter));
+ this._register((await import('./features/quickFix')).register(selector, this.client, this.fileConfigurationManager, this.commandManager, this.client.diagnosticsManager, this.telemetryReporter));
+ this._register((await import('./features/refactor')).register(selector, this.client, this.fileConfigurationManager, this.commandManager, this.telemetryReporter));
+ this._register((await import('./features/references')).register(selector, this.client));
+ this._register((await import('./features/referencesCodeLens')).register(selector, this.description.id, this.client, cachedResponse));
+ this._register((await import('./features/rename')).register(selector, this.client));
+ this._register((await import('./features/signatureHelp')).register(selector, this.client));
+ this._register((await import('./features/tagClosing')).register(selector, this.description.id, this.client));
+ this._register((await import('./features/typeDefinitions')).register(selector, this.client));
+ this._register((await import('./features/workspaceSymbols')).register(this.client, this.description.modeIds));
}
private configurationChanged(): void {
@@ -119,10 +91,6 @@ export default class LanguageProvider {
return true;
}
- if (this.client.bufferSyncSupport.handles(resource)) {
- return true;
- }
-
const base = basename(resource.fsPath);
return !!base && base === this.description.configFile;
}
@@ -136,30 +104,15 @@ export default class LanguageProvider {
}
private updateValidate(value: boolean) {
- if (this._validate === value) {
- return;
- }
- this._validate = value;
- this.diagnosticsManager.validate = value;
- if (value) {
- this.triggerAllDiagnostics();
- }
+ this.client.diagnosticsManager.setValidate(this._diagnosticLanguage, value);
}
private updateSuggestionDiagnostics(value: boolean) {
- if (this._enableSuggestionDiagnostics === value) {
- return;
- }
-
- this._enableSuggestionDiagnostics = value;
- this.diagnosticsManager.enableSuggestions = value;
- if (value) {
- this.triggerAllDiagnostics();
- }
+ this.client.diagnosticsManager.setEnableSuggestions(this._diagnosticLanguage, value);
}
public reInitialize(): void {
- this.diagnosticsManager.reInitialize();
+ this.client.diagnosticsManager.reInitialize();
}
public triggerAllDiagnostics(): void {
@@ -169,9 +122,9 @@ export default class LanguageProvider {
public diagnosticsReceived(diagnosticsKind: DiagnosticKind, file: vscode.Uri, diagnostics: (vscode.Diagnostic & { reportUnnecessary: any })[]): void {
const config = vscode.workspace.getConfiguration(this.id, file);
const reportUnnecessary = config.get('showUnused', true);
- this.diagnosticsManager.diagnosticsReceived(diagnosticsKind, file, diagnostics.filter(diag => {
+ this.client.diagnosticsManager.updateDiagnostics(file, this._diagnosticLanguage, diagnosticsKind, diagnostics.filter(diag => {
if (!reportUnnecessary) {
- diag.customTags = undefined;
+ diag.tags = undefined;
if (diag.reportUnnecessary && diag.severity === vscode.DiagnosticSeverity.Hint) {
return false;
}
@@ -181,6 +134,10 @@ export default class LanguageProvider {
}
public configFileDiagnosticsReceived(file: vscode.Uri, diagnostics: vscode.Diagnostic[]): void {
- this.diagnosticsManager.configFileDiagnosticsReceived(file, diagnostics);
+ this.client.diagnosticsManager.configFileDiagnosticsReceived(file, diagnostics);
+ }
+
+ private get _diagnosticLanguage() {
+ return this.description.diagnosticLanguage;
}
}
\ No newline at end of file
diff --git a/extensions/typescript-language-features/src/protocol.const.ts b/extensions/typescript-language-features/src/protocol.const.ts
index 735e2aac259..c03c1ca9076 100644
--- a/extensions/typescript-language-features/src/protocol.const.ts
+++ b/extensions/typescript-language-features/src/protocol.const.ts
@@ -13,7 +13,6 @@ export class Kind {
public static readonly directory = 'directory';
public static readonly enum = 'enum';
public static readonly externalModuleName = 'external module name';
- public static readonly file = 'file';
public static readonly function = 'function';
public static readonly indexSignature = 'index';
public static readonly interface = 'interface';
diff --git a/extensions/typescript-language-features/src/protocol.d.ts b/extensions/typescript-language-features/src/protocol.d.ts
index 0015b80d927..6e926eb8d7e 100644
--- a/extensions/typescript-language-features/src/protocol.d.ts
+++ b/extensions/typescript-language-features/src/protocol.d.ts
@@ -1,2 +1,2 @@
import * as Proto from 'typescript/lib/protocol';
-export = Proto;
\ No newline at end of file
+export = Proto;
diff --git a/extensions/typescript-language-features/src/test/previewer.test.ts b/extensions/typescript-language-features/src/test/previewer.test.ts
new file mode 100644
index 00000000000..011187b2af4
--- /dev/null
+++ b/extensions/typescript-language-features/src/test/previewer.test.ts
@@ -0,0 +1,22 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import * as assert from 'assert';
+import 'mocha';
+import { tagsMarkdownPreview } from '../utils/previewer';
+
+suite('typescript.previewer', () => {
+ test('Should ignore hyphens after a param tag', async () => {
+ assert.strictEqual(
+ tagsMarkdownPreview([
+ {
+ name: 'param',
+ text: 'a - b'
+ }
+ ]),
+ '*@param* `a` — b');
+ });
+});
+
diff --git a/extensions/typescript-language-features/src/typeScriptServiceClientHost.ts b/extensions/typescript-language-features/src/typeScriptServiceClientHost.ts
index f0f3610f63f..afff7001672 100644
--- a/extensions/typescript-language-features/src/typeScriptServiceClientHost.ts
+++ b/extensions/typescript-language-features/src/typeScriptServiceClientHost.ts
@@ -8,25 +8,23 @@
* https://github.com/Microsoft/TypeScript-Sublime-Plugin/blob/master/TypeScript%20Indent.tmPreferences
* ------------------------------------------------------------------------------------------ */
-import { workspace, Memento, Diagnostic, Range, Disposable, Uri, DiagnosticSeverity, DiagnosticTag, DiagnosticRelatedInformation } from 'vscode';
-
+import * as vscode from 'vscode';
+import { DiagnosticKind } from './features/diagnostics';
+import FileConfigurationManager from './features/fileConfigurationManager';
+import { register as registerUpdatePathsOnRename } from './features/updatePathsOnRename';
+import LanguageProvider from './languageProvider';
import * as Proto from './protocol';
import * as PConst from './protocol.const';
-
import TypeScriptServiceClient from './typescriptServiceClient';
-import LanguageProvider from './languageProvider';
-
-import TypingsStatus, { AtaProgressReporter } from './utils/typingsStatus';
-import VersionStatus from './utils/versionStatus';
+import API from './utils/api';
+import { CommandManager } from './utils/commandManager';
+import { Disposable } from './utils/dispose';
+import { LanguageDescription, DiagnosticLanguage } from './utils/languageDescription';
+import LogDirectoryProvider from './utils/logDirectoryProvider';
import { TypeScriptServerPlugin } from './utils/plugins';
import * as typeConverters from './utils/typeConverters';
-import { CommandManager } from './utils/commandManager';
-import { LanguageDescription } from './utils/languageDescription';
-import LogDirectoryProvider from './utils/logDirectoryProvider';
-import { disposeAll } from './utils/dispose';
-import { DiagnosticKind } from './features/diagnostics';
-import API from './utils/api';
-import FileConfigurationManager from './features/fileConfigurationManager';
+import TypingsStatus, { AtaProgressReporter } from './utils/typingsStatus';
+import VersionStatus from './utils/versionStatus';
// Style check diagnostics that can be reported as warnings
const styleCheckDiagnostics = [
@@ -38,13 +36,11 @@ const styleCheckDiagnostics = [
7030 // not all code paths return a value
];
-export default class TypeScriptServiceClientHost {
- private readonly ataProgressReporter: AtaProgressReporter;
+export default class TypeScriptServiceClientHost extends Disposable {
private readonly typingsStatus: TypingsStatus;
private readonly client: TypeScriptServiceClient;
private readonly languages: LanguageProvider[] = [];
private readonly languagePerId = new Map();
- private readonly disposables: Disposable[] = [];
private readonly versionStatus: VersionStatus;
private readonly fileConfigurationManager: FileConfigurationManager;
@@ -52,13 +48,14 @@ export default class TypeScriptServiceClientHost {
constructor(
descriptions: LanguageDescription[],
- workspaceState: Memento,
+ workspaceState: vscode.Memento,
plugins: TypeScriptServerPlugin[],
private readonly commandManager: CommandManager,
logDirectoryProvider: LogDirectoryProvider
) {
+ super();
const handleProjectCreateOrDelete = () => {
- this.client.execute('reloadProjects', null, false);
+ this.client.executeWithoutWaitingForResponse('reloadProjects', null);
this.triggerAllDiagnostics();
};
const handleProjectChange = () => {
@@ -66,11 +63,11 @@ export default class TypeScriptServiceClientHost {
this.triggerAllDiagnostics();
}, 1500);
};
- const configFileWatcher = workspace.createFileSystemWatcher('**/[tj]sconfig.json');
- this.disposables.push(configFileWatcher);
- configFileWatcher.onDidCreate(handleProjectCreateOrDelete, this, this.disposables);
- configFileWatcher.onDidDelete(handleProjectCreateOrDelete, this, this.disposables);
- configFileWatcher.onDidChange(handleProjectChange, this, this.disposables);
+ const configFileWatcher = vscode.workspace.createFileSystemWatcher('**/[tj]sconfig.json');
+ this._register(configFileWatcher);
+ configFileWatcher.onDidCreate(handleProjectCreateOrDelete, this, this._disposables);
+ configFileWatcher.onDidDelete(handleProjectCreateOrDelete, this, this._disposables);
+ configFileWatcher.onDidChange(handleProjectChange, this, this._disposables);
const allModeIds = this.getAllModeIds(descriptions);
this.client = new TypeScriptServiceClient(
@@ -79,30 +76,31 @@ export default class TypeScriptServiceClientHost {
plugins,
logDirectoryProvider,
allModeIds);
- this.disposables.push(this.client);
+ this._register(this.client);
this.client.onDiagnosticsReceived(({ kind, resource, diagnostics }) => {
this.diagnosticsReceived(kind, resource, diagnostics);
- }, null, this.disposables);
+ }, null, this._disposables);
- this.client.onConfigDiagnosticsReceived(diag => this.configFileDiagnosticsReceived(diag), null, this.disposables);
- this.client.onResendModelsRequested(() => this.populateService(), null, this.disposables);
+ this.client.onConfigDiagnosticsReceived(diag => this.configFileDiagnosticsReceived(diag), null, this._disposables);
+ this.client.onResendModelsRequested(() => this.populateService(), null, this._disposables);
this.versionStatus = new VersionStatus(resource => this.client.toPath(resource));
- this.disposables.push(this.versionStatus);
-
- this.typingsStatus = new TypingsStatus(this.client);
- this.ataProgressReporter = new AtaProgressReporter(this.client);
- this.fileConfigurationManager = new FileConfigurationManager(this.client);
+ this._register(this.versionStatus);
+ this._register(new AtaProgressReporter(this.client));
+ this.typingsStatus = this._register(new TypingsStatus(this.client));
+ this.fileConfigurationManager = this._register(new FileConfigurationManager(this.client));
for (const description of descriptions) {
const manager = new LanguageProvider(this.client, description, this.commandManager, this.client.telemetryReporter, this.typingsStatus, this.fileConfigurationManager);
this.languages.push(manager);
- this.disposables.push(manager);
+ this._register(manager);
this.languagePerId.set(description.id, manager);
}
+ this._register(registerUpdatePathsOnRename(this.client, this.fileConfigurationManager, uri => this.handles(uri)));
+
this.client.ensureServiceStarted();
this.client.onReady(() => {
if (!this.client.apiVersion.gte(API.v230)) {
@@ -119,13 +117,14 @@ export default class TypeScriptServiceClientHost {
const description: LanguageDescription = {
id: 'typescript-plugins',
modeIds: Array.from(languages.values()),
- diagnosticSource: 'ts-plugins',
+ diagnosticSource: 'ts-plugin',
+ diagnosticLanguage: DiagnosticLanguage.TypeScript,
diagnosticOwner: 'typescript',
isExternal: true
};
const manager = new LanguageProvider(this.client, description, this.commandManager, this.client.telemetryReporter, this.typingsStatus, this.fileConfigurationManager);
this.languages.push(manager);
- this.disposables.push(manager);
+ this._register(manager);
this.languagePerId.set(description.id, manager);
}
});
@@ -134,7 +133,7 @@ export default class TypeScriptServiceClientHost {
this.triggerAllDiagnostics();
});
- workspace.onDidChangeConfiguration(this.configurationChanged, this, this.disposables);
+ vscode.workspace.onDidChangeConfiguration(this.configurationChanged, this, this._disposables);
this.configurationChanged();
}
@@ -146,35 +145,32 @@ export default class TypeScriptServiceClientHost {
return allModeIds;
}
- public dispose(): void {
- disposeAll(this.disposables);
- this.typingsStatus.dispose();
- this.ataProgressReporter.dispose();
- this.fileConfigurationManager.dispose();
- }
-
public get serviceClient(): TypeScriptServiceClient {
return this.client;
}
public reloadProjects(): void {
- this.client.execute('reloadProjects', null, false);
+ this.client.executeWithoutWaitingForResponse('reloadProjects', null);
this.triggerAllDiagnostics();
}
- public handles(resource: Uri): boolean {
- return !!this.findLanguage(resource);
+ public async handles(resource: vscode.Uri): Promise {
+ const provider = await this.findLanguage(resource);
+ if (provider) {
+ return true;
+ }
+ return this.client.bufferSyncSupport.handles(resource);
}
private configurationChanged(): void {
- const typescriptConfig = workspace.getConfiguration('typescript');
+ const typescriptConfig = vscode.workspace.getConfiguration('typescript');
this.reportStyleCheckAsWarnings = typescriptConfig.get('reportStyleChecksAsWarnings', true);
}
- private async findLanguage(resource: Uri): Promise {
+ private async findLanguage(resource: vscode.Uri): Promise {
try {
- const doc = await workspace.openTextDocument(resource);
+ const doc = await vscode.workspace.openTextDocument(resource);
return this.languages.find(language => language.handles(resource, doc));
} catch {
return undefined;
@@ -193,7 +189,7 @@ export default class TypeScriptServiceClientHost {
this.client.bufferSyncSupport.requestAllDiagnostics();
// See https://github.com/Microsoft/TypeScript/issues/5530
- workspace.saveAll(false).then(() => {
+ vscode.workspace.saveAll(false).then(() => {
for (const language of this.languagePerId.values()) {
language.reInitialize();
}
@@ -202,7 +198,7 @@ export default class TypeScriptServiceClientHost {
private async diagnosticsReceived(
kind: DiagnosticKind,
- resource: Uri,
+ resource: vscode.Uri,
diagnostics: Proto.Diagnostic[]
): Promise {
const language = await this.findLanguage(resource);
@@ -228,10 +224,10 @@ export default class TypeScriptServiceClientHost {
if (body.diagnostics.length === 0) {
language.configFileDiagnosticsReceived(this.client.toResource(body.configFile), []);
} else if (body.diagnostics.length >= 1) {
- workspace.openTextDocument(Uri.file(body.configFile)).then((document) => {
+ vscode.workspace.openTextDocument(vscode.Uri.file(body.configFile)).then((document) => {
let curly: [number, number, number] | undefined = undefined;
let nonCurly: [number, number, number] | undefined = undefined;
- let diagnostic: Diagnostic;
+ let diagnostic: vscode.Diagnostic;
for (let index = 0; index < document.lineCount; index++) {
const line = document.lineAt(index);
const text = line.text;
@@ -250,16 +246,16 @@ export default class TypeScriptServiceClientHost {
}
const match = curly || nonCurly;
if (match) {
- diagnostic = new Diagnostic(new Range(match[0], match[1], match[0], match[2]), body.diagnostics[0].text);
+ diagnostic = new vscode.Diagnostic(new vscode.Range(match[0], match[1], match[0], match[2]), body.diagnostics[0].text);
} else {
- diagnostic = new Diagnostic(new Range(0, 0, 0, 0), body.diagnostics[0].text);
+ diagnostic = new vscode.Diagnostic(new vscode.Range(0, 0, 0, 0), body.diagnostics[0].text);
}
if (diagnostic) {
diagnostic.source = language.diagnosticSource;
language.configFileDiagnosticsReceived(this.client.toResource(body.configFile), [diagnostic]);
}
}, _error => {
- language.configFileDiagnosticsReceived(this.client.toResource(body.configFile), [new Diagnostic(new Range(0, 0, 0, 0), body.diagnostics[0].text)]);
+ language.configFileDiagnosticsReceived(this.client.toResource(body.configFile), [new vscode.Diagnostic(new vscode.Range(0, 0, 0, 0), body.diagnostics[0].text)]);
});
}
});
@@ -268,57 +264,56 @@ export default class TypeScriptServiceClientHost {
private createMarkerDatas(
diagnostics: Proto.Diagnostic[],
source: string
- ): (Diagnostic & { reportUnnecessary: any })[] {
+ ): (vscode.Diagnostic & { reportUnnecessary: any })[] {
return diagnostics.map(tsDiag => this.tsDiagnosticToVsDiagnostic(tsDiag, source));
}
- private tsDiagnosticToVsDiagnostic(diagnostic: Proto.Diagnostic, source: string): Diagnostic & { reportUnnecessary: any } {
+ private tsDiagnosticToVsDiagnostic(diagnostic: Proto.Diagnostic, source: string): vscode.Diagnostic & { reportUnnecessary: any } {
const { start, end, text } = diagnostic;
- const range = new Range(typeConverters.Position.fromLocation(start), typeConverters.Position.fromLocation(end));
- const converted = new Diagnostic(range, text);
+ const range = new vscode.Range(typeConverters.Position.fromLocation(start), typeConverters.Position.fromLocation(end));
+ const converted = new vscode.Diagnostic(range, text);
converted.severity = this.getDiagnosticSeverity(diagnostic);
converted.source = diagnostic.source || source;
if (diagnostic.code) {
converted.code = diagnostic.code;
}
- // TODO: requires TS 3.0
- const relatedInformation = (diagnostic as any).relatedInformation;
+ const relatedInformation = diagnostic.relatedInformation;
if (relatedInformation) {
converted.relatedInformation = relatedInformation.map((info: any) => {
let span = info.span;
if (!span) {
return undefined;
}
- return new DiagnosticRelatedInformation(typeConverters.Location.fromTextSpan(this.client.toResource(span.file), span), info.message);
- }).filter((x: any) => !!x) as DiagnosticRelatedInformation[];
+ return new vscode.DiagnosticRelatedInformation(typeConverters.Location.fromTextSpan(this.client.toResource(span.file), span), info.message);
+ }).filter((x: any) => !!x) as vscode.DiagnosticRelatedInformation[];
}
if (diagnostic.reportsUnnecessary) {
- converted.customTags = [DiagnosticTag.Unnecessary];
+ converted.tags = [vscode.DiagnosticTag.Unnecessary];
}
- (converted as Diagnostic & { reportUnnecessary: any }).reportUnnecessary = diagnostic.reportsUnnecessary;
- return converted as Diagnostic & { reportUnnecessary: any };
+ (converted as vscode.Diagnostic & { reportUnnecessary: any }).reportUnnecessary = diagnostic.reportsUnnecessary;
+ return converted as vscode.Diagnostic & { reportUnnecessary: any };
}
- private getDiagnosticSeverity(diagnostic: Proto.Diagnostic): DiagnosticSeverity {
+ private getDiagnosticSeverity(diagnostic: Proto.Diagnostic): vscode.DiagnosticSeverity {
if (this.reportStyleCheckAsWarnings
&& this.isStyleCheckDiagnostic(diagnostic.code)
&& diagnostic.category === PConst.DiagnosticCategory.error
) {
- return DiagnosticSeverity.Warning;
+ return vscode.DiagnosticSeverity.Warning;
}
switch (diagnostic.category) {
case PConst.DiagnosticCategory.error:
- return DiagnosticSeverity.Error;
+ return vscode.DiagnosticSeverity.Error;
case PConst.DiagnosticCategory.warning:
- return DiagnosticSeverity.Warning;
+ return vscode.DiagnosticSeverity.Warning;
case PConst.DiagnosticCategory.suggestion:
- return DiagnosticSeverity.Hint;
+ return vscode.DiagnosticSeverity.Hint;
default:
- return DiagnosticSeverity.Error;
+ return vscode.DiagnosticSeverity.Error;
}
}
diff --git a/extensions/typescript-language-features/src/typescriptService.ts b/extensions/typescript-language-features/src/typescriptService.ts
index ef58af1e635..aff38d6a44c 100644
--- a/extensions/typescript-language-features/src/typescriptService.ts
+++ b/extensions/typescript-language-features/src/typescriptService.ts
@@ -3,13 +3,46 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
-import { CancellationToken, Uri, Event } from 'vscode';
+import * as vscode from 'vscode';
+import BufferSyncSupport from './features/bufferSyncSupport';
import * as Proto from './protocol';
import API from './utils/api';
-import { TypeScriptServerPlugin } from './utils/plugins';
import { TypeScriptServiceConfiguration } from './utils/configuration';
import Logger from './utils/logger';
-import BufferSyncSupport from './features/bufferSyncSupport';
+import { TypeScriptServerPlugin } from './utils/plugins';
+
+interface TypeScriptRequestTypes {
+ 'applyCodeActionCommand': [Proto.ApplyCodeActionCommandRequestArgs, Proto.ApplyCodeActionCommandResponse];
+ 'completionEntryDetails': [Proto.CompletionDetailsRequestArgs, Proto.CompletionDetailsResponse];
+ 'completionInfo': [Proto.CompletionsRequestArgs, Proto.CompletionInfoResponse];
+ 'completions': [Proto.CompletionsRequestArgs, Proto.CompletionsResponse];
+ 'configure': [Proto.ConfigureRequestArguments, Proto.ConfigureResponse];
+ 'definition': [Proto.FileLocationRequestArgs, Proto.DefinitionResponse];
+ 'definitionAndBoundSpan': [Proto.FileLocationRequestArgs, Proto.DefinitionInfoAndBoundSpanReponse];
+ 'docCommentTemplate': [Proto.FileLocationRequestArgs, Proto.DocCommandTemplateResponse];
+ 'format': [Proto.FormatRequestArgs, Proto.FormatResponse];
+ 'formatonkey': [Proto.FormatOnKeyRequestArgs, Proto.FormatResponse];
+ 'getApplicableRefactors': [Proto.GetApplicableRefactorsRequestArgs, Proto.GetApplicableRefactorsResponse];
+ 'getCodeFixes': [Proto.CodeFixRequestArgs, Proto.GetCodeFixesResponse];
+ 'getCombinedCodeFix': [Proto.GetCombinedCodeFixRequestArgs, Proto.GetCombinedCodeFixResponse];
+ 'getEditsForFileRename': [Proto.GetEditsForFileRenameRequestArgs, Proto.GetEditsForFileRenameResponse];
+ 'getEditsForRefactor': [Proto.GetEditsForRefactorRequestArgs, Proto.GetEditsForRefactorResponse];
+ 'getOutliningSpans': [Proto.FileRequestArgs, Proto.OutliningSpansResponse];
+ 'getSupportedCodeFixes': [null, Proto.GetSupportedCodeFixesResponse];
+ 'implementation': [Proto.FileLocationRequestArgs, Proto.ImplementationResponse];
+ 'jsxClosingTag': [Proto.JsxClosingTagRequestArgs, Proto.JsxClosingTagResponse];
+ 'navto': [Proto.NavtoRequestArgs, Proto.NavtoResponse];
+ 'navtree': [Proto.FileRequestArgs, Proto.NavTreeResponse];
+ 'occurrences': [Proto.FileLocationRequestArgs, Proto.OccurrencesResponse];
+ 'organizeImports': [Proto.OrganizeImportsRequestArgs, Proto.OrganizeImportsResponse];
+ 'projectInfo': [Proto.ProjectInfoRequestArgs, Proto.ProjectInfoResponse];
+ 'quickinfo': [Proto.FileLocationRequestArgs, Proto.QuickInfoResponse];
+ 'references': [Proto.FileLocationRequestArgs, Proto.ReferencesResponse];
+ 'rename': [Proto.RenameRequestArgs, Proto.RenameResponse];
+ 'signatureHelp': [Proto.SignatureHelpRequestArgs, Proto.SignatureHelpResponse];
+ 'typeDefinition': [Proto.FileLocationRequestArgs, Proto.TypeDefinitionResponse];
+}
+
export interface ITypeScriptServiceClient {
/**
@@ -17,27 +50,27 @@ export interface ITypeScriptServiceClient {
*
* Does not try handling case insensitivity.
*/
- normalizedPath(resource: Uri): string | null;
+ normalizedPath(resource: vscode.Uri): string | null;
/**
* Map a resource to a normalized path
*
* This will attempt to handle case insensitivity.
*/
- toPath(resource: Uri): string | null;
+ toPath(resource: vscode.Uri): string | null;
/**
* Convert a path to a resource.
*/
- toResource(filepath: string): Uri;
+ toResource(filepath: string): vscode.Uri;
- getWorkspaceRootForResource(resource: Uri): string | undefined;
+ getWorkspaceRootForResource(resource: vscode.Uri): string | undefined;
- readonly onTsServerStarted: Event;
- readonly onProjectLanguageServiceStateChanged: Event;
- readonly onDidBeginInstallTypings: Event;
- readonly onDidEndInstallTypings: Event;
- readonly onTypesInstallerInitializationFailed: Event;
+ readonly onTsServerStarted: vscode.Event;
+ readonly onProjectLanguageServiceStateChanged: vscode.Event;
+ readonly onDidBeginInstallTypings: vscode.Event;
+ readonly onDidEndInstallTypings: vscode.Event;
+ readonly onTypesInstallerInitializationFailed: vscode.Event;
readonly apiVersion: API;
readonly plugins: TypeScriptServerPlugin[];
@@ -45,40 +78,22 @@ export interface ITypeScriptServiceClient {
readonly logger: Logger;
readonly bufferSyncSupport: BufferSyncSupport;
- execute(command: 'configure', args: Proto.ConfigureRequestArguments, token?: CancellationToken): Promise;
- execute(command: 'open', args: Proto.OpenRequestArgs, expectedResult: boolean, token?: CancellationToken): Promise;
- execute(command: 'close', args: Proto.FileRequestArgs, expectedResult: boolean, token?: CancellationToken): Promise;
- execute(command: 'change', args: Proto.ChangeRequestArgs, expectedResult: boolean, token?: CancellationToken): Promise;
- execute(command: 'quickinfo', args: Proto.FileLocationRequestArgs, token?: CancellationToken): Promise;
- execute(command: 'completions', args: Proto.CompletionsRequestArgs, token?: CancellationToken): Promise;
- execute(command: 'completionEntryDetails', args: Proto.CompletionDetailsRequestArgs, token?: CancellationToken): Promise;
- execute(command: 'signatureHelp', args: Proto.SignatureHelpRequestArgs, token?: CancellationToken): Promise;
- execute(command: 'definition', args: Proto.FileLocationRequestArgs, token?: CancellationToken): Promise;
- execute(command: 'implementation', args: Proto.FileLocationRequestArgs, token?: CancellationToken): Promise;
- execute(command: 'typeDefinition', args: Proto.FileLocationRequestArgs, token?: CancellationToken): Promise;
- execute(command: 'references', args: Proto.FileLocationRequestArgs, token?: CancellationToken): Promise;
- execute(command: 'navto', args: Proto.NavtoRequestArgs, token?: CancellationToken): Promise;
- execute(command: 'navbar', args: Proto.FileRequestArgs, token?: CancellationToken): Promise;
- execute(command: 'format', args: Proto.FormatRequestArgs, token?: CancellationToken): Promise;
- execute(command: 'formatonkey', args: Proto.FormatOnKeyRequestArgs, token?: CancellationToken): Promise;
- execute(command: 'rename', args: Proto.RenameRequestArgs, token?: CancellationToken): Promise;
- execute(command: 'occurrences', args: Proto.FileLocationRequestArgs, token?: CancellationToken): Promise;
- execute(command: 'projectInfo', args: Proto.ProjectInfoRequestArgs, token?: CancellationToken): Promise;
- execute(command: 'reloadProjects', args: any, expectedResult: boolean, token?: CancellationToken): Promise;
- execute(command: 'reload', args: Proto.ReloadRequestArgs, expectedResult: boolean, token?: CancellationToken): Promise;
- execute(command: 'compilerOptionsForInferredProjects', args: Proto.SetCompilerOptionsForInferredProjectsArgs, token?: CancellationToken): Promise;
- execute(command: 'navtree', args: Proto.FileRequestArgs, token?: CancellationToken): Promise;
- execute(command: 'getCodeFixes', args: Proto.CodeFixRequestArgs, token?: CancellationToken): Promise;
- execute(command: 'getSupportedCodeFixes', args: null, token?: CancellationToken): Promise;
- execute(command: 'getCombinedCodeFix', args: Proto.GetCombinedCodeFixRequestArgs, token?: CancellationToken): Promise;
- execute(command: 'docCommentTemplate', args: Proto.FileLocationRequestArgs, token?: CancellationToken): Promise;
- execute(command: 'getApplicableRefactors', args: Proto.GetApplicableRefactorsRequestArgs, token?: CancellationToken): Promise;
- execute(command: 'getEditsForRefactor', args: Proto.GetEditsForRefactorRequestArgs, token?: CancellationToken): Promise;
- execute(command: 'applyCodeActionCommand', args: Proto.ApplyCodeActionCommandRequestArgs, token?: CancellationToken): Promise;
- execute(command: 'organizeImports', args: Proto.OrganizeImportsRequestArgs, token?: CancellationToken): Promise;
- execute(command: 'getOutliningSpans', args: Proto.FileRequestArgs, token: CancellationToken): Promise;
- execute(command: 'getEditsForFileRename', args: Proto.GetEditsForFileRenameRequestArgs): Promise;
- execute(command: string, args: any, expectedResult: boolean | CancellationToken, token?: CancellationToken): Promise;
+ execute(
+ command: K,
+ args: TypeScriptRequestTypes[K][0],
+ token: vscode.CancellationToken
+ ): Promise;
- executeAsync(command: 'geterr', args: Proto.GeterrRequestArgs, token: CancellationToken): Promise;
+ executeWithoutWaitingForResponse(command: 'open', args: Proto.OpenRequestArgs): void;
+ executeWithoutWaitingForResponse(command: 'close', args: Proto.FileRequestArgs): void;
+ executeWithoutWaitingForResponse(command: 'change', args: Proto.ChangeRequestArgs): void;
+ executeWithoutWaitingForResponse(command: 'compilerOptionsForInferredProjects', args: Proto.SetCompilerOptionsForInferredProjectsArgs): void;
+ executeWithoutWaitingForResponse(command: 'reloadProjects', args: null): void;
+
+ executeAsync(command: 'geterr', args: Proto.GeterrRequestArgs, token: vscode.CancellationToken): Promise;
+
+ /**
+ * Cancel on going geterr requests and re-queue them after `f` has been evaluated.
+ */
+ interuptGetErr(f: () => R): R;
}
\ No newline at end of file
diff --git a/extensions/typescript-language-features/src/typescriptServiceClient.ts b/extensions/typescript-language-features/src/typescriptServiceClient.ts
index e152f0f6ca9..04bee73f6de 100644
--- a/extensions/typescript-language-features/src/typescriptServiceClient.ts
+++ b/extensions/typescript-language-features/src/typescriptServiceClient.ts
@@ -4,34 +4,31 @@
*--------------------------------------------------------------------------------------------*/
import * as cp from 'child_process';
-import * as path from 'path';
import * as fs from 'fs';
-
-import * as electron from './utils/electron';
-import { Reader, ICallback } from './utils/wireProtocol';
-
-import { workspace, window, Uri, CancellationToken, Disposable, Memento, MessageItem, EventEmitter, commands, env } from 'vscode';
+import * as path from 'path';
+import * as vscode from 'vscode';
+import * as nls from 'vscode-nls';
+import BufferSyncSupport from './features/bufferSyncSupport';
+import { DiagnosticKind, DiagnosticsManager } from './features/diagnostics';
import * as Proto from './protocol';
import { ITypeScriptServiceClient } from './typescriptService';
-import { TypeScriptServerPlugin } from './utils/plugins';
-import Logger from './utils/logger';
-
+import API from './utils/api';
+import { TsServerLogLevel, TypeScriptServiceConfiguration } from './utils/configuration';
+import { Disposable } from './utils/dispose';
+import * as electron from './utils/electron';
+import * as fileSchemes from './utils/fileSchemes';
import * as is from './utils/is';
+import LogDirectoryProvider from './utils/logDirectoryProvider';
+import Logger from './utils/logger';
+import { TypeScriptPluginPathsProvider } from './utils/pluginPathsProvider';
+import { TypeScriptServerPlugin } from './utils/plugins';
import TelemetryReporter from './utils/telemetry';
import Tracer from './utils/tracer';
-import API from './utils/api';
-
-import * as nls from 'vscode-nls';
-import { TypeScriptServiceConfiguration, TsServerLogLevel } from './utils/configuration';
-import { TypeScriptVersionProvider, TypeScriptVersion } from './utils/versionProvider';
-import { TypeScriptVersionPicker } from './utils/versionPicker';
-import * as fileSchemes from './utils/fileSchemes';
import { inferredProjectConfig } from './utils/tsconfig';
-import LogDirectoryProvider from './utils/logDirectoryProvider';
-import { disposeAll } from './utils/dispose';
-import { DiagnosticKind } from './features/diagnostics';
-import { TypeScriptPluginPathsProvider } from './utils/pluginPathsProvider';
-import BufferSyncSupport from './features/bufferSyncSupport';
+import { TypeScriptVersionPicker } from './utils/versionPicker';
+import { TypeScriptVersion, TypeScriptVersionProvider } from './utils/versionProvider';
+import { Reader } from './utils/wireProtocol';
+
const localize = nls.loadMessageBundle();
@@ -123,10 +120,15 @@ class RequestQueue {
}
}
-class ForkedTsServerProcess {
+class ForkedTsServerProcess extends Disposable {
+ private readonly _reader: Reader;
+
constructor(
private childProcess: cp.ChildProcess
- ) { }
+ ) {
+ super();
+ this._reader = new Reader(this.childProcess.stdout);
+ }
public onError(cb: (err: Error) => void): void {
this.childProcess.on('error', cb);
@@ -140,13 +142,9 @@ class ForkedTsServerProcess {
this.childProcess.stdin.write(JSON.stringify(serverRequest) + '\r\n', 'utf8');
}
- public createReader(
- callback: ICallback,
- onError: (error: any) => void
- ) {
- // tslint:disable-next-line:no-unused-expression
- new Reader(this.childProcess.stdout, callback, onError);
- }
+ public get onReaderError() { return this._reader.onError; }
+
+ public get onData() { return this._reader.onData; }
public kill() {
this.childProcess.kill();
@@ -155,11 +153,11 @@ class ForkedTsServerProcess {
export interface TsDiagnostics {
readonly kind: DiagnosticKind;
- readonly resource: Uri;
+ readonly resource: vscode.Uri;
readonly diagnostics: Proto.Diagnostic[];
}
-export default class TypeScriptServiceClient implements ITypeScriptServiceClient {
+export default class TypeScriptServiceClient extends Disposable implements ITypeScriptServiceClient {
private static readonly WALK_THROUGH_SNIPPET_SCHEME_COLON = `${fileSchemes.walkThroughSnippet}:`;
private pathSeparator: string;
@@ -173,7 +171,7 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
private tracer: Tracer;
public readonly logger: Logger = new Logger();
private tsServerLogFile: string | null = null;
- private servicePromise: Thenable | null;
+ private servicePromise: Thenable | null;
private lastError: Error | null;
private lastStart: number;
private numberRestarts: number;
@@ -194,17 +192,17 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
*/
private _tsserverVersion: string | undefined;
- private readonly disposables: Disposable[] = [];
-
public readonly bufferSyncSupport: BufferSyncSupport;
+ public readonly diagnosticsManager: DiagnosticsManager;
constructor(
- private readonly workspaceState: Memento,
+ private readonly workspaceState: vscode.Memento,
private readonly onDidChangeTypeScriptVersion: (version: TypeScriptVersion) => void,
public readonly plugins: TypeScriptServerPlugin[],
private readonly logDirectoryProvider: LogDirectoryProvider,
allModeIds: string[]
) {
+ super();
this.pathSeparator = path.sep;
this.lastStart = Date.now();
@@ -231,7 +229,12 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
this.bufferSyncSupport = new BufferSyncSupport(this, allModeIds);
this.onReady(() => { this.bufferSyncSupport.listen(); });
- workspace.onDidChangeConfiguration(() => {
+ this.diagnosticsManager = new DiagnosticsManager('typescript');
+ this.bufferSyncSupport.onDelete(resource => {
+ this.diagnosticsManager.delete(resource);
+ }, null, this._disposables);
+
+ vscode.workspace.onDidChangeConfiguration(() => {
const oldConfiguration = this._configuration;
this._configuration = TypeScriptServiceConfiguration.loadFromWorkspace();
@@ -250,9 +253,9 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
this.restartTsServer();
}
}
- }, this, this.disposables);
+ }, this, this._disposables);
this.telemetryReporter = new TelemetryReporter(() => this._tsserverVersion || this._apiVersion.versionString);
- this.disposables.push(this.telemetryReporter);
+ this._register(this.telemetryReporter);
}
public get configuration() {
@@ -260,22 +263,17 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
}
public dispose() {
+ super.dispose();
+
this.bufferSyncSupport.dispose();
- this._onTsServerStarted.dispose();
- this._onDidBeginInstallTypings.dispose();
- this._onDidEndInstallTypings.dispose();
- this._onTypesInstallerInitializationFailed.dispose();
if (this.servicePromise) {
this.servicePromise.then(childProcess => {
- childProcess.kill();
+ if (childProcess) {
+ childProcess.kill();
+ }
}).then(undefined, () => void 0);
}
-
- disposeAll(this.disposables);
- this._onDiagnosticsReceived.dispose();
- this._onConfigDiagnosticsReceived.dispose();
- this._onResendModelsRequested.dispose();
}
public restartTsServer(): void {
@@ -288,7 +286,9 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
this.servicePromise = this.servicePromise.then(childProcess => {
this.info('Killing TS Server');
this.isRestarting = true;
- childProcess.kill();
+ if (childProcess) {
+ childProcess.kill();
+ }
this.resetClientVersion();
}).then(start);
} else {
@@ -296,28 +296,28 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
}
}
- private readonly _onTsServerStarted = new EventEmitter();
+ private readonly _onTsServerStarted = this._register(new vscode.EventEmitter());
public readonly onTsServerStarted = this._onTsServerStarted.event;
- private readonly _onDiagnosticsReceived = new EventEmitter();
+ private readonly _onDiagnosticsReceived = this._register(new vscode.EventEmitter());
public readonly onDiagnosticsReceived = this._onDiagnosticsReceived.event;
- private readonly _onConfigDiagnosticsReceived = new EventEmitter();
+ private readonly _onConfigDiagnosticsReceived = this._register(new vscode.EventEmitter());
public readonly onConfigDiagnosticsReceived = this._onConfigDiagnosticsReceived.event;
- private readonly _onResendModelsRequested = new EventEmitter();
+ private readonly _onResendModelsRequested = this._register(new vscode.EventEmitter());
public readonly onResendModelsRequested = this._onResendModelsRequested.event;
- private readonly _onProjectLanguageServiceStateChanged = new EventEmitter();
+ private readonly _onProjectLanguageServiceStateChanged = this._register(new vscode.EventEmitter());
public readonly onProjectLanguageServiceStateChanged = this._onProjectLanguageServiceStateChanged.event;
- private readonly _onDidBeginInstallTypings = new EventEmitter();
+ private readonly _onDidBeginInstallTypings = this._register(new vscode.EventEmitter());
public readonly onDidBeginInstallTypings = this._onDidBeginInstallTypings.event;
- private readonly _onDidEndInstallTypings = new EventEmitter();
+ private readonly _onDidEndInstallTypings = this._register(new vscode.EventEmitter());
public readonly onDidEndInstallTypings = this._onDidEndInstallTypings.event;
- private readonly _onTypesInstallerInitializationFailed = new EventEmitter();
+ private readonly _onTypesInstallerInitializationFailed = this._register(new vscode.EventEmitter());
public readonly onTypesInstallerInitializationFailed = this._onTypesInstallerInitializationFailed.event;
public get apiVersion(): API {
@@ -340,7 +340,7 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
this.telemetryReporter.logTelemetry(eventName, properties);
}
- private service(): Thenable {
+ private service(): Thenable {
if (this.servicePromise) {
return this.servicePromise;
}
@@ -360,12 +360,17 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
}
}
- private startService(resendModels: boolean = false): Promise {
+ private token: number = 0;
+ private startService(resendModels: boolean = false): Promise | null {
+ if (this.isDisposed) {
+ return null;
+ }
+
let currentVersion = this.versionPicker.currentVersion;
this.info(`Using tsserver from: ${currentVersion.path}`);
if (!fs.existsSync(currentVersion.tsServerPath)) {
- window.showWarningMessage(localize('noServerFound', 'The path {0} doesn\'t point to a valid tsserver install. Falling back to bundled TypeScript version.', currentVersion.path));
+ vscode.window.showWarningMessage(localize('noServerFound', 'The path {0} doesn\'t point to a valid tsserver install. Falling back to bundled TypeScript version.', currentVersion.path));
this.versionPicker.useBundledVersion();
currentVersion = this.versionPicker.currentVersion;
@@ -377,6 +382,7 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
this.requestQueue = new RequestQueue();
this.callbacks = new CallbackMap();
this.lastError = null;
+ let mytoken = ++this.token;
return this.servicePromise = new Promise(async (resolve, reject) => {
try {
@@ -385,76 +391,82 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
const tsServerForkOptions: electron.IForkOptions = {
execArgv: debugPort ? [`--inspect=${debugPort}`] : [] // [`--debug-brk=5859`]
};
- electron.fork(currentVersion.tsServerPath, tsServerForkArgs, tsServerForkOptions, this.logger, (err: any, childProcess: cp.ChildProcess | null) => {
- if (err || !childProcess) {
- this.lastError = err;
- this.error('Starting TSServer failed with error.', err);
- window.showErrorMessage(localize('serverCouldNotBeStarted', 'TypeScript language server couldn\'t be started. Error message is: {0}', err.message || err));
- /* __GDPR__
- "error" : {
- "${include}": [
- "${TypeScriptCommonProperties}"
- ]
- }
- */
- this.logTelemetry('error');
- this.resetClientVersion();
+ const childProcess = electron.fork(currentVersion.tsServerPath, tsServerForkArgs, tsServerForkOptions, this.logger);
+ childProcess.once('error', (err: Error) => {
+ this.lastError = err;
+ this.error('Starting TSServer failed with error.', err);
+ vscode.window.showErrorMessage(localize('serverCouldNotBeStarted', 'TypeScript language server couldn\'t be started. Error message is: {0}', err.message || err.name));
+ /* __GDPR__
+ "error" : {
+ "${include}": [
+ "${TypeScriptCommonProperties}"
+ ]
+ }
+ */
+ this.logTelemetry('error');
+ this.resetClientVersion();
+ return;
+ });
+
+ this.info('Started TSServer');
+ const handle = new ForkedTsServerProcess(childProcess);
+ this.lastStart = Date.now();
+
+ handle.onError((err: Error) => {
+ if (this.token !== mytoken) {
+ // this is coming from an old process
return;
}
-
- this.info('Started TSServer');
- const handle = new ForkedTsServerProcess(childProcess);
- this.lastStart = Date.now();
-
- handle.onError((err: Error) => {
- this.lastError = err;
- this.error('TSServer errored with error.', err);
- if (this.tsServerLogFile) {
- this.error(`TSServer log file: ${this.tsServerLogFile}`);
+ this.lastError = err;
+ this.error('TSServer errored with error.', err);
+ if (this.tsServerLogFile) {
+ this.error(`TSServer log file: ${this.tsServerLogFile}`);
+ }
+ /* __GDPR__
+ "tsserver.error" : {
+ "${include}": [
+ "${TypeScriptCommonProperties}"
+ ]
}
+ */
+ this.logTelemetry('tsserver.error');
+ this.serviceExited(false);
+ });
+ handle.onExit((code: any) => {
+ if (this.token !== mytoken) {
+ // this is coming from an old process
+ return;
+ }
+ if (code === null || typeof code === 'undefined') {
+ this.info('TSServer exited');
+ } else {
+ this.error(`TSServer exited with code: ${code}`);
/* __GDPR__
- "tsserver.error" : {
+ "tsserver.exitWithCode" : {
+ "code" : { "classification": "CallstackOrException", "purpose": "PerformanceAndHealth" },
"${include}": [
"${TypeScriptCommonProperties}"
]
}
*/
- this.logTelemetry('tsserver.error');
- this.serviceExited(false);
- });
- handle.onExit((code: any) => {
- if (code === null || typeof code === 'undefined') {
- this.info('TSServer exited');
- } else {
- this.error(`TSServer exited with code: ${code}`);
- /* __GDPR__
- "tsserver.exitWithCode" : {
- "code" : { "classification": "CallstackOrException", "purpose": "PerformanceAndHealth" },
- "${include}": [
- "${TypeScriptCommonProperties}"
- ]
- }
- */
- this.logTelemetry('tsserver.exitWithCode', { code: code });
- }
+ this.logTelemetry('tsserver.exitWithCode', { code: code });
+ }
- if (this.tsServerLogFile) {
- this.info(`TSServer log file: ${this.tsServerLogFile}`);
- }
- this.serviceExited(!this.isRestarting);
- this.isRestarting = false;
- });
-
- handle.createReader(
- msg => { this.dispatchMessage(msg); },
- error => { this.error('ReaderError', error); });
-
- this._onReady!.resolve();
- resolve(handle);
- this._onTsServerStarted.fire(currentVersion.version);
-
- this.serviceStarted(resendModels);
+ if (this.tsServerLogFile) {
+ this.info(`TSServer log file: ${this.tsServerLogFile}`);
+ }
+ this.serviceExited(!this.isRestarting);
+ this.isRestarting = false;
});
+
+ handle.onData(msg => this.dispatchMessage(msg));
+ handle.onReaderError(error => this.error('ReaderError', error));
+
+ this._onReady!.resolve();
+ resolve(handle);
+ this._onTsServerStarted.fire(currentVersion.version);
+
+ this.serviceStarted(resendModels);
} catch (error) {
reject(error);
}
@@ -476,7 +488,7 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
public async openTsServerLogFile(): Promise {
if (!this.apiVersion.gte(API.v222)) {
- window.showErrorMessage(
+ vscode.window.showErrorMessage(
localize(
'typescript.openTsServerLog.notSupported',
'TS Server logging requires TS 2.2.2+'));
@@ -484,7 +496,7 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
}
if (this._configuration.tsServerLogLevel === TsServerLogLevel.Off) {
- window.showErrorMessage(
+ vscode.window.showErrorMessage(
localize(
'typescript.openTsServerLog.loggingNotEnabled',
'TS Server logging is off. Please set `typescript.tsserver.log` and restart the TS server to enable logging'),
@@ -495,7 +507,7 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
})
.then(selection => {
if (selection) {
- return workspace.getConfiguration().update('typescript.tsserver.log', 'verbose', true).then(() => {
+ return vscode.workspace.getConfiguration().update('typescript.tsserver.log', 'verbose', true).then(() => {
this.restartTsServer();
});
}
@@ -505,17 +517,17 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
}
if (!this.tsServerLogFile) {
- window.showWarningMessage(localize(
+ vscode.window.showWarningMessage(localize(
'typescript.openTsServerLog.noLogFile',
'TS Server has not started logging.'));
return false;
}
try {
- await commands.executeCommand('revealFileInOS', Uri.parse(this.tsServerLogFile));
+ await vscode.commands.executeCommand('revealFileInOS', vscode.Uri.parse(this.tsServerLogFile));
return true;
} catch {
- window.showWarningMessage(localize(
+ vscode.window.showWarningMessage(localize(
'openTsServerLog.openFileFailedFailed',
'Could not open TS Server log file'));
return false;
@@ -526,7 +538,7 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
const configureOptions: Proto.ConfigureRequestArguments = {
hostInfo: 'vscode'
};
- this.execute('configure', configureOptions);
+ this.executeWithoutWaitingForResponse('configure', configureOptions);
this.setCompilerOptionsForInferredProjects(this._configuration);
if (resendModels) {
this._onResendModelsRequested.fire();
@@ -541,7 +553,7 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
const args: Proto.SetCompilerOptionsForInferredProjectsArgs = {
options: this.getCompilerOptionsForInferredProjects(configuration)
};
- this.execute('compilerOptionsForInferredProjects', args, true);
+ this.executeWithoutWaitingForResponse('compilerOptionsForInferredProjects', args);
}
private getCompilerOptionsForInferredProjects(configuration: TypeScriptServiceConfiguration): Proto.ExternalProjectCompilerOptions {
@@ -558,7 +570,7 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
reportIssue
}
- interface MyMessageItem extends MessageItem {
+ interface MyMessageItem extends vscode.MessageItem {
id: MessageAction;
}
@@ -579,7 +591,7 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
if (diff < 10 * 1000 /* 10 seconds */) {
this.lastStart = Date.now();
startService = false;
- prompt = window.showErrorMessage(
+ prompt = vscode.window.showErrorMessage(
localize('serverDiedAfterStart', 'The TypeScript language service died 5 times right after it got started. The service will not be restarted.'),
{
title: localize('serverDiedReportIssue', 'Report Issue'),
@@ -596,7 +608,7 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
this.resetClientVersion();
} else if (diff < 60 * 1000 /* 1 Minutes */) {
this.lastStart = Date.now();
- prompt = window.showWarningMessage(
+ prompt = vscode.window.showWarningMessage(
localize('serverDied', 'The TypeScript language service died unexpectedly 5 times in the last 5 Minutes.'),
{
title: localize('serverDiedReportIssue', 'Report Issue'),
@@ -606,7 +618,7 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
if (prompt) {
prompt.then(item => {
if (item && item.id === MessageAction.reportIssue) {
- return commands.executeCommand('workbench.action.reportIssues');
+ return vscode.commands.executeCommand('workbench.action.reportIssues');
}
return undefined;
});
@@ -618,7 +630,7 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
}
}
- public normalizedPath(resource: Uri): string | null {
+ public normalizedPath(resource: vscode.Uri): string | null {
if (this._apiVersion.gte(API.v213)) {
if (resource.scheme === fileSchemes.walkThroughSnippet || resource.scheme === fileSchemes.untitled) {
const dirName = path.dirname(resource.path);
@@ -640,7 +652,7 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
return result.replace(new RegExp('\\' + this.pathSeparator, 'g'), '/');
}
- public toPath(resource: Uri): string | null {
+ public toPath(resource: vscode.Uri): string | null {
return this.normalizedPath(resource);
}
@@ -648,11 +660,11 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
return this._apiVersion.gte(API.v270) ? '^' : '';
}
- public toResource(filepath: string): Uri {
+ public toResource(filepath: string): vscode.Uri {
if (this._apiVersion.gte(API.v213)) {
if (filepath.startsWith(TypeScriptServiceClient.WALK_THROUGH_SNIPPET_SCHEME_COLON) || (filepath.startsWith(fileSchemes.untitled + ':'))
) {
- let resource = Uri.parse(filepath);
+ let resource = vscode.Uri.parse(filepath);
if (this.inMemoryResourcePrefix) {
const dirName = path.dirname(resource.path);
const fileName = path.basename(resource.path);
@@ -666,8 +678,8 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
return this.bufferSyncSupport.toResource(filepath);
}
- public getWorkspaceRootForResource(resource: Uri): string | undefined {
- const roots = workspace.workspaceFolders;
+ public getWorkspaceRootForResource(resource: vscode.Uri): string | undefined {
+ const roots = vscode.workspace.workspaceFolders;
if (!roots || !roots.length) {
return undefined;
}
@@ -684,22 +696,31 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
return undefined;
}
- public executeAsync(command: string, args: Proto.GeterrRequestArgs, token: CancellationToken): Promise {
- return this.executeImpl(command, args, { isAsync: true, token, expectsResult: true });
+ public execute(command: string, args: any, token: vscode.CancellationToken): Promise {
+ return this.executeImpl(command, args, {
+ isAsync: false,
+ token,
+ expectsResult: true
+ });
}
- public execute(command: string, args: any, expectsResultOrToken?: boolean | CancellationToken): Promise {
- let token: CancellationToken | undefined = undefined;
- let expectsResult = true;
- if (typeof expectsResultOrToken === 'boolean') {
- expectsResult = expectsResultOrToken;
- } else {
- token = expectsResultOrToken;
- }
- return this.executeImpl(command, args, { isAsync: false, token, expectsResult });
+ public executeWithoutWaitingForResponse(command: string, args: any): void {
+ this.executeImpl(command, args, {
+ isAsync: false,
+ token: undefined,
+ expectsResult: false
+ });
}
- private executeImpl(command: string, args: any, executeInfo: { isAsync: boolean, token?: CancellationToken, expectsResult: boolean }): Promise {
+ public executeAsync(command: string, args: Proto.GeterrRequestArgs, token: vscode.CancellationToken): Promise {
+ return this.executeImpl(command, args, {
+ isAsync: true,
+ token,
+ expectsResult: true
+ });
+ }
+
+ private executeImpl(command: string, args: any, executeInfo: { isAsync: boolean, token?: vscode.CancellationToken, expectsResult: boolean }): Promise {
const request = this.requestQueue.createRequest(command, args);
const requestInfo: RequestItem = {
request: request,
@@ -721,6 +742,17 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
if (!wasCancelled) {
this.error(`'${command}' request failed with error.`, err);
const properties = this.parseErrorText(err && err.message, command);
+ /* __GDPR__
+ "languageServiceErrorResponse" : {
+ "command" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
+ "message" : { "classification": "CallstackOrException", "purpose": "PerformanceAndHealth" },
+ "stack" : { "classification": "CallstackOrException", "purpose": "PerformanceAndHealth" },
+ "errortext" : { "classification": "CallstackOrException", "purpose": "PerformanceAndHealth" },
+ "${include}": [
+ "${TypeScriptCommonProperties}"
+ ]
+ }
+ */
this.logTelemetry('languageServiceErrorResponse', properties);
}
throw err;
@@ -734,6 +766,10 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
return result;
}
+ public interuptGetErr(f: () => R): R {
+ return this.bufferSyncSupport.interuptGetErr(f);
+ }
+
/**
* Given a `errorText` from a tsserver request indicating failure in handling a request,
* prepares a payload for telemetry-logging.
@@ -774,8 +810,10 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
this.callbacks.add(serverRequest.seq, requestItem.callbacks, requestItem.isAsync);
}
this.service()
- .then((childProcess) => {
- childProcess.write(serverRequest);
+ .then(childProcess => {
+ if (childProcess) {
+ childProcess.write(serverRequest);
+ }
})
.then(undefined, err => {
const callback = this.callbacks.fetch(serverRequest.seq);
@@ -879,7 +917,7 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
case 'projectsUpdatedInBackground':
if (event.body) {
const body = (event as Proto.ProjectsUpdatedInBackgroundEvent).body;
- const resources = body.openFiles.map(Uri.file);
+ const resources = body.openFiles.map(vscode.Uri.file);
this.bufferSyncSupport.getErr(resources);
}
break;
@@ -974,7 +1012,7 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
}
if (this.apiVersion.gte(API.v222)) {
- this.cancellationPipeName = electron.getTempSock('tscancellation');
+ this.cancellationPipeName = electron.getTempFile('tscancellation');
args.push('--cancellationPipeName', this.cancellationPipeName + '*');
}
@@ -1053,7 +1091,7 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
const getTsLocale = (configuration: TypeScriptServiceConfiguration): string | undefined =>
(configuration.locale
? configuration.locale
- : env.language);
+ : vscode.env.language);
function getDignosticsKind(event: Proto.Event) {
switch (event.event) {
diff --git a/extensions/typescript-language-features/src/utils/api.ts b/extensions/typescript-language-features/src/utils/api.ts
index 2f499965df1..11e22609951 100644
--- a/extensions/typescript-language-features/src/utils/api.ts
+++ b/extensions/typescript-language-features/src/utils/api.ts
@@ -24,11 +24,12 @@ export default class API {
public static readonly v240 = API.fromSimpleString('2.4.0');
public static readonly v250 = API.fromSimpleString('2.5.0');
public static readonly v260 = API.fromSimpleString('2.6.0');
- public static readonly v262 = API.fromSimpleString('2.6.2');
public static readonly v270 = API.fromSimpleString('2.7.0');
public static readonly v280 = API.fromSimpleString('2.8.0');
public static readonly v290 = API.fromSimpleString('2.9.0');
public static readonly v291 = API.fromSimpleString('2.9.1');
+ public static readonly v292 = API.fromSimpleString('2.9.2');
+ public static readonly v300 = API.fromSimpleString('3.0.0');
public static fromVersionString(versionString: string): API {
diff --git a/extensions/typescript-language-features/src/utils/arrays.ts b/extensions/typescript-language-features/src/utils/arrays.ts
index 57dbd54a29c..3a15e38981a 100644
--- a/extensions/typescript-language-features/src/utils/arrays.ts
+++ b/extensions/typescript-language-features/src/utils/arrays.ts
@@ -14,4 +14,8 @@ export function equals(one: T[], other: T[], itemEquals: (a: T, b: T) => bool
}
return true;
+}
+
+export function flatten(arr: T[][]): T[] {
+ return [].concat.apply([], arr);
}
\ No newline at end of file
diff --git a/extensions/typescript-language-features/src/utils/cancellation.ts b/extensions/typescript-language-features/src/utils/cancellation.ts
new file mode 100644
index 00000000000..10933baa939
--- /dev/null
+++ b/extensions/typescript-language-features/src/utils/cancellation.ts
@@ -0,0 +1,10 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import * as vscode from 'vscode';
+
+const nulTokenSource = new vscode.CancellationTokenSource();
+
+export const nulToken = nulTokenSource.token;
\ No newline at end of file
diff --git a/extensions/typescript-language-features/src/utils/codeAction.ts b/extensions/typescript-language-features/src/utils/codeAction.ts
index 984ea6bc9f3..c45379e611a 100644
--- a/extensions/typescript-language-features/src/utils/codeAction.ts
+++ b/extensions/typescript-language-features/src/utils/codeAction.ts
@@ -3,7 +3,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
-import { WorkspaceEdit, workspace } from 'vscode';
+import * as vscode from 'vscode';
import * as Proto from '../protocol';
import { ITypeScriptServiceClient } from '../typescriptService';
import * as typeConverters from './typeConverters';
@@ -11,35 +11,34 @@ import * as typeConverters from './typeConverters';
export function getEditForCodeAction(
client: ITypeScriptServiceClient,
action: Proto.CodeAction
-): WorkspaceEdit | undefined {
+): vscode.WorkspaceEdit | undefined {
return action.changes && action.changes.length
- ? typeConverters.WorkspaceEdit.fromFromFileCodeEdits(client, action.changes)
+ ? typeConverters.WorkspaceEdit.fromFileCodeEdits(client, action.changes)
: undefined;
}
export async function applyCodeAction(
client: ITypeScriptServiceClient,
- action: Proto.CodeAction
+ action: Proto.CodeAction,
+ token: vscode.CancellationToken
): Promise {
const workspaceEdit = getEditForCodeAction(client, action);
if (workspaceEdit) {
- if (!(await workspace.applyEdit(workspaceEdit))) {
+ if (!(await vscode.workspace.applyEdit(workspaceEdit))) {
return false;
}
}
- return applyCodeActionCommands(client, action);
+ return applyCodeActionCommands(client, action.commands, token);
}
export async function applyCodeActionCommands(
client: ITypeScriptServiceClient,
- action: Proto.CodeAction
+ commands: ReadonlyArray<{}> | undefined,
+ token: vscode.CancellationToken,
): Promise {
- if (action.commands && action.commands.length) {
- for (const command of action.commands) {
- const response = await client.execute('applyCodeActionCommand', { command });
- if (!response || !response.body) {
- return false;
- }
+ if (commands && commands.length) {
+ for (const command of commands) {
+ await client.execute('applyCodeActionCommand', { command }, token);
}
}
return true;
diff --git a/extensions/typescript-language-features/src/utils/configuration.ts b/extensions/typescript-language-features/src/utils/configuration.ts
index 9359a2bbed0..adeb071062e 100644
--- a/extensions/typescript-language-features/src/utils/configuration.ts
+++ b/extensions/typescript-language-features/src/utils/configuration.ts
@@ -2,7 +2,7 @@
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
-import { WorkspaceConfiguration, workspace } from 'vscode';
+import * as vscode from 'vscode';
import * as arrays from './arrays';
export enum TsServerLogLevel {
@@ -58,7 +58,7 @@ export class TypeScriptServiceConfiguration {
}
private constructor() {
- const configuration = workspace.getConfiguration();
+ const configuration = vscode.workspace.getConfiguration();
this.locale = TypeScriptServiceConfiguration.extractLocale(configuration);
this.globalTsdk = TypeScriptServiceConfiguration.extractGlobalTsdk(configuration);
@@ -83,7 +83,7 @@ export class TypeScriptServiceConfiguration {
&& arrays.equals(this.tsServerPluginPaths, other.tsServerPluginPaths);
}
- private static extractGlobalTsdk(configuration: WorkspaceConfiguration): string | null {
+ private static extractGlobalTsdk(configuration: vscode.WorkspaceConfiguration): string | null {
const inspect = configuration.inspect('typescript.tsdk');
if (inspect && inspect.globalValue && 'string' === typeof inspect.globalValue) {
return inspect.globalValue;
@@ -91,7 +91,7 @@ export class TypeScriptServiceConfiguration {
return null;
}
- private static extractLocalTsdk(configuration: WorkspaceConfiguration): string | null {
+ private static extractLocalTsdk(configuration: vscode.WorkspaceConfiguration): string | null {
const inspect = configuration.inspect('typescript.tsdk');
if (inspect && inspect.workspaceValue && 'string' === typeof inspect.workspaceValue) {
return inspect.workspaceValue;
@@ -99,32 +99,32 @@ export class TypeScriptServiceConfiguration {
return null;
}
- private static readTsServerLogLevel(configuration: WorkspaceConfiguration): TsServerLogLevel {
+ private static readTsServerLogLevel(configuration: vscode.WorkspaceConfiguration): TsServerLogLevel {
const setting = configuration.get('typescript.tsserver.log', 'off');
return TsServerLogLevel.fromString(setting);
}
- private static readTsServerPluginPaths(configuration: WorkspaceConfiguration): string[] {
+ private static readTsServerPluginPaths(configuration: vscode.WorkspaceConfiguration): string[] {
return configuration.get('typescript.tsserver.pluginPaths', []);
}
- private static readCheckJs(configuration: WorkspaceConfiguration): boolean {
+ private static readCheckJs(configuration: vscode.WorkspaceConfiguration): boolean {
return configuration.get('javascript.implicitProjectConfig.checkJs', false);
}
- private static readExperimentalDecorators(configuration: WorkspaceConfiguration): boolean {
+ private static readExperimentalDecorators(configuration: vscode.WorkspaceConfiguration): boolean {
return configuration.get('javascript.implicitProjectConfig.experimentalDecorators', false);
}
- private static readNpmLocation(configuration: WorkspaceConfiguration): string | null {
+ private static readNpmLocation(configuration: vscode.WorkspaceConfiguration): string | null {
return configuration.get('typescript.npm', null);
}
- private static readDisableAutomaticTypeAcquisition(configuration: WorkspaceConfiguration): boolean {
+ private static readDisableAutomaticTypeAcquisition(configuration: vscode.WorkspaceConfiguration): boolean {
return configuration.get('typescript.disableAutomaticTypeAcquisition', false);
}
- private static extractLocale(configuration: WorkspaceConfiguration): string | null {
+ private static extractLocale(configuration: vscode.WorkspaceConfiguration): string | null {
return configuration.get('typescript.locale', null);
}
}
diff --git a/extensions/typescript-language-features/src/utils/dependentRegistration.ts b/extensions/typescript-language-features/src/utils/dependentRegistration.ts
index 88e0cf00b02..434379f57e1 100644
--- a/extensions/typescript-language-features/src/utils/dependentRegistration.ts
+++ b/extensions/typescript-language-features/src/utils/dependentRegistration.ts
@@ -5,10 +5,10 @@
import * as vscode from 'vscode';
import { ITypeScriptServiceClient } from '../typescriptService';
-import API from '../utils/api';
-import { disposeAll } from '../utils/dispose';
+import API from './api';
+import { Disposable } from './dispose';
-class ConditionalRegistration {
+export class ConditionalRegistration {
private registration: vscode.Disposable | undefined = undefined;
public constructor(
@@ -36,15 +36,15 @@ class ConditionalRegistration {
}
}
-export class VersionDependentRegistration {
+export class VersionDependentRegistration extends Disposable {
private readonly _registration: ConditionalRegistration;
- private readonly _disposables: vscode.Disposable[] = [];
constructor(
private readonly client: ITypeScriptServiceClient,
private readonly minVersion: API,
register: () => vscode.Disposable,
) {
+ super();
this._registration = new ConditionalRegistration(register);
this.update(client.apiVersion);
@@ -55,7 +55,7 @@ export class VersionDependentRegistration {
}
public dispose() {
- disposeAll(this._disposables);
+ super.dispose();
this._registration.dispose();
}
@@ -65,31 +65,27 @@ export class VersionDependentRegistration {
}
-export class ConfigurationDependentRegistration {
+export class ConfigurationDependentRegistration extends Disposable {
private readonly _registration: ConditionalRegistration;
- private readonly _disposables: vscode.Disposable[] = [];
constructor(
private readonly language: string,
private readonly configValue: string,
register: () => vscode.Disposable,
) {
+ super();
this._registration = new ConditionalRegistration(register);
-
this.update();
-
- vscode.workspace.onDidChangeConfiguration(() => {
- this.update();
- }, null, this._disposables);
+ vscode.workspace.onDidChangeConfiguration(this.update, this, this._disposables);
}
public dispose() {
- disposeAll(this._disposables);
+ super.dispose();
this._registration.dispose();
}
private update() {
- const config = vscode.workspace.getConfiguration(this.language);
+ const config = vscode.workspace.getConfiguration(this.language, null);
this._registration.update(!!config.get(this.configValue));
}
}
diff --git a/extensions/typescript-language-features/src/utils/dispose.ts b/extensions/typescript-language-features/src/utils/dispose.ts
index b7c72f8b8b4..ba629191cf5 100644
--- a/extensions/typescript-language-features/src/utils/dispose.ts
+++ b/extensions/typescript-language-features/src/utils/dispose.ts
@@ -5,7 +5,7 @@
import * as vscode from 'vscode';
-export function disposeAll(disposables: vscode.Disposable[]) {
+function disposeAll(disposables: vscode.Disposable[]) {
while (disposables.length) {
const item = disposables.pop();
if (item) {
@@ -13,3 +13,30 @@ export function disposeAll(disposables: vscode.Disposable[]) {
}
}
}
+
+export abstract class Disposable {
+ private _isDisposed = false;
+
+ protected _disposables: vscode.Disposable[] = [];
+
+ public dispose(): any {
+ if (this._isDisposed) {
+ return;
+ }
+ this._isDisposed = true;
+ disposeAll(this._disposables);
+ }
+
+ protected _register(value: T): T {
+ if (this._isDisposed) {
+ value.dispose();
+ } else {
+ this._disposables.push(value);
+ }
+ return value;
+ }
+
+ protected get isDisposed() {
+ return this._isDisposed;
+ }
+}
\ No newline at end of file
diff --git a/extensions/typescript-language-features/src/utils/electron.ts b/extensions/typescript-language-features/src/utils/electron.ts
index 34a6534f8ec..b6ed76ceea0 100644
--- a/extensions/typescript-language-features/src/utils/electron.ts
+++ b/extensions/typescript-language-features/src/utils/electron.ts
@@ -4,10 +4,9 @@
*--------------------------------------------------------------------------------------------*/
import Logger from './logger';
-import { getTempFile, makeRandomHexString } from './temp';
+import * as temp from './temp';
import path = require('path');
-import os = require('os');
-import net = require('net');
+import fs = require('fs');
import cp = require('child_process');
export interface IForkOptions {
@@ -15,37 +14,27 @@ export interface IForkOptions {
execArgv?: string[];
}
-export function getTempSock(prefix: string): string {
- const fullName = `vscode-${prefix}-${makeRandomHexString(20)}`;
- return getTempFile(fullName + '.sock');
+const getRootTempDir = (() => {
+ let dir: string | undefined;
+ return () => {
+ if (!dir) {
+ dir = temp.getTempFile(`vscode-typescript`);
+ if (!fs.existsSync(dir)) {
+ fs.mkdirSync(dir);
+ }
+ }
+ return dir;
+ };
+})();
+
+export function getTempFile(prefix: string): string {
+ return path.join(getRootTempDir(), `${prefix}-${temp.makeRandomHexString(20)}.tmp`);
}
-function generatePipeName(): string {
- return getPipeName(makeRandomHexString(40));
-}
-
-function getPipeName(name: string): string {
- const fullName = 'vscode-' + name;
- if (process.platform === 'win32') {
- return '\\\\.\\pipe\\' + fullName + '-sock';
- }
-
- // Mac/Unix: use socket file
- return path.join(os.tmpdir(), fullName + '.sock');
-}
-
-function generatePatchedEnv(
- env: any,
- stdInPipeName: string,
- stdOutPipeName: string,
- stdErrPipeName: string
-): any {
+function generatePatchedEnv(env: any): any {
const newEnv = Object.assign({}, env);
// Set the two unique pipe names and the electron flag as process env
- newEnv['STDIN_PIPE_NAME'] = stdInPipeName;
- newEnv['STDOUT_PIPE_NAME'] = stdOutPipeName;
- newEnv['STDERR_PIPE_NAME'] = stdErrPipeName;
newEnv['ELECTRON_RUN_AS_NODE'] = '1';
// Ensure we always have a PATH set
@@ -57,87 +46,18 @@ export function fork(
modulePath: string,
args: string[],
options: IForkOptions,
- logger: Logger,
- callback: (error: any, cp: cp.ChildProcess | null) => void,
-): void {
-
- let callbackCalled = false;
- const resolve = (result: cp.ChildProcess) => {
- if (callbackCalled) {
- return;
- }
- callbackCalled = true;
- callback(null, result);
- };
- const reject = (err: any) => {
- if (callbackCalled) {
- return;
- }
- callbackCalled = true;
- callback(err, null);
- };
-
- // Generate three unique pipe names
- const stdInPipeName = generatePipeName();
- const stdOutPipeName = generatePipeName();
- const stdErrPipeName = generatePipeName();
-
-
- const newEnv = generatePatchedEnv(process.env, stdInPipeName, stdOutPipeName, stdErrPipeName);
+ logger: Logger
+): cp.ChildProcess {
+ const newEnv = generatePatchedEnv(process.env);
newEnv['NODE_PATH'] = path.join(modulePath, '..', '..', '..');
- let childProcess: cp.ChildProcess;
-
- // Begin listening to stderr pipe
- let stdErrServer = net.createServer((stdErrStream) => {
- // From now on the childProcess.stderr is available for reading
- childProcess.stderr = stdErrStream;
- });
- stdErrServer.listen(stdErrPipeName);
-
- // Begin listening to stdout pipe
- let stdOutServer = net.createServer((stdOutStream) => {
- // The child process will write exactly one chunk with content `ready` when it has installed a listener to the stdin pipe
-
- stdOutStream.once('data', (_chunk: Buffer) => {
- // The child process is sending me the `ready` chunk, time to connect to the stdin pipe
- childProcess.stdin = net.connect(stdInPipeName);
-
- // From now on the childProcess.stdout is available for reading
- childProcess.stdout = stdOutStream;
-
- resolve(childProcess);
- });
- });
- stdOutServer.listen(stdOutPipeName);
-
- let serverClosed = false;
- const closeServer = () => {
- if (serverClosed) {
- return;
- }
- serverClosed = true;
- stdOutServer.close();
- stdErrServer.close();
- };
// Create the process
logger.info('Forking TSServer', `PATH: ${newEnv['PATH']} `);
- const bootstrapperPath = require.resolve('./electronForkStart');
- childProcess = cp.fork(bootstrapperPath, [modulePath].concat(args), {
+ return cp.fork(modulePath, args, {
silent: true,
cwd: options.cwd,
env: newEnv,
execArgv: options.execArgv
});
-
- childProcess.once('error', (err: Error) => {
- closeServer();
- reject(err);
- });
-
- childProcess.once('exit', (err: Error) => {
- closeServer();
- reject(err);
- });
}
diff --git a/extensions/typescript-language-features/src/utils/electronForkStart.ts b/extensions/typescript-language-features/src/utils/electronForkStart.ts
deleted file mode 100644
index a29d9bca680..00000000000
--- a/extensions/typescript-language-features/src/utils/electronForkStart.ts
+++ /dev/null
@@ -1,198 +0,0 @@
-/*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-
-var net = require('net'),
- fs = require('fs');
-
-var ENABLE_LOGGING = false;
-
-var log = (function () {
- if (!ENABLE_LOGGING) {
- return function () { };
- }
- var isFirst = true;
- var LOG_LOCATION = 'C:\\stdFork.log';
- return function log(str: any) {
- if (isFirst) {
- isFirst = false;
- fs.writeFileSync(LOG_LOCATION, str + '\n');
- return;
- }
- fs.appendFileSync(LOG_LOCATION, str + '\n');
- };
-})();
-
-var stdInPipeName = process.env['STDIN_PIPE_NAME'];
-var stdOutPipeName = process.env['STDOUT_PIPE_NAME'];
-var stdErrPipeName = process.env['STDERR_PIPE_NAME'];
-
-log('STDIN_PIPE_NAME: ' + stdInPipeName);
-log('STDOUT_PIPE_NAME: ' + stdOutPipeName);
-log('STDERR_PIPE_NAME: ' + stdErrPipeName);
-log('ELECTRON_RUN_AS_NODE: ' + process.env['ELECTRON_RUN_AS_NODE']);
-
-// stdout redirection to named pipe
-(function () {
- log('Beginning stdout redirection...');
-
- // Create a writing stream to the stdout pipe
- var stdOutStream = net.connect(stdOutPipeName);
-
- // unref stdOutStream to behave like a normal standard out
- stdOutStream.unref();
-
- // handle process.stdout
- (process).__defineGetter__('stdout', function () { return stdOutStream; });
-
- // Create a writing stream to the stderr pipe
- var stdErrStream = net.connect(stdErrPipeName);
-
- // unref stdErrStream to behave like a normal standard out
- stdErrStream.unref();
-
- // handle process.stderr
- (process).__defineGetter__('stderr', function () { return stdErrStream; });
-
- var fsWriteSyncString = function (fd: number, str: string, _position: number, encoding?: string) {
- // fs.writeSync(fd, string[, position[, encoding]]);
- var buf = Buffer.from(str, encoding || 'utf8');
- return fsWriteSyncBuffer(fd, buf, 0, buf.length);
- };
-
- var fsWriteSyncBuffer = function (fd: number, buffer: Buffer, off: number, len: number) {
- off = Math.abs(off | 0);
- len = Math.abs(len | 0);
-
- // fs.writeSync(fd, buffer, offset, length[, position]);
- var buffer_length = buffer.length;
-
- if (off > buffer_length) {
- throw new Error('offset out of bounds');
- }
- if (len > buffer_length) {
- throw new Error('length out of bounds');
- }
- if (((off + len) | 0) < off) {
- throw new Error('off + len overflow');
- }
- if (buffer_length - off < len) {
- // Asking for more than is left over in the buffer
- throw new Error('off + len > buffer.length');
- }
-
- var slicedBuffer = buffer;
- if (off !== 0 || len !== buffer_length) {
- slicedBuffer = buffer.slice(off, off + len);
- }
-
- if (fd === 1) {
- stdOutStream.write(slicedBuffer);
- } else {
- stdErrStream.write(slicedBuffer);
- }
- return slicedBuffer.length;
- };
-
- // handle fs.writeSync(1, ...)
- var originalWriteSync = fs.writeSync;
- fs.writeSync = function (fd: number, data: any, _position: number, _encoding?: string) {
- if (fd !== 1 && fd !== 2) {
- return originalWriteSync.apply(fs, arguments);
- }
- // usage:
- // fs.writeSync(fd, buffer, offset, length[, position]);
- // OR
- // fs.writeSync(fd, string[, position[, encoding]]);
-
- if (data instanceof Buffer) {
- return fsWriteSyncBuffer.apply(null, arguments);
- }
-
- // For compatibility reasons with fs.writeSync, writing null will write "null", etc
- if (typeof data !== 'string') {
- data += '';
- }
-
- return fsWriteSyncString.apply(null, arguments);
- };
-
- log('Finished defining process.stdout, process.stderr and fs.writeSync');
-})();
-
-// stdin redirection to named pipe
-(function () {
-
- // Begin listening to stdin pipe
- var server = net.createServer(function (stream: any) {
- // Stop accepting new connections, keep the existing one alive
- server.close();
-
- log('Parent process has connected to my stdin. All should be good now.');
-
- // handle process.stdin
- (