From a65a6ecb2ef41992c776c47a3b342b1dbde95fad Mon Sep 17 00:00:00 2001 From: timdeschryver <28659384+timdeschryver@users.noreply.github.com> Date: Sat, 12 Jun 2021 17:55:46 +0200 Subject: [PATCH 1/3] feat: add vscode highlight extension --- .eslintrc.json | 2 +- projects/vscode-atl-render/.gitattributes | 2 + projects/vscode-atl-render/.gitignore | 2 + .../vscode-atl-render/.vscode/launch.json | 17 ++++++ projects/vscode-atl-render/.vscodeignore | 4 ++ projects/vscode-atl-render/CHANGELOG.md | 7 +++ projects/vscode-atl-render/README.md | 3 + .../language-configuration.json | 30 ++++++++++ projects/vscode-atl-render/package.json | 46 +++++++++++++++ .../syntaxes/atl-render.json | 59 +++++++++++++++++++ 10 files changed, 171 insertions(+), 1 deletion(-) create mode 100644 projects/vscode-atl-render/.gitattributes create mode 100644 projects/vscode-atl-render/.gitignore create mode 100644 projects/vscode-atl-render/.vscode/launch.json create mode 100644 projects/vscode-atl-render/.vscodeignore create mode 100644 projects/vscode-atl-render/CHANGELOG.md create mode 100644 projects/vscode-atl-render/README.md create mode 100644 projects/vscode-atl-render/language-configuration.json create mode 100644 projects/vscode-atl-render/package.json create mode 100644 projects/vscode-atl-render/syntaxes/atl-render.json diff --git a/.eslintrc.json b/.eslintrc.json index fabe0fbc..5125274f 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -49,7 +49,7 @@ "@typescript-eslint/quotes": "off", "@typescript-eslint/type-annotation-spacing": "error", "@typescript-eslint/no-explicit-any": "off", - "arrow-body-style": "error", + "arrow-body-style": "off", "brace-style": ["error", "1tbs"], "curly": "error", "eol-last": "error", diff --git a/projects/vscode-atl-render/.gitattributes b/projects/vscode-atl-render/.gitattributes new file mode 100644 index 00000000..70e63fff --- /dev/null +++ b/projects/vscode-atl-render/.gitattributes @@ -0,0 +1,2 @@ +# Set default behavior to automatically normalize line endings. +* text=auto diff --git a/projects/vscode-atl-render/.gitignore b/projects/vscode-atl-render/.gitignore new file mode 100644 index 00000000..aeee7322 --- /dev/null +++ b/projects/vscode-atl-render/.gitignore @@ -0,0 +1,2 @@ +node_modules +*.vsix diff --git a/projects/vscode-atl-render/.vscode/launch.json b/projects/vscode-atl-render/.vscode/launch.json new file mode 100644 index 00000000..0e191b59 --- /dev/null +++ b/projects/vscode-atl-render/.vscode/launch.json @@ -0,0 +1,17 @@ +// A launch configuration that launches the extension inside a new window +// Use IntelliSense to learn about possible attributes. +// Hover to view descriptions of existing attributes. +// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Extension", + "type": "extensionHost", + "request": "launch", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}" + ] + } + ] +} \ No newline at end of file diff --git a/projects/vscode-atl-render/.vscodeignore b/projects/vscode-atl-render/.vscodeignore new file mode 100644 index 00000000..f369b5e5 --- /dev/null +++ b/projects/vscode-atl-render/.vscodeignore @@ -0,0 +1,4 @@ +.vscode/** +.vscode-test/** +.gitignore +vsc-extension-quickstart.md diff --git a/projects/vscode-atl-render/CHANGELOG.md b/projects/vscode-atl-render/CHANGELOG.md new file mode 100644 index 00000000..09698dbf --- /dev/null +++ b/projects/vscode-atl-render/CHANGELOG.md @@ -0,0 +1,7 @@ +# Change Log + +All notable changes to the "vscode-testing-library-render" extension will be documented in this file. + +## 0.0.1 + +- Initial release diff --git a/projects/vscode-atl-render/README.md b/projects/vscode-atl-render/README.md new file mode 100644 index 00000000..3e9172d2 --- /dev/null +++ b/projects/vscode-atl-render/README.md @@ -0,0 +1,3 @@ +# vscode-atl-render + +[Download link](https://marketplace.visualstudio.com/manage/publishers/timdeschryver/extensions/vscode-atl-render/hub?_a=acquisition) diff --git a/projects/vscode-atl-render/language-configuration.json b/projects/vscode-atl-render/language-configuration.json new file mode 100644 index 00000000..20297c33 --- /dev/null +++ b/projects/vscode-atl-render/language-configuration.json @@ -0,0 +1,30 @@ +{ + "comments": { + "blockComment": [""] + }, + "brackets": [ + [""], + ["<", ">"], + ["{", "}"], + ["(", ")"], + ["[", "]"] + ], + "autoClosingPairs": [ + { "open": "{", "close": "}" }, + { "open": "[", "close": "]" }, + { "open": "(", "close": ")" }, + { "open": "'", "close": "'" }, + { "open": "\"", "close": "\"" }, + { "open": "", "notIn": ["comment", "string"] }, + { "open": "/**", "close": "*/", "notIn": ["string"] } + ], + "surroundingPairs": [ + { "open": "'", "close": "'" }, + { "open": "\"", "close": "\"" }, + { "open": "`", "close": "`" }, + { "open": "{", "close": "}" }, + { "open": "[", "close": "]" }, + { "open": "(", "close": ")" }, + { "open": "<", "close": ">" } + ] +} diff --git a/projects/vscode-atl-render/package.json b/projects/vscode-atl-render/package.json new file mode 100644 index 00000000..f4573f28 --- /dev/null +++ b/projects/vscode-atl-render/package.json @@ -0,0 +1,46 @@ +{ + "name": "vscode-atl-render", + "displayName": "vscode-atl-render", + "description": "HTML highlighting in ATL the render method", + "version": "0.0.1", + "publisher": "timdeschryver", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/testing-library/angular-testing-library.git" + }, + "homepage": "https://github.com/testing-library/angular-testing-library/blob/main/README.md", + "engines": { + "vscode": "^1.57.0" + }, + "categories": [ + "Programming Languages" + ], + "contributes": { + "configuration": [ + { + "id": "atl-render", + "title": "Angular Testing Library Render", + "properties": { + "atl-render.format.enabled": { + "type": "boolean", + "description": "Enable/disable formatting of render template strings.", + "default": true + } + } + } + ], + "grammars": [ + { + "scopeName": "atl.render", + "path": "./syntaxes/atl-render.json", + "injectTo": [ + "source.ts" + ], + "embeddedLanguages": { + "text.html": "html" + } + } + ] + } +} diff --git a/projects/vscode-atl-render/syntaxes/atl-render.json b/projects/vscode-atl-render/syntaxes/atl-render.json new file mode 100644 index 00000000..f55ae767 --- /dev/null +++ b/projects/vscode-atl-render/syntaxes/atl-render.json @@ -0,0 +1,59 @@ +{ + "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", + "scopeName": "atl.render", + "injectionSelector": "L:source.ts -comment -(string -text.html)", + "name": "atl.render", + "patterns": [ + { + "include": "#renderMethod" + } + ], + "repository": { + "renderMethod": { + "name": "renderMethod", + "begin": "(?x)(\\b(?:\\w+\\.)*(?:render)\\s*)(\\()", + "beginCaptures": { + "1": { + "name": "entity.name.function.ts" + }, + "2": { + "name": "meta.brace.round.ts" + } + }, + "end": "(\\))", + "endCaptures": { + "0": { + "name": "meta.brace.round.ts" + } + }, + "patterns": [ + { + "include": "#renderTemplate" + } + ] + }, + "renderTemplate": { + "contentName": "text.html", + "begin": "\\G\\s*([`|'|\"])", + "beginCaptures": { + "1": { + "name": "string" + } + }, + "end": "\\1", + "endCaptures": { + "0": { + "name": "string" + } + }, + "patterns": [ + { + "include": "text.html.derivative" + }, + { + "include": "template.ng" + } + ] + } + } +} From 77b1823d2461d570c9e758022b5f14df797c8dbc Mon Sep 17 00:00:00 2001 From: timdeschryver <28659384+timdeschryver@users.noreply.github.com> Date: Sun, 13 Jun 2021 08:16:08 +0200 Subject: [PATCH 2/3] fix(vscode-atl-render): highlight on next line --- projects/vscode-atl-render/CHANGELOG.md | 6 +++++- projects/vscode-atl-render/package.json | 2 +- projects/vscode-atl-render/syntaxes/atl-render.json | 11 +++++++---- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/projects/vscode-atl-render/CHANGELOG.md b/projects/vscode-atl-render/CHANGELOG.md index 09698dbf..9e5603b5 100644 --- a/projects/vscode-atl-render/CHANGELOG.md +++ b/projects/vscode-atl-render/CHANGELOG.md @@ -2,6 +2,10 @@ All notable changes to the "vscode-testing-library-render" extension will be documented in this file. +## 0.0.2 + +- fix: highlight on next line + ## 0.0.1 -- Initial release +- feat: initial release diff --git a/projects/vscode-atl-render/package.json b/projects/vscode-atl-render/package.json index f4573f28..86f78c11 100644 --- a/projects/vscode-atl-render/package.json +++ b/projects/vscode-atl-render/package.json @@ -2,7 +2,7 @@ "name": "vscode-atl-render", "displayName": "vscode-atl-render", "description": "HTML highlighting in ATL the render method", - "version": "0.0.1", + "version": "0.0.2", "publisher": "timdeschryver", "license": "MIT", "repository": { diff --git a/projects/vscode-atl-render/syntaxes/atl-render.json b/projects/vscode-atl-render/syntaxes/atl-render.json index f55ae767..a2e20518 100644 --- a/projects/vscode-atl-render/syntaxes/atl-render.json +++ b/projects/vscode-atl-render/syntaxes/atl-render.json @@ -1,7 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", "scopeName": "atl.render", - "injectionSelector": "L:source.ts -comment -(string -text.html)", + "injectionSelector": "L:source.ts -comment", "name": "atl.render", "patterns": [ { @@ -29,18 +29,21 @@ "patterns": [ { "include": "#renderTemplate" + }, + { + "include": "source.ts" } ] }, "renderTemplate": { "contentName": "text.html", - "begin": "\\G\\s*([`|'|\"])", + "begin": "[`|'|\"]", "beginCaptures": { - "1": { + "0": { "name": "string" } }, - "end": "\\1", + "end": "\\0", "endCaptures": { "0": { "name": "string" From e25d77aee72305ec4191fc6e394ba259b1145669 Mon Sep 17 00:00:00 2001 From: timdeschryver <28659384+timdeschryver@users.noreply.github.com> Date: Sun, 13 Jun 2021 08:56:39 +0200 Subject: [PATCH 3/3] docs: add logo --- projects/vscode-atl-render/CHANGELOG.md | 4 ++++ projects/vscode-atl-render/README.md | 2 +- projects/vscode-atl-render/other/hedgehog.png | Bin 0 -> 10992 bytes projects/vscode-atl-render/package.json | 5 +++-- 4 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 projects/vscode-atl-render/other/hedgehog.png diff --git a/projects/vscode-atl-render/CHANGELOG.md b/projects/vscode-atl-render/CHANGELOG.md index 9e5603b5..90168682 100644 --- a/projects/vscode-atl-render/CHANGELOG.md +++ b/projects/vscode-atl-render/CHANGELOG.md @@ -2,6 +2,10 @@ All notable changes to the "vscode-testing-library-render" extension will be documented in this file. +## 0.0.3 + +- docs: add logo + ## 0.0.2 - fix: highlight on next line diff --git a/projects/vscode-atl-render/README.md b/projects/vscode-atl-render/README.md index 3e9172d2..604a6ec9 100644 --- a/projects/vscode-atl-render/README.md +++ b/projects/vscode-atl-render/README.md @@ -1,3 +1,3 @@ # vscode-atl-render -[Download link](https://marketplace.visualstudio.com/manage/publishers/timdeschryver/extensions/vscode-atl-render/hub?_a=acquisition) +This extension adds HTML highlighting to the render method of the Angular Testing Library. diff --git a/projects/vscode-atl-render/other/hedgehog.png b/projects/vscode-atl-render/other/hedgehog.png new file mode 100644 index 0000000000000000000000000000000000000000..ce0a940c193a8757a41f37821ab14b83ffad44ee GIT binary patch literal 10992 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