From df91f4db82dec7f5c08ade5175b7d9ecdd4687cb Mon Sep 17 00:00:00 2001 From: Timon Wong Date: Fri, 21 Oct 2022 13:34:35 +0800 Subject: [PATCH] feat: colorize output Signed-off-by: Timon Wong --- cspell.json | 3 +- .../language-configuration.json | 25 ++++++ languages/shellcheck-output/tmLanguage.json | 77 +++++++++++++++++++ .../shellcheckrc}/language-configuration.json | 0 .../shellcheckrc}/tmLanguage.json | 0 package.json | 13 +++- src/extension.ts | 5 +- 7 files changed, 119 insertions(+), 4 deletions(-) create mode 100644 languages/shellcheck-output/language-configuration.json create mode 100644 languages/shellcheck-output/tmLanguage.json rename {shellcheckrc => languages/shellcheckrc}/language-configuration.json (100%) rename {shellcheckrc => languages/shellcheckrc}/tmLanguage.json (100%) diff --git a/cspell.json b/cspell.json index f56084e01..003bd9b93 100644 --- a/cspell.json +++ b/cspell.json @@ -41,6 +41,7 @@ "overridable", "linkify", "deps", - "outputchannel" + "outputchannel", + "datetime" ] } diff --git a/languages/shellcheck-output/language-configuration.json b/languages/shellcheck-output/language-configuration.json new file mode 100644 index 000000000..1cbf3f582 --- /dev/null +++ b/languages/shellcheck-output/language-configuration.json @@ -0,0 +1,25 @@ +{ + // symbols used as brackets + "brackets": [ + ["{", "}"], + ["[", "]"], + ["(", ")"], + ["<", ">"] + ], + // symbols that are auto closed when typing + "autoClosingPairs": [ + ["{", "}"], + ["[", "]"], + ["(", ")"], + ["\"", "\""], + ["'", "'"] + ], + // symbols that that can be used to surround a selection + "surroundingPairs": [ + ["{", "}"], + ["[", "]"], + ["(", ")"], + ["\"", "\""], + ["'", "'"] + ] +} diff --git a/languages/shellcheck-output/tmLanguage.json b/languages/shellcheck-output/tmLanguage.json new file mode 100644 index 000000000..c19b1f7c2 --- /dev/null +++ b/languages/shellcheck-output/tmLanguage.json @@ -0,0 +1,77 @@ +{ + "scopeName": "shellcheck-output", + "patterns": [ + { + "include": "#string-single-quoted" + }, + { + "include": "#string-double-quoted" + }, + { + "include": "#datetime-RFC3339" + }, + { + "include": "#date-ISO" + }, + { + "include": "#time" + }, + { + "include": "#error-tag" + }, + { + "include": "#warn-tag" + }, + { + "include": "#info-tag" + }, + { + "include": "#debug-tag" + }, + { + "include": "#numeric-decimal" + } + ], + "repository": { + "string-double-quoted": { + "match": "\"(.*?)\"", + "name": "string.quoted" + }, + "string-single-quoted": { + "match": "'(.*?)'", + "name": "string.quoted" + }, + "datetime-RFC3339": { + "match": "\\b(\\d{4}-\\d{2}-\\d{2})T(\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?)(Z|[\\+-]\\d{2}:\\d{2})?", + "name": "constant.numeric" + }, + "date-ISO": { + "match": "\\b\\d{4}-\\d{2}-\\d{2}(T|\\b)", + "name": "constant.numeric" + }, + "time": { + "match": "\\d{1,2}:\\d{1,2}:\\d{2}(:\\d{2}([.,]\\d{1,})?)?(Z| ?[+-]\\d{1,2}:\\d{2})?(.\\d{3})?", + "name": "constant.numeric" + }, + "error-tag": { + "match": "\\[ERROR\\]", + "name": "markup.bold invalid.illegal" + }, + "warn-tag": { + "match": "\\[WARN\\]", + "name": "markup.bold markup.deleted" + }, + "info-tag": { + "match": "\\[INFO\\]", + "name": "markup.bold markup.inserted" + }, + "debug-tag": { + "match": "\\[(TRACE|DEBUG)\\]", + "name": "markup.bold markup.changed" + }, + "numeric-decimal": { + "match": "\\b\\d+(\\.\\d+)?\\b", + "name": "constant.numeric" + } + } +} diff --git a/shellcheckrc/language-configuration.json b/languages/shellcheckrc/language-configuration.json similarity index 100% rename from shellcheckrc/language-configuration.json rename to languages/shellcheckrc/language-configuration.json diff --git a/shellcheckrc/tmLanguage.json b/languages/shellcheckrc/tmLanguage.json similarity index 100% rename from shellcheckrc/tmLanguage.json rename to languages/shellcheckrc/tmLanguage.json diff --git a/package.json b/package.json index 527b135a0..028abdf23 100644 --- a/package.json +++ b/package.json @@ -54,14 +54,23 @@ "extensions": [ ".shellcheckrc" ], - "configuration": "./shellcheckrc/language-configuration.json" + "configuration": "./languages/shellcheckrc/language-configuration.json" + }, + { + "id": "shellcheck-output", + "configuration": "./languages/shellcheck-output/language-configuration.json" } ], "grammars": [ { "language": "shellcheckrc", "scopeName": "source.shellcheckrc", - "path": "./shellcheckrc/tmLanguage.json" + "path": "./languages/shellcheckrc/tmLanguage.json" + }, + { + "language": "shellcheck-output", + "scopeName": "shellcheck-output", + "path": "./languages/shellcheck-output/tmLanguage.json" } ], "commands": [ diff --git a/src/extension.ts b/src/extension.ts index aa5315890..ec8508e40 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -10,7 +10,10 @@ export function activate( context: vscode.ExtensionContext ): ShellCheckExtensionApi { // Setup logging - const outputChannel = vscode.window.createOutputChannel("ShellCheck"); + const outputChannel = vscode.window.createOutputChannel( + "ShellCheck", + "shellcheck-output" + ); context.subscriptions.push(outputChannel); const logger = new OutputChannelLogger(outputChannel);