From 8806c92f90599e0f61f262b4a03fd34489ce8583 Mon Sep 17 00:00:00 2001 From: Gary Lo Date: Sun, 13 Jun 2021 13:18:28 +0800 Subject: [PATCH 1/5] improve VS rust support --- vscode/src/gapstyle.yml | 32 +++++++++++++++++++++++++++++--- vscode/test/sample.rs | 13 +++++++++++++ 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/vscode/src/gapstyle.yml b/vscode/src/gapstyle.yml index efb56f1..a9b9f0f 100644 --- a/vscode/src/gapstyle.yml +++ b/vscode/src/gapstyle.yml @@ -2102,6 +2102,10 @@ tokenColors: scope: - variable.language.rust - storage.modifier.mut.rust + - entity.name.type.option.rust + - variable.language.self.rust + - entity.name.type.numeric.rust + - constant.language.bool.rust settings: foreground: *KEYWORD fontStyle: bold @@ -2116,14 +2120,22 @@ tokenColors: - name: Rust Attribute scope: - meta.attribute.rust + - punctuation.definition.attribute.rust settings: foreground: *DECORATOR + - name: Rust String + scope: + - punctuation.definition.string.rust + settings: + foreground: *STRING + - name: Rust Type Params scope: - meta.type_params.rust + - meta.function.definition.rust entity.name.type.rust settings: - foreground: *DEFAULT + foreground: *TYPE_PARAM - name: Rust Trait scope: @@ -2138,9 +2150,10 @@ tokenColors: foreground: *CLASS fontStyle: italic - - name: Rust Class / Enum + - name: Rust Class / Enum / Struct scope: - entity.name.type.rust + - entity.name.type.struct.rust - storage.class.std.rust settings: foreground: *CLASS @@ -2154,12 +2167,25 @@ tokenColors: - name: Rust Lifetime scope: - - entity.name.lifetime.rust + - entity.name.type.lifetime.rust + - punctuation.definition.lifetime.rust - storage.modifier.lifetime.rust settings: foreground: *TYPE_PARAM fontStyle: bold italic + - name: Rust Variable / Parameter + scope: + - variable.other.rust + settings: + foreground: *FUNCTION_PARAM + + - name: Rust Marco Function Call + scope: + - entity.name.function.macro.rust + settings: + foreground: *FUNCTION + fontStyle: italic # ============================================================================= # Angular Template # ============================================================================= diff --git a/vscode/test/sample.rs b/vscode/test/sample.rs index fdc587b..d75e62b 100644 --- a/vscode/test/sample.rs +++ b/vscode/test/sample.rs @@ -3516,4 +3516,17 @@ mod test_map { } } } + + unsafe fn a_function(count: &mut i64) -> ! { + count += 1; + 'label: loop { + println!("Hello\x20W\u{f3}rld!\u{abcdef}"); + } + } + + fn test() { + unsafe { + a_function(1); + } + } } From 19dc6b49517afa59bb1b1e29ad9761964b8c1196 Mon Sep 17 00:00:00 2001 From: Gary Lo Date: Sun, 13 Jun 2021 13:19:27 +0800 Subject: [PATCH 2/5] update version to 2.0.0 --- vscode/package-lock.json | 2 +- vscode/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/vscode/package-lock.json b/vscode/package-lock.json index f7ad63c..eefb436 100644 --- a/vscode/package-lock.json +++ b/vscode/package-lock.json @@ -1,6 +1,6 @@ { "name": "gapstylevs", - "version": "0.0.1", + "version": "2.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/vscode/package.json b/vscode/package.json index 178b4c7..067ca9f 100644 --- a/vscode/package.json +++ b/vscode/package.json @@ -2,7 +2,7 @@ "name": "gapstylevs", "displayName": "GapStyle VS", "description": "A productivity-oriented dark theme for VSCode, IntelliJ, XCode. Each supported language is tailor made and carefully tuned with rationale", - "version": "1.6.3", + "version": "2.0.0", "publisher": "gaplo917", "repository": { "type": "git", From f74a4a72225049f83dedd21aebed336a68f7874f Mon Sep 17 00:00:00 2001 From: Gary Lo Date: Mon, 25 Oct 2021 22:48:00 +0800 Subject: [PATCH 3/5] impl GapStyle VS 2.0 add Dart, Ruby, Erlang, Elixir support support C++, Python, Java semantic highlighting Huge rework on all markup language including CSS, Less, SASS, SCSS, YAML, TOML Huge rework on all template language including HTML, XML, JSX, Angular Template, Vue Template, JSP, Velocity, JADE --- .prettierrc.json | 2 +- intellij/GapStyle/META-INF/pluginIcon.svg | 1 + .../GapStyle/META-INF/pluginIcon_dark.svg | 1 + vscode/CHANGELOG.md | 7 + vscode/README.md | 50 +-- vscode/icon.png | Bin 12915 -> 49634 bytes vscode/package.json | 14 +- vscode/src/gapstyle.yml | 419 ++++++++++++++++-- vscode/test/.vscode/settings.json | 3 +- vscode/test/sample.css | 4 +- vscode/test/sample.dart | 134 ++++++ vscode/test/sample.erl | 27 ++ vscode/test/sample.ex | 240 ++++++++++ vscode/test/sample.go | 8 + vscode/test/sample.java | 2 +- vscode/test/sample.js | 4 +- vscode/test/sample.py | 2 + vscode/test/sample.rb | 34 ++ vscode/test/sample.rs | 32 ++ vscode/test/sample.scss | 4 + vscode/test/sample.toml | 86 ++-- 21 files changed, 946 insertions(+), 128 deletions(-) create mode 100644 intellij/GapStyle/META-INF/pluginIcon.svg create mode 100644 intellij/GapStyle/META-INF/pluginIcon_dark.svg create mode 100644 vscode/test/sample.dart create mode 100644 vscode/test/sample.erl create mode 100644 vscode/test/sample.ex create mode 100644 vscode/test/sample.rb diff --git a/.prettierrc.json b/.prettierrc.json index 9005559..f6b548e 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -13,7 +13,7 @@ { "files": "*.md", "options": { - "printWidth": 90, + "printWidth": 120, "proseWrap": "always" } } diff --git a/intellij/GapStyle/META-INF/pluginIcon.svg b/intellij/GapStyle/META-INF/pluginIcon.svg new file mode 100644 index 0000000..dc005f1 --- /dev/null +++ b/intellij/GapStyle/META-INF/pluginIcon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/intellij/GapStyle/META-INF/pluginIcon_dark.svg b/intellij/GapStyle/META-INF/pluginIcon_dark.svg new file mode 100644 index 0000000..dc005f1 --- /dev/null +++ b/intellij/GapStyle/META-INF/pluginIcon_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/vscode/CHANGELOG.md b/vscode/CHANGELOG.md index b5f20fa..f819f01 100644 --- a/vscode/CHANGELOG.md +++ b/vscode/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to the "gapstylevs" extension will be documented in this file. +## [2.0.0] - 2021-10-31 + +- Add Dart, Ruby, Erlang, Elixir support +- Support C++, Python, Java semantic highlighting +- Huge rework on all markup language including CSS, Less, SASS, SCSS, YAML, TOML +- Huge rework on all template language including HTML, XML, JSX, Angular Template, Vue Template, JSP, Velocity, JADE + ## [1.6.3] - 2020-05-10 - Support GraphQL for VSCode Plugin diff --git a/vscode/README.md b/vscode/README.md index 8ef0ae9..a8d8e64 100644 --- a/vscode/README.md +++ b/vscode/README.md @@ -1,30 +1,34 @@ -# GapStyle VS Theme +# GapStyle VS - Being Productive Beyond Your Status Quo. + +The world-first\* productivity-oriented color scheme for intelliJ, VSCode to fill the gap between programming languages +and human. ![screenshots](https://raw.githubusercontent.com/gaplo917/GapStyle/master/vscode/screenshots/sample.ts.png) -GapStyle is a **_productivity-oriented_** and **_semantic-driven_** designed color scheme -with a [list of supported languages](#actively-maintain-language). Each supported language -is tailor made and carefully tuned with -[rationale](https://github.com/gaplo917/gapstyle#gapstyle-specification). +GapStyle is a **_world-first_\*** **_productivity-oriented_** and **_semantic-highlighting-driven_** designed color +scheme that **_[each supported language](#actively-maintain-language)_** is tailored with +**_[rich colors while maintaining a comfortable contrast](#gapstyle-specification)_** to help developers boost reading +and writing speed in different programming languages. -GapStyle VS is designed with `semanticHighlighting` from draft, please -[enable semanticHighlighting](#enable-semantic-highlighting) for best syntax highlighting -experience. +\* world-first color scheme uses [https://github.com/gaplo917/GapStyle/tree/master/spec#color-palette](color affinity +design to boost developers' productivity by representing semantically similar syntax), i.e. class, abstract class, and +interface in Kotlin, Java, Scala, etc. See +[GapStyle Specification](https://github.com/gaplo917/GapStyle/tree/master/spec#color-palette) ## Objectives -- Optimize languages' color schemes to boost productivity on reading/writing code - (Especially the language your are not familiar) +- Optimize languages' color schemes to boost reading and writing speed on different languages. (Especially the language + you are not familiar) - Quickly learn similar syntax with a universal designed color across different languages -- Spot syntax error before IDE inspection +- Spot errors before program execution ## Actively Maintain Language -| IDE | Supported Language | -| -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| VSCode | Javascript, Typescript, C++, Go, Rust, Python, PHP, Kotlin, Java, Swift, Scala, GraphQL, HTML, XML, JSX, CSS/SCSS/SASS, YAML, TOML, SQL, Protobuf, Properties, Shell | -| IntelliJ | Kotlin, Java, Swift, Scala, Javascript, Typescript, GraphQL, Android Logcat, Gradle, C++, Go, Python, PHP, HTML, XML, JSX, CSS/SCSS/SASS, YAML, TOML, SQL, Protobuf, Properties, Shell | -| XCode | Swift, Objective C | +| IDE | Supported Language | +| ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| VSCode (Semantic Highlight) | Javascript, Typescript, C/C++, Java, Python | +| VSCode (Standard Syntax Highlight) | Rust, Ruby, Dart, Go, PHP, Kotlin, Swift, Scala, Erlang, Elixir,GraphQL, HTML, XML, JSX, CSS/SCSS/SASS, YAML, TOML, SQL, Protobuf, Properties, Shell, Angular, Vue.js | +| IntelliJ | Kotlin, Java, Swift, Dart, Rust, Scala, Javascript, Typescript, Go, Python, R, Android Logcat, Android Native (C / C++), Objective-C, SQL, HTML, CSS, PHP, Ruby, Erlang, Elixir | ## Enable Semantic Highlighting @@ -35,9 +39,7 @@ experience. ``` { "workbench.colorTheme": "GapStyle VS", - "editor.semanticTokenColorCustomizations": { - "enabled": true - } + "editor.semanticTokenColorCustomizations.enabled": true, } ``` @@ -50,20 +52,18 @@ experience. | [Hack](https://github.com/source-foundry/Hack) | VSCode | ❌ | Standard Hack font | [Download](https://github.com/source-foundry/Hack/releases) | 1. Install the recommended font into your system (i.e. Hack JBM Ligatured CCG) -1. Command + Shift + P -1. Search `settings.json` & Open -1. Paste the follow config +2. Command + Shift + P +3. Search `settings.json` & Open +4. Paste the follow config VSCode Editor Config (Full config) ``` { "workbench.colorTheme": "GapStyle VS", + "editor.semanticTokenColorCustomizations.enabled": true, "editor.fontFamily": "'Hack JBM Ligatured CCG', 'Hack', Menlo, Monaco, 'Courier New', monospace", "editor.fontLigatures": true, - "editor.semanticTokenColorCustomizations": { - "enabled": true - } } ``` diff --git a/vscode/icon.png b/vscode/icon.png index bc88259cb72dc7aeaa5e0968828db76daab52142..1dd6e253d7fe92361f94930c29127a85ca0a09e4 100644 GIT binary patch literal 49634 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 VGk(wFf(w9ODhitNwX&8`{|D+ec;o;8 literal 12915 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 a+Y68t>9?l+i75ZMgrumPNR5y|;Qs=2fi2Jg diff --git a/vscode/package.json b/vscode/package.json index 067ca9f..f4be10c 100644 --- a/vscode/package.json +++ b/vscode/package.json @@ -1,7 +1,7 @@ { "name": "gapstylevs", "displayName": "GapStyle VS", - "description": "A productivity-oriented dark theme for VSCode, IntelliJ, XCode. Each supported language is tailor made and carefully tuned with rationale", + "description": "A world-first* productivity-oriented designed color scheme.", "version": "2.0.0", "publisher": "gaplo917", "repository": { @@ -16,13 +16,13 @@ "Themes" ], "keywords": [ - "productivity", - "semantic-highlighting", - "monokai", - "dark", + "gapstyle", "theme", - "color-theme", - "gapstyle" + "color theme", + "monokai", + "one dark pro", + "semantic highlighting", + "productivity" ], "icon": "icon.png", "galleryBanner": { diff --git a/vscode/src/gapstyle.yml b/vscode/src/gapstyle.yml index a9b9f0f..67b9d89 100644 --- a/vscode/src/gapstyle.yml +++ b/vscode/src/gapstyle.yml @@ -28,13 +28,14 @@ variables: - &INTERFACE '#0ED38B' - &DECORATOR '#BBB529' - &XML_TAG '#E8BF6A' - - &XML_ATTR '#BABABA' - - &XML_STRING '#A5C261' + - &XML_ATTR '#CECECE' + - &XML_STRING '#6FD27C' - &JSON_PROPERTY '#CF8823' - &SASS_VAR '#6D9CBE' - &MACRO '#328F54' - &RELAX_MD_KEYWORD '#F96B9D' - &RELAX_MD_STRING '#E6DB85' + - &HIGHLIGHT_BG '#383A3C' colors: # From my faviourite One Dark Pro Theme activityBar.background: "#282c34" @@ -155,11 +156,22 @@ semanticTokenColors: foreground: *TYPE_PARAM typeParameter: - foreground: &TYPE_PARAM + foreground: *TYPE_PARAM class: foreground: *CLASS + class.typeArgument: + foreground: *TYPE_PARAM + + class.typeHint: + foreground: *TYPE_PARAM + fontStyle: '' + + class.builtin: + foreground: *KEYWORD + fontStyle: bold + class.defaultLibrary: fontStyle: italic foreground: *PREDEFINED @@ -173,6 +185,9 @@ semanticTokenColors: function: foreground: *FUNCTION + function.builtin: + fontStyle: italic + function.defaultLibrary: fontStyle: italic foreground: *FUNCTION @@ -181,6 +196,13 @@ semanticTokenColors: fontStyle: '' foreground: *FUNCTION + method: + foreground: *FUNCTION + + method.static: + foreground: *FUNCTION + fontStyle: italic + member: fontStyle: '' foreground: *FUNCTION @@ -195,12 +217,15 @@ semanticTokenColors: fontStyle: 'italic' foreground: *LOCAL_VAR + variable.global: + fontStyle: 'italic' + foreground: *PREDEFINED + variable.local: fontStyle: '' foreground: *LOCAL_VAR variable.readonly: - foreground: *LOCAL_VAR variable.defaultLibrary: @@ -227,6 +252,34 @@ semanticTokenColors: event: foreground: *DEFAULT + templateType: + foreground: *CLASS + + templateFunction: + foreground: *FUNCTION + + genericType: + foreground: *TYPE_PARAM + + label: + foreground: *DECORATOR + + newOperator: + foreground: *KEYWORD + + operatorOverload: + foreground: *FUNCTION + + memberOperatorOverload: + foreground: *FUNCTION + + referenceType: + fontStyle: italic + + selfParameter: + foreground: *KEYWORD + fontStyle: bold + tokenColors: # ============================================================================= # General @@ -263,6 +316,10 @@ tokenColors: - name: Strings scope: - string + - constant.other.symbol.double-quoted + - constant.other.symbol.double-quoted punctuation.definition.constant + - constant.other.symbol.single-quoted + - constant.other.symbol.single-quoted punctuation.definition.constant settings: foreground: *STRING @@ -422,7 +479,8 @@ tokenColors: scope: - entity.name.tag settings: - foreground: *KEYWORD + foreground: *XML_TAG + fontStyle: bold - name: Default attribute parent selectors ('&') scope: @@ -517,6 +575,7 @@ tokenColors: - name: Language Built-ins scope: - support + - source settings: foreground: *DEFAULT @@ -966,35 +1025,50 @@ tokenColors: - name: HTML Tag scope: - - text.html meta.tag entity.name.tag - - text.html meta.tag entity.name.tag + - meta.tag entity.name.tag.html + - meta.tag entity.name.tag.html - entity.name.tag.block.any.html - entity.name.tag.script.html + - entity.name.tag.style.html settings: - foreground: *KEYWORD + foreground: *XML_TAG fontStyle: bold + - name: HTML Tag Punctuation + scope: + - punctuation.definition.tag.begin.html + - punctuation.definition.tag.end.html + settings: + foreground: *DEFAULT + - name: HTML Attribute scope: - - text.html entity.other.attribute-name + - entity.other.attribute-name.html + - entity.other.attribute-name.id.html settings: - foreground: *ATTR_NAME - fontStyle: bold + foreground: *XML_ATTR + + - name: HTML Arrtibute Value + scope: + - punctuation.definition.string.begin.html + - punctuation.definition.string.end.html + - string.quoted.double.html + settings: + foreground: *XML_STRING - name: HTML Speical character scope: - constant.character.entity.numeric.hexadecimal.html - punctuation.definition.entity.html - - text.html constant.character.entity.named + - constant.character.entity.named.html settings: - foreground: *NUMBER + foreground: *SASS_VAR # ============================================================================= # XML # ============================================================================= - name: XML TAG scope: - - meta.tag.xml - meta.tag.xml entity.name.tag.localname.xml - meta.tag.xml entity.name.tag.namespace.xml - meta.tag.xml entity.other.attribute-name.namespace.xml @@ -1002,9 +1076,13 @@ tokenColors: - meta.tag.preprocessor.xml entity.name.tag.xml - meta.tag.sgml.doctype.xml keyword.other.doctype.xml - meta.tag.sgml.doctype.xml variable.language.documentroot.xml - - punctuation.definition.tag.xml settings: foreground: *XML_TAG + - name: XML TAG Punctuation + scope: + - punctuation.definition.tag.xml + settings: + foreground: *DEFAULT - name: XML Attribute scope: - meta.tag.xml entity.other.attribute-name.localname.xml @@ -1063,9 +1141,10 @@ tokenColors: scope: - meta.property-name support.type.property-name.css - support.type.vendored.property-name.css + - entity.other.attribute-name.css settings: - foreground: *ATTR_NAME - fontStyle: bold + foreground: *XML_ATTR + fontStyle: italic - name: Css HEX Color scope: @@ -1082,33 +1161,53 @@ tokenColors: - constant.language.color.rgb-value.css - source.css keyword.other.unit - support.constant.property-value.css + - support.constant.color.w3c-standard-color-name.css + - constant.numeric.css keyword.other.unit + - meta.attribute-selector.css string.quoted.double.css + - meta.attribute-selector.css string.quoted.double.css punctuation.definition.string.begin.css + - meta.attribute-selector.css string.quoted.double.css punctuation.definition.string.end.css settings: - foreground: *STRING + foreground: *XML_STRING fontStyle: '' - name: Css Function scope: - meta.function.color.css support.function.misc.css - support.constant.font-name.css + - source.css support.function settings: - foreground: *KEYWORD - fontStyle: bold + foreground: *XML_STRING + fontStyle: italic - - name: Css Keywords + - name: Css Selectors scope: - entity.other.attribute-name.id.css - entity.other.attribute-name.pseudo-element.css - entity.name.tag.css - entity.name.tag.custom.css - - constant.other.unicode-range.css - punctuation.definition.constant.css - support.constant.language-range.css - entity.other.attribute-name.class.css - entity.other.attribute-name.pseudo-class.css - support.type.property-name.css settings: - foreground: *KEYWORD + foreground: *XML_TAG fontStyle: bold + + - name: Css Unicode + scope: + - constant.other.unicode-range.css + - punctuation.separator.dash.unicode-range.css + settings: + foreground: *SASS_VAR + + - name: Css Import + scope: + - meta.at-rule.import.css string.quoted.double.css + settings: + foreground: *STRING + fontStyle: '' + # ============================================================================= # SASS / SCSS # ============================================================================= @@ -1116,8 +1215,41 @@ tokenColors: scope: - variable.scss - source.sass variable + - meta.property-list.css.scss.prop meta.property-value.css.scss support.constant.property-value.css.scss + - meta.property-list.css.scss.prop constant.character.module constant.character.module.name + - meta.property-list.css.sass.prop meta.property-value.css.sass support.constant.property-value.css.sass + - meta.property-list.css.sass.prop constant.character.module constant.character.module.name + settings: + foreground: *SASS_VAR + + - name: SASS/SCSS Modules + scope: + - meta.property-list.css.scss.prop meta.property-value.css.scss support.constant.property-value.css.scss + - meta.property-list.css.scss.prop constant.character.module constant.character.module.name + - meta.property-list.css.scss.prop constant.character.module constant.numeric.module.dot + - meta.property-list.css.sass.prop meta.property-value.css.sass support.constant.property-value.css.sass + - meta.property-list.css.sass.prop constant.character.module constant.character.module.name + - meta.property-list.css.sass.prop constant.character.module constant.numeric.module.dot settings: foreground: *SASS_VAR + fontStyle: underline + + - name: SASS/SCSS Keyword + scope: + - constant.other.scss + - support.type.property-name.css.sass + settings: + foreground: *KEYWORD + fontStyle: bold + + - name: SASS property function + scope: + - source.sass meta.property-list.css.sass.prop entity.name.function + - source.css.scss support.function.misc.scss + - source.css.scss meta.at-rule.include.scss entity.name.function.scss + settings: + foreground: *XML_TAG + fontStyle: italic - name: SASS Interpolation scope: @@ -1135,9 +1267,10 @@ tokenColors: scope: - support.type.property-name.css.sass.prop.name - entity.other.attribute-name.pseudo-class.css.sass + - entity.other.attribute-name.attribute.scss settings: - foreground: *ATTR_NAME - fontStyle: bold + foreground: *XML_ATTR + fontStyle: '' - name: SASS Symbol scope: @@ -1152,7 +1285,6 @@ tokenColors: scope: - comment.punctuation.comma.sass - comment.punctuation.comma.scss - - meta.property-value.scss - source.sass keyword.control.unit - source.scss keyword.control.unit - support.constant.property-value.css.sass @@ -1163,17 +1295,48 @@ tokenColors: - name: SASS Selector scope: - entity.name.tag.custom.scss - - constant.other.scss settings: + foreground: *XML_TAG fontStyle: bold - foreground: *KEYWORD - + + - name: SASS Attribute Selector + scope: + - meta.attribute-selector.scss + - string.quoted.double.attribute-value.scss punctuation.definition.string.begin.scss + - string.quoted.double.attribute-value.scss punctuation.definition.string.end.scss + - string.quoted.single.attribute-value.scss punctuation.definition.string.begin.scss + - string.quoted.single.attribute-value.scss punctuation.definition.string.end.scss + - string.quoted.double.css.sass + - string.quoted.single.css.sass + - support.constant.property-value.css.sass + - keyword.control.unit.css.sass + settings: + foreground: *XML_STRING + fontStyle: '' + + - name: SASS/SCSSS Mixin Function + scope: + - support.function.name.sass entity.name.function + - support.function.name.sass.library + - meta.property-list.css.sass.prop entity.name.function + - source.css.scss meta.at-rule.mixin.scss entity.name.function.scss + settings: + foreground: *XML_TAG + fontStyle: italic + + - name: SASS Function In Property + scope: + - meta.property-list.css.sass.prop entity.name.function + settings: + foreground: *XML_TAG + fontStyle: italic # ============================================================================= # Java # ============================================================================= - name: Java Keyword scope: - constant.language.java + - variable.language.this.java settings: foreground: *KEYWORD fontStyle: bold @@ -1382,6 +1545,8 @@ tokenColors: - name: Typescript / Javascript Decorator scope: - meta.decorator.ts # typescript + - source.ts meta.decorator.ts variable.other.readwrite.ts + - source.js meta.decorator entity.name.function settings: foreground: *DECORATOR @@ -1424,6 +1589,29 @@ tokenColors: - meta.tag.without-attributes.js punctuation.definition.tag.end settings: foreground: *XML_TAG + fontStyle: bold + + - name: JSX Component Punctuation + scope: + - meta.tag.tsx punctuation.definition.tag.begin + - meta.tag.jsx punctuation.definition.tag.begin + - meta.tag.ts punctuation.definition.tag.begin + - meta.tag.js punctuation.definition.tag.begin + - meta.tag.tsx punctuation.definition.tag.end + - meta.tag.jsx punctuation.definition.tag.end + - meta.tag.ts punctuation.definition.tag.end + - meta.tag.js punctuation.definition.tag.end + - meta.tag.without-attributes.tsx punctuation.definition.tag.begin + - meta.tag.without-attributes.jsx punctuation.definition.tag.begin + - meta.tag.without-attributes.ts punctuation.definition.tag.begin + - meta.tag.without-attributes.js punctuation.definition.tag.begin + - meta.tag.without-attributes.tsx punctuation.definition.tag.end + - meta.tag.without-attributes.jsx punctuation.definition.tag.end + - meta.tag.without-attributes.ts punctuation.definition.tag.end + - meta.tag.without-attributes.js punctuation.definition.tag.end + settings: + foreground: *DEFAULT + fontStyle: '' - name: JSX Attribute scope: @@ -1529,6 +1717,7 @@ tokenColors: - name: C++ Keywords scope: - meta.body.namespace.cpp + - variable.language.this.cpp settings: foreground: *KEYWORD @@ -1741,7 +1930,12 @@ tokenColors: settings: foreground: *KEYWORD fontStyle: bold - + - name: Go System Type + scope: + - source.go storage.type + settings: + foreground: *KEYWORD + fontStyle: bold # ============================================================================= # GraphQL (GraphQL for VSCode) # ============================================================================= @@ -1890,6 +2084,7 @@ tokenColors: - name: Protobuf Keyword scope: - constant.language.proto + - keyword.operator.proto settings: foreground: *KEYWORD fontStyle: bold @@ -1919,6 +2114,7 @@ tokenColors: - entity.name.tag.yaml settings: foreground: *MEMBER_VAR + fontStyle: '' - name: YAML Anchor scope: @@ -1957,15 +2153,17 @@ tokenColors: - entity.name.section.toml - variable.other.key.toml - entity.name.tag.toml + - keyword.key.toml settings: foreground: *MEMBER_VAR + fontStyle: '' - name: TOML Table / Array scope: - entity.other.attribute-name.table.toml - entity.other.attribute-name.table.array.toml settings: - foreground: *FUNCTION + foreground: *DEFAULT - name: TOML Keyword scope: @@ -1973,6 +2171,12 @@ tokenColors: settings: foreground: *KEYWORD fontStyle: bold + + - name: TOML Keys Keyword + scope: + - meta.tag.table.toml entity.other.attribute-name.table.toml + settings: + foreground: *RELAX_MD_KEYWORD # ============================================================================= # Java Properties / .ini @@ -1981,7 +2185,7 @@ tokenColors: scope: - source.ini settings: - foreground: *STRING + foreground: *DEFAULT fontStyle: '' - name: ini Properties Keys @@ -2193,8 +2397,13 @@ tokenColors: scope: - entity.other.ng-binding-name settings: - foreground: *MEMBER_VAR - + foreground: *FUNCTION_PARAM + - name: Angular Binding Punctuation + scope: + - meta.ng-binding punctuation.definition.string.begin.html + - meta.ng-binding punctuation.definition.string.end.html + settings: + foreground: *DEFAULT # ============================================================================= # Vue Template # ============================================================================= @@ -2202,5 +2411,147 @@ tokenColors: scope: - meta.directive.vue - meta.directive.vue entity.other.attribute-name.html + settings: + foreground: *FUNCTION_PARAM + - name: Vue Binding Punctuation + scope: + - meta.directive.vue + - meta.directive.vue source.directive.vue punctuation.definition.string.begin.html + - meta.directive.vue source.directive.vue punctuation.definition.string.end.html + settings: + foreground: *DEFAULT +# ============================================================================= +# Dart +# ============================================================================= + - name: Dart Keyword + scope: + - constant.language.dart + settings: + foreground: *KEYWORD + fontStyle: bold + - name: Dart Class + scope: + - support.class.dart + settings: + foreground: *CLASS + fontStyle: '' + - name: Dart Declaration + scope: + - meta.declaration.dart + settings: + foreground: *DEFAULT + fontStyle: '' + +# ============================================================================= +# Dart +# ============================================================================= + - name: Ruby symbol Hashkey + scope: + - constant.language.symbol.hashkey.ruby + settings: + foreground: *MEMBER_VAR + fontStyle: '' + + - name: Ruby variable + scope: + - variable.other.readwrite.instance.ruby + settings: + foreground: *FUNCTION_PARAM + fontStyle: '' + + - name: Ruby Global variable + scope: + - variable.other.readwrite.global.ruby + - variable.other.readwrite.global.ruby punctuation.definition.variable.ruby + - variable.other.readwrite.global.pre-defined.ruby + - variable.other.readwrite.global.pre-defined.ruby punctuation.definition.variable.ruby + settings: + foreground: *PREDEFINED + fontStyle: italic + + - name: Ruby Constant + scope: + - variable.other.constant.ruby + settings: + foreground: *PREDEFINED + fontStyle: '' + + - name: Ruby Special Method + scope: + - keyword.other.special-method.ruby + settings: + foreground: *FUNCTION + fontStyle: '' + + - name: Ruby Heredoc + scope: + - string.unquoted.heredoc.ruby punctuation.definition.string.begin.ruby + - string.unquoted.heredoc.ruby punctuation.definition.string.end.ruby + settings: + foreground: *KEYWORD + fontStyle: bold + + - name: Ruby Class + scope: + - variable.other.readwrite.class.ruby + - variable.other.readwrite.class.ruby punctuation.definition.variable.ruby + settings: + foreground: *CLASS + + - name: Ruby Interpolate String + scope: + - string.quoted.other.interpolated.ruby punctuation.section.array.begin.ruby + - string.quoted.other.interpolated.ruby punctuation.section.array.end.ruby + settings: + foreground: *STRING_INTERPOLATION +# ============================================================================= +# Erlang +# ============================================================================= + - name: Elixir Atom + scope: + - variable.other.erlang + - source.erlang constant.other.symbol + settings: + foreground: *MEMBER_VAR + +# ============================================================================= +# Elixir +# ============================================================================= + - name: Elixir Keywords + scope: + - constant.language.elixir + settings: + foreground: *KEYWORD + fontStyle: bold + + - name: Elixir Atom + scope: + - constant.other.symbol.elixir settings: foreground: *MEMBER_VAR + + - name: Elixir Language Variable + scope: + - variable.language.elixir + settings: + foreground: *PREDEFINED + + - name: Elixir Module + scope: + - variable.other.readwrite.module.elixir + - variable.other.readwrite.module.elixir punctuation.definition.variable.elixir + settings: + foreground: *DECORATOR + + - name: Elixir Variable + scope: + - source.elixir variable + settings: + foreground: *FUNCTION_PARAM + + - name: Elixir Embedded Source + scope: + - source.elixir.embedded.source + - punctuation.section.embedded.elixir + settings: + foreground: *STRING_INTERPOLATION diff --git a/vscode/test/.vscode/settings.json b/vscode/test/.vscode/settings.json index c67bf33..9a9dc74 100644 --- a/vscode/test/.vscode/settings.json +++ b/vscode/test/.vscode/settings.json @@ -3,6 +3,7 @@ "__locale": "cpp", "__string": "cpp", "string": "cpp", - "string_view": "cpp" + "string_view": "cpp", + "iostream": "cpp" } } \ No newline at end of file diff --git a/vscode/test/sample.css b/vscode/test/sample.css index 1a745f6..52f7125 100644 --- a/vscode/test/sample.css +++ b/vscode/test/sample.css @@ -24,4 +24,6 @@ div > p, p ~ ul, input [type="radio"] { color: red; } -&! \ No newline at end of file +:nth-child(4n) { + color: lime; +} \ No newline at end of file diff --git a/vscode/test/sample.dart b/vscode/test/sample.dart new file mode 100644 index 0000000..8971e0d --- /dev/null +++ b/vscode/test/sample.dart @@ -0,0 +1,134 @@ +// Copyright 2019 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/scheduler.dart' show timeDilation; +import 'package:flutter_gen/gen_l10n/gallery_localizations.dart'; +import 'package:flutter_localized_locales/flutter_localized_locales.dart'; +import 'package:gallery/constants.dart'; +import 'package:gallery/data/gallery_options.dart'; +import 'package:gallery/pages/backdrop.dart'; +import 'package:gallery/pages/splash.dart'; +import 'package:gallery/routes.dart'; +import 'package:gallery/themes/gallery_theme_data.dart'; +import 'package:google_fonts/google_fonts.dart'; + +export 'package:gallery/data/demos.dart' show pumpDeferredLibraries; + +void main() { + GoogleFonts.config.allowRuntimeFetching = false; + runApp(const GalleryApp()); +} + +mixin Piloted { + int astronauts = 1; + + void describeCrew() { + print('Number of astronauts: $astronauts'); + } +} + +abstract class Describable { + void describe(); + + void describeWithEmphasis() { + print('========='); + describe(); + print('========='); + } +} + +Future createDescriptions(Iterable objects) async { + for (final object in objects) { + try { + var file = File('$object.txt'); + if (await file.exists()) { + var modified = await file.lastModified(); + print( + 'File for $object already exists. It was modified on $modified.'); + continue; + } + await file.create(); + await file.writeAsString('Start describing $object in this file.'); + } on IOException catch (e) { + print('Cannot create description for $object: $e'); + } + } +} + +class GalleryApp extends StatelessWidget with Piloted { + const GalleryApp({ + Key key, + this.initialRoute, + this.isTestMode = false, + }) : super(key: key); + + final bool isTestMode; + final String initialRoute; + + @override + Widget build(BuildContext context) { + return ModelBinding( + initialModel: GalleryOptions( + themeMode: ThemeMode.system, + textScaleFactor: systemTextScaleFactorOption, + customTextDirection: CustomTextDirection.localeBased, + locale: null, + timeDilation: timeDilation, + platform: defaultTargetPlatform, + isTestMode: isTestMode, + ), + child: Builder( + builder: (context) { + return MaterialApp( + // By default on desktop, scrollbars are applied by the + // ScrollBehavior. This overrides that. All vertical scrollables in + // the gallery need to be audited before enabling this feature, + // see https://github.com/flutter/gallery/issues/523 + scrollBehavior: + const MaterialScrollBehavior().copyWith(scrollbars: false), + restorationScopeId: 'rootGallery', + title: 'Flutter Gallery', + debugShowCheckedModeBanner: false, + themeMode: GalleryOptions.of(context).themeMode, + theme: GalleryThemeData.lightThemeData.copyWith( + platform: GalleryOptions.of(context).platform, + ), + darkTheme: GalleryThemeData.darkThemeData.copyWith( + platform: GalleryOptions.of(context).platform, + ), + localizationsDelegates: const [ + ...GalleryLocalizations.localizationsDelegates, + LocaleNamesLocalizationsDelegate() + ], + initialRoute: initialRoute, + supportedLocales: GalleryLocalizations.supportedLocales, + locale: GalleryOptions.of(context).locale, + localeResolutionCallback: (locale, supportedLocales) { + deviceLocale = locale; + return locale; + }, + onGenerateRoute: RouteConfiguration.onGenerateRoute, + ); + }, + ), + ); + } +} + +class RootPage extends StatelessWidget { + const RootPage({ + Key key, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return const ApplyTextOptions( + child: SplashPage( + child: Backdrop(), + ), + ); + } +} \ No newline at end of file diff --git a/vscode/test/sample.erl b/vscode/test/sample.erl new file mode 100644 index 0000000..940aa41 --- /dev/null +++ b/vscode/test/sample.erl @@ -0,0 +1,27 @@ +%%% Module fact documentation +-module(fact). +-export([fac/1]). + +-record(state, {id, name}). + +-define(MACRO, macro_value). + +-type in() :: ok | hello . +-type out() :: ok | {error, term()}. + +%% Factorial implementation +%% @doc Documentation +fac(0) -> 1; +fac(N) when N > 0, is_integer(N) -> N * fac(N-1). + +string_sample(A) -> "string + second line". + +update_state(State) -> State#state{id=10}. + +-spec simple(in())-> out(). +simple(ok) -> ok. + +use_macro() -> io:format(?MACRO). + +-callback start_service() -> {ok, pid()}. \ No newline at end of file diff --git a/vscode/test/sample.ex b/vscode/test/sample.ex new file mode 100644 index 0000000..c012841 --- /dev/null +++ b/vscode/test/sample.ex @@ -0,0 +1,240 @@ +# Numbers +0b0101011 +1234 ; 0x1A ; 0xbeef ; 0763 ; 0o123 +3.14 ; 5.0e21 ; 0.5e-12 +100_000_000 + +# these are not valid numbers +0b012 ; 0xboar ; 0o888 +0B01 ; 0XAF ; 0O123 + +# Characters +?a ; ?1 ; ?\n ; ?\s ; ?\c ; ? ; ?, +?\x{12} ; ?\x{abcd} +?\x34 ; ?\xF + +# these show that only the first digit is part of the character +?\123 ; ?\12 ; ?\7 + +# Atoms +:this ; :that +:'complex atom' +:"with' \"\" 'quotes" +:" multi + line ' \s \123 \xff +atom" +:... ; :<<>> ; :%{} ; :% ; :{} +:++; :--; :*; :~~~; ::: +:% ; :. ; :<- + +# Strings +"Hello world" +"Interspersed \x{ff} codes \7 \8 \65 \016 and \t\s\\s\z\+ \\ escapes" +"Quotes ' inside \" \123 the \"\" \xF \\xF string \\\" end" +"Multiline + string" + +# Char lists +'this is a list' +'escapes \' \t \\\'' +'Multiline + char + list +' + +# Binaries +<<1, 2, 3>> +<<"hello"::binary, c :: utf8, x:: 4 * 2>> = "hello™1" + +# Sigils +~r/this + i\s "a" regex/ +~R'this + i\s "a" regex too' +~w(hello #{ ["has" <> "123", '\c\d', "\123 interpol" | []] } world)s +~W(hello #{no "123" \c\d \123 interpol} world)s + +~s{Escapes terminators \{ and \}, but no {balancing} # outside of sigil here } + +~S"No escapes \s\t\n and no #{interpolation}" + +:"atoms work #{"to" <> "o"}" + +# Operators +x = 1 + 2.0 * 3 +y = true and false; z = false or true +... = 144 +... == !x && y || z +"hello" |> String.upcase |> String.downcase() +{^z, a} = {true, x} + +# Free operators (added in 1.0.0) +p ~>> f = bind(p, f) +p1 ~> p2 = pair_right(p1, p2) +p1 <~ p2 = pair_left(p1, p2) +p1 <~> p2 = pair_both(p1, p2) +p1 <|> p2 = either(p1, p2) + +# Lists, tuples, maps, keywords +[1, :a, 'hello'] ++ [2, 3] +[:head | [?t, ?a, ?i, ?l]] + +{:one, 2.0, "three"} + +[...: "this", <<>>: "is", %{}: "a keyword", %: "list", {}: "too"] +["this is an atom too": 1, "so is this": 2] +[option: "value", key: :word] +[++: "operator", ~~~: :&&&] + +map = %{shortcut: "syntax"} +%{map | "update" => "me"} +%{ 12 => 13, :weird => ['thing'] } + +# Comprehensions +for x <- 1..10, x < 5, do: {x, x} +pixels = "12345678" +for << <> <- pixels >> do + [r, {g, %{"b" => a}}] +end + +# String interpolation +"String #{inspect "interpolation"} is quite #{1+4+7} difficult" + +# Identifiers +abc_123 = 1 +_018OP = 2 +A__0 == 3 + +# Modules +defmodule Long.Module.Name do + @moduledoc "Simple module docstring" + + @doc """ + Multiline docstring + "with quotes" + and #{ inspect %{"interpolation" => "in" <> "action"} } + now with #{ {:a, 'tuple'} } + and #{ inspect { + :tuple, + %{ with: "nested #{ inspect %{ :interpolation => %{} } }" } + } } + """ + defstruct [:a, :name, :height] + + @doc ~S''' + No #{interpolation} of any kind. + \000 \x{ff} + + \n #{\x{ff}} + ''' + def func(a, b \\ []), do: :ok + + @doc false + def __before_compile__(_) do + :ok + end +end + +# Structs +defmodule Second.Module do + s = %Long.Module.Name{name: "Silly"} + %Long.Module.Name{s | height: {192, :cm}} + ".. #{%Long.Module.Name{s | height: {192, :cm}}} .." +end + +# Types, pseudo-vars, attributes +defmodule M do + @custom_attr :some_constant + + @before_compile Long.Module.Name + + @typedoc "This is a type" + @type typ :: integer + + @typedoc "Type with parameters" + @type parameterized(type_parameter) :: type_parameter + + @typedoc """ + Another type + """ + @opaque typtyp :: 1..10 + + @doc """ + Will be called by M to `func` the `typ` with the `typtyp` + """ + @callback func(typ, typtyp) :: :ok | :fail + + @spec func(typ, typtyp) :: :ok | :fail + def func(a, b) do + a || b || :ok || :fail + Path.expand("..", __DIR__) + IO.inspect __ENV__ + __NOTAPSEUDOVAR__ = 11 + __MODULE__.func(b, a) + end + + defmacro m() do + __CALLER__ + end +end + +# Functions +anon = fn x, y, z -> + fn(a, b, c) -> + &(x + y - z * a / &1 + b + div(&2, c)) + end +end + +&Set.put(&1, &2) ; & Set.put(&1, &2) ; &( Set.put(&1, &1) ) + +# Function calls +anon.(1, 2, 3); self; hd([1,2,3]) +Kernel.spawn(fn -> :ok end) +IO.ANSI.black + +# Control flow +if :this do + :that +else + :otherwise +end + +pid = self +receive do + {:EXIT, _} -> :done + {^pid, :_} -> nil + after 100 -> :no_luck +end + +case __ENV__.line do + x when is__integer(x) -> x + x when x in 1..12 -> -x +end + +cond do + false -> "too bad" + 4 > 5 -> "oops" + true -> nil +end + +# Lexical scope modifiers +import Kernel, except: [spawn: 1, +: 2, /: 2, unless: 2] +alias Long.Module.Name, as: N0men123_and4 +use Bitwise + +4 &&& 5 +2 <<< 3 + +# Protocols +defprotocol Useless do + def func1(this) + def func2(that) +end + +defimpl Useless, for: Atom do +end + +# Exceptions +defmodule NotAnError do + defexception [:message] +end + +raise NotAnError, message: "This is not an error" diff --git a/vscode/test/sample.go b/vscode/test/sample.go index c9dfab0..248e30f 100644 --- a/vscode/test/sample.go +++ b/vscode/test/sample.go @@ -1,6 +1,8 @@ /* * Go highlight sample */ +//go:build (linux || windows) && arm +// +build linux,arm windows,arm // Package main package main @@ -39,6 +41,10 @@ type ( } demoInt int + + type T struct { + FirstName string `json:"first_name" arbitrary text` + } ) const ( @@ -51,11 +57,13 @@ var ( privateVar = 2 ) +// PublicFunc does the thing func PublicFunc() int { localVar := PublicVar return localVar } +// privateFunc does the thing func privateFunc() (int, int) { LocalVar := privateVar return LocalVar, PublicVar diff --git a/vscode/test/sample.java b/vscode/test/sample.java index a51a161..925d96d 100644 --- a/vscode/test/sample.java +++ b/vscode/test/sample.java @@ -27,7 +27,7 @@ public class SomeClass { // some comment * @param param3 */ public SomeClass(AnInterface param1, int[] reassignedParam, - int param2 + int param2, int param3) { int reassignedValue = this.staticField + param2 + param3; long localVar1, localVar2, localVar3, localVar4; diff --git a/vscode/test/sample.js b/vscode/test/sample.js index d88f975..dfebca5 100644 --- a/vscode/test/sample.js +++ b/vscode/test/sample.js @@ -30,7 +30,9 @@ function AjaxRequest(url) { a -= 1 a != 1 - throw new Error({ foo: 'bar' }) + const b = true + + throw new Error({ foo: 'bar', b }) } diff --git a/vscode/test/sample.py b/vscode/test/sample.py index 94ff94d..4573c95 100644 --- a/vscode/test/sample.py +++ b/vscode/test/sample.py @@ -1,3 +1,5 @@ +from typing import List + @decorator(param=1) def f(x): """ Syntax Highlighting Demo diff --git a/vscode/test/sample.rb b/vscode/test/sample.rb new file mode 100644 index 0000000..cef9fc1 --- /dev/null +++ b/vscode/test/sample.rb @@ -0,0 +1,34 @@ +require "test" +CONSTANT = 777 + +# Sample comment + +class Module::Class + include Testcase + + render :action => 'foo' + def foo(parameter) + @parameter = parameter + end + + local_var = eval <<-"FOO";\ + printIndex "Hello world!" + And now this is heredoc! + printIndex "Hello world again!" + FOO + foo("#{$GLOBAL_TIME >> $`} is \Z sample \"string\"" * 777); + if ($1 =~ /sample regular expression/ni) + begin + puts %W(sample words), CONSTANT, :fooo; + do_something :action => "action" + end + expect{counter[0]}.to_be eq 1 + json = { + id: id, + guid: guid, + } + json.merge!(name: profile.name) + 1.upto(@@n) do |index| printIndex 'Hello' + index end + \\\\\\\\\\ + end +end \ No newline at end of file diff --git a/vscode/test/sample.rs b/vscode/test/sample.rs index d75e62b..5b265bc 100644 --- a/vscode/test/sample.rs +++ b/vscode/test/sample.rs @@ -3529,4 +3529,36 @@ mod test_map { a_function(1); } } + + #[actix_rt::test] + async fn test_data() { + let srv = init_service( + App::new() + .data(1.0f64) + .data(1usize) + .app_data(web::Data::new('-')) + .service( + web::resource("/test") + .data(10usize) + .app_data(web::Data::new('*')) + .guard(guard::Get()) + .to( + |data1: web::Data, + data2: web::Data, + data3: web::Data| { + assert_eq!(**data1, 10); + assert_eq!(**data2, '*'); + let error = std::f64::EPSILON; + assert!((**data3 - 1.0).abs() < error); + HttpResponse::Ok() + }, + ), + ), + ) + .await; + + let req = TestRequest::get().uri("/test").to_request(); + let resp = call_service(&srv, req).await; + assert_eq!(resp.status(), StatusCode::OK); + } } diff --git a/vscode/test/sample.scss b/vscode/test/sample.scss index 208b397..5610ff7 100644 --- a/vscode/test/sample.scss +++ b/vscode/test/sample.scss @@ -42,6 +42,10 @@ $padding: 1% !default; } } +:nth-child(4n) { + color: lime; +} + @font-face { font-family: DroidSans; src: url(DroidSans.ttf); diff --git a/vscode/test/sample.toml b/vscode/test/sample.toml index 6033938..f060407 100644 --- a/vscode/test/sample.toml +++ b/vscode/test/sample.toml @@ -1,60 +1,32 @@ -# traefik.toml -logLevel = "DEBUG" -defaultEntryPoints = ["http", "https"] -[entryPoints] - [entryPoints.http] - address = ":80" - [entryPoints.http.redirect] - entryPoint = "https" - [entryPoints.https] - address = ":443" - [entryPoints.https.tls] - [[entryPoints.https.tls.certificates]] - CertFile = "integration/fixtures/https/snitest.com.cert" - KeyFile = "integration/fixtures/https/snitest.com.key" - [[entryPoints.https.tls.certificates]] - CertFile = "integration/fixtures/https/snitest.org.cert" - KeyFile = "integration/fixtures/https/snitest.org.key" +# This is a TOML document. -[file] +title = "TOML Example" +description = """ + Multiline + description +""" +date = 2019-11-04T07:32:00-08:00 -# rules -[backends] - [backends.backend1] - [backends.backend1.circuitbreaker] - expression = "NetworkErrorRatio() > 0.5" - [backends.backend1.servers.server1] - url = "http://172.17.0.2:80" - weight = 10 - [backends.backend1.servers.server2] - url = "http://172.17.0.3:80" - weight = 1 - [backends.backend2] - [backends.backend1.maxconn] - amount = 10 - extractorfunc = "request.host" - [backends.backend2.LoadBalancer] - method = "drr" - [backends.backend2.servers.server1] - url = "http://172.17.0.4:80" - weight = 1 - [backends.backend2.servers.server2] - url = "http://172.17.0.5:80" - weight = 2 +[database] +server = "192.168.1.1" +ports = [ 8001, 8001, 8002 ] +"connection_max" = 5000 +enabled = true -[frontends] - [frontends.frontend1] - backend = "backend2" - [frontends.frontend1.routes.test_1] - rule = "Host:test.localhost" - [frontends.frontend2] - backend = "backend1" - passHostHeader = true - priority = 10 - entrypoints = ["https"] # overrides defaultEntryPoints - [frontends.frontend2.routes.test_1] - rule = "Host:{subdomain:[a-z]+}.localhost" - [frontends.frontend3] - entrypoints = ["http", "https"] # overrides defaultEntryPoints - backend = "backend2" - rule = "Path:/test" \ No newline at end of file +[servers] +alpha = { ip = '10.0.0.1', dc = "eqdc10" } +beta = { ip = '10.0.0.2', dc = "eqdc10" } + +[clients] +data = [ ["gamma", "delta"], [1.0, 2.0] ] + +hosts = [ + "alpha", + "omega", +] + +valid-escapes = """\tline \"1\" + line\u00202 + line 3\U0000002E +""" +invalid-escapes = "\a \u20 \U0020" From bd2134abd30e443e91ed133575074ef57acfe337 Mon Sep 17 00:00:00 2001 From: Gary Lo Date: Sun, 31 Oct 2021 18:29:25 +0800 Subject: [PATCH 4/5] update vsce and release documentation --- vscode/RELEASE.md | 8 + vscode/package-lock.json | 413 +++++++++++++++++++++++++-------------- vscode/package.json | 2 +- 3 files changed, 277 insertions(+), 146 deletions(-) diff --git a/vscode/RELEASE.md b/vscode/RELEASE.md index aa583da..a312af2 100644 --- a/vscode/RELEASE.md +++ b/vscode/RELEASE.md @@ -17,3 +17,11 @@ Update `README.md` 1. Run `npm run publish` (May need to `npx vsce login gaplo917`) + +### Generate Personal Access Token + +Read + +- https://code.visualstudio.com/api/working-with-extensions/publishing-extension + +- https://dev.azure.com/gaplotech/_usersSettings/tokens diff --git a/vscode/package-lock.json b/vscode/package-lock.json index eefb436..dcf5ec3 100644 --- a/vscode/package-lock.json +++ b/vscode/package-lock.json @@ -4,12 +4,6 @@ "lockfileVersion": 1, "requires": true, "dependencies": { - "@types/node": { - "version": "13.9.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.9.8.tgz", - "integrity": "sha512-1WgO8hsyHynlx7nhP1kr0OFzsgKz5XDQL+Lfc3b1Q3qIln/n8cKD4m09NJ0+P1Rq7Zgnc7N0+SsMnoD1rEb0kA==", - "dev": true - }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -60,15 +54,13 @@ } }, "azure-devops-node-api": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-7.2.0.tgz", - "integrity": "sha512-pMfGJ6gAQ7LRKTHgiRF+8iaUUeGAI0c8puLaqHLc7B8AR7W6GJLozK9RFeUHFjEGybC9/EB3r67WPd7e46zQ8w==", + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-11.0.1.tgz", + "integrity": "sha512-YMdjAw9l5p/6leiyIloxj3k7VIvYThKjvqgiQn88r3nhT93ENwsoDS3A83CyJ4uTWzCZ5f5jCi6c27rTU5Pz+A==", "dev": true, "requires": { - "os": "0.1.1", - "tunnel": "0.0.4", - "typed-rest-client": "1.2.0", - "underscore": "1.8.3" + "tunnel": "0.0.6", + "typed-rest-client": "^1.8.4" } }, "balanced-match": { @@ -129,6 +121,16 @@ "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", "dev": true }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "camelcase": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", @@ -153,17 +155,31 @@ } }, "cheerio": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", - "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", + "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", "dev": true, "requires": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.1", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash": "^4.15.0", - "parse5": "^3.0.1" + "cheerio-select": "^1.5.0", + "dom-serializer": "^1.3.2", + "domhandler": "^4.2.0", + "htmlparser2": "^6.1.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "tslib": "^2.2.0" + } + }, + "cheerio-select": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", + "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "css-what": "^5.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0", + "domutils": "^2.7.0" } }, "chokidar": { @@ -210,9 +226,9 @@ "dev": true }, "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", "dev": true }, "concat-map": { @@ -262,21 +278,22 @@ "dev": true }, "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", "dev": true, "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" } }, "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", "dev": true }, "debug": { @@ -300,45 +317,41 @@ "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=", "dev": true }, - "didyoumean": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.1.tgz", - "integrity": "sha1-6S7f2tplN9SE1zwBcv0eugxJdv8=", - "dev": true - }, "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" } }, "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "dev": true }, "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", + "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", "dev": true, "requires": { - "domelementtype": "1" + "domelementtype": "^2.2.0" } }, "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" } }, "dot-prop": { @@ -357,9 +370,9 @@ "dev": true }, "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true }, "escape-string-regexp": { @@ -420,6 +433,23 @@ "dev": true, "optional": true }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", @@ -427,9 +457,9 @@ "dev": true }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -483,24 +513,63 @@ "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", "dev": true }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "dev": true, "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" } }, "ignore-by-default": { @@ -662,6 +731,12 @@ "package-json": "^4.0.0" } }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, "linkify-it": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", @@ -672,9 +747,9 @@ } }, "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "lowercase-keys": { @@ -703,16 +778,24 @@ } }, "markdown-it": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz", - "integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", + "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", "dev": true, "requires": { "argparse": "^1.0.7", - "entities": "~1.1.1", + "entities": "~2.0.0", "linkify-it": "^2.0.0", "mdurl": "^1.0.1", "uc.micro": "^1.0.5" + }, + "dependencies": { + "entities": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", + "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", + "dev": true + } } }, "mdurl": { @@ -797,14 +880,20 @@ } }, "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", "dev": true, "requires": { - "boolbase": "~1.0.0" + "boolbase": "^1.0.0" } }, + "object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "dev": true + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -814,12 +903,6 @@ "wrappy": "1" } }, - "os": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/os/-/os-0.1.1.tgz", - "integrity": "sha1-IIhF6J4ZOtTZcUdLk5R3NqVtE/M=", - "dev": true - }, "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", @@ -870,12 +953,18 @@ } }, "parse5": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", - "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", "dev": true, "requires": { - "@types/node": "*" + "parse5": "^6.0.1" } }, "path-is-absolute": { @@ -932,6 +1021,15 @@ "integrity": "sha512-xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8YwtSVh0xz6UeWc5Oh5A==", "dev": true }, + "qs": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -953,17 +1051,6 @@ "mute-stream": "~0.0.4" } }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, "readdirp": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", @@ -992,12 +1079,27 @@ "rc": "^1.0.1" } }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, "safe-buffer": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", "dev": true }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -1028,6 +1130,17 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", @@ -1050,15 +1163,6 @@ "strip-ansi": "^4.0.0" } }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -1111,12 +1215,12 @@ "dev": true }, "tmp": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz", - "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, "requires": { - "os-tmpdir": "~1.0.1" + "rimraf": "^3.0.0" } }, "to-regex-range": { @@ -1137,20 +1241,27 @@ "nopt": "~1.0.10" } }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true + }, "tunnel": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz", - "integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM=", + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", "dev": true }, "typed-rest-client": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.2.0.tgz", - "integrity": "sha512-FrUshzZ1yxH8YwGR29PWWnfksLEILbWJydU7zfIRkyH7kAEzB62uMAl2WY6EyolWpLpVHeJGgQm45/MaruaHpw==", + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.6.tgz", + "integrity": "sha512-xcQpTEAJw2DP7GqVNECh4dD+riS+C1qndXLfBCJ3xk0kqprtGN491P5KlmrDbKdtuW8NEcP/5ChxiJI3S9WYTA==", "dev": true, "requires": { - "tunnel": "0.0.4", - "underscore": "1.8.3" + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" } }, "uc.micro": { @@ -1186,9 +1297,9 @@ } }, "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz", + "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==", "dev": true }, "unique-string": { @@ -1239,36 +1350,32 @@ "prepend-http": "^1.0.1" } }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, "vsce": { - "version": "1.74.0", - "resolved": "https://registry.npmjs.org/vsce/-/vsce-1.74.0.tgz", - "integrity": "sha512-8zWM9bZBNn9my40kkxAxdY4nhb9ADfazXsyDgx1thbRaLPbmPTlmqQ55vCAyWYFEi6XbJv8w599vzVUqsU1gHg==", + "version": "1.100.2", + "resolved": "https://registry.npmjs.org/vsce/-/vsce-1.100.2.tgz", + "integrity": "sha512-eDeubJNc0iav6mbTESZ90E9WcSzqAAl/lunb4KbNjRrz9tf+657i1mKhnWUyvK7Y4D8kN5NBD2FXD4FFMZj7ig==", "dev": true, "requires": { - "azure-devops-node-api": "^7.2.0", + "azure-devops-node-api": "^11.0.1", "chalk": "^2.4.2", - "cheerio": "^1.0.0-rc.1", - "commander": "^2.8.1", + "cheerio": "^1.0.0-rc.9", + "commander": "^6.1.0", "denodeify": "^1.2.1", - "didyoumean": "^1.2.1", "glob": "^7.0.6", + "hosted-git-info": "^4.0.2", + "leven": "^3.1.0", "lodash": "^4.17.15", - "markdown-it": "^8.3.1", + "markdown-it": "^10.0.0", "mime": "^1.3.4", "minimatch": "^3.0.3", "osenv": "^0.1.3", "parse-semver": "^1.1.1", "read": "^1.0.7", "semver": "^5.1.0", - "tmp": "0.0.29", - "typed-rest-client": "1.2.0", + "tmp": "^0.2.1", + "typed-rest-client": "^1.8.4", "url-join": "^1.1.0", + "xml2js": "^0.4.23", "yauzl": "^2.3.1", "yazl": "^2.2.2" } @@ -1314,6 +1421,22 @@ "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", "dev": true }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dev": true, + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true + }, "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", diff --git a/vscode/package.json b/vscode/package.json index f4be10c..930dee9 100644 --- a/vscode/package.json +++ b/vscode/package.json @@ -49,6 +49,6 @@ "js-yaml": "^3.13.1", "nodemon": "^2.0.2", "tinycolor2": "^1.4.1", - "vsce": "^1.74.0" + "vsce": "^1.100.2" } } From 9f82d411cf06898625f41b359adfa421b2253924 Mon Sep 17 00:00:00 2001 From: Gary Lo Date: Sun, 31 Oct 2021 18:30:50 +0800 Subject: [PATCH 5/5] add MIT license --- vscode/LICENSE | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 vscode/LICENSE diff --git a/vscode/LICENSE b/vscode/LICENSE new file mode 100644 index 0000000..5331769 --- /dev/null +++ b/vscode/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 Gary Lo + +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.