From 3614f0cefb13ca05f04e5c0cf80676fdb1ca37b8 Mon Sep 17 00:00:00 2001 From: christoph_xd Date: Wed, 8 Jan 2025 21:37:24 +0100 Subject: [PATCH] add def file support --- .vscodeignore | 3 +- client/src/common/handlers.ts | 11 +- client/src/extension.ts | 18 +- package.json | 16 ++ syntaxes/cdl.tmLanguage.json | 9 + syntaxes/def.tmLanguage.json | 154 +++++++++++ test/je_service_layer.def | 463 ++++++++++++++++++++++++++++++++++ 7 files changed, 662 insertions(+), 12 deletions(-) create mode 100644 syntaxes/def.tmLanguage.json create mode 100644 test/je_service_layer.def diff --git a/.vscodeignore b/.vscodeignore index d8a3b86..77f2c86 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -5,4 +5,5 @@ vsc-extension-quickstart.md node_modules tsconfig.json test -vite.config.js \ No newline at end of file +vite.config.js +.prettierrc.json \ No newline at end of file diff --git a/client/src/common/handlers.ts b/client/src/common/handlers.ts index 691062a..7627b76 100644 --- a/client/src/common/handlers.ts +++ b/client/src/common/handlers.ts @@ -16,7 +16,7 @@ export function formatCdlFile(content: string): string { return formattedLines.join("\n") } -export function completionHandler(document: vscode.TextDocument, position: vscode.Position) { +export function completionHandlerCdl(document: vscode.TextDocument, position: vscode.Position) { const linePrefix = document.lineAt(position).text.substring(0, position.character) const categories = ["MILL", "LATHE", "DRILL"] @@ -31,6 +31,13 @@ export function completionHandler(document: vscode.TextDocument, position: vscod ] } + if (linePrefix.endsWith("TOGGLE ")) { + return [ + new vscode.CompletionItem("off", vscode.CompletionItemKind.TypeParameter), + new vscode.CompletionItem("on", vscode.CompletionItemKind.TypeParameter) + ] + } + if (linePrefix.endsWith("CATEGORY ")) { return categories.map( (cat) => new vscode.CompletionItem(cat, vscode.CompletionItemKind.TypeParameter) @@ -49,7 +56,7 @@ export function completionHandler(document: vscode.TextDocument, position: vscod return undefined } -export function hoverHandler(document: vscode.TextDocument, position: vscode.Position) { +export function hoverCdlHandler(document: vscode.TextDocument, position: vscode.Position) { const wordRange = document.getWordRangeAtPosition(position) const word = document.getText(wordRange) const text = document.getText() diff --git a/client/src/extension.ts b/client/src/extension.ts index e093783..a99bb04 100644 --- a/client/src/extension.ts +++ b/client/src/extension.ts @@ -1,8 +1,8 @@ import * as vscode from "vscode" -import { formatCdlFile, completionHandler, hoverHandler } from "./common/handlers" +import { formatCdlFile, completionHandlerCdl, hoverCdlHandler } from "./common/handlers" export function activate(context: vscode.ExtensionContext) { - const formatProvider = vscode.languages.registerDocumentFormattingEditProvider( + const formatCdlProvider = vscode.languages.registerDocumentFormattingEditProvider( { scheme: "file", language: "cdl" }, { provideDocumentFormattingEdits(document: vscode.TextDocument): vscode.TextEdit[] { @@ -17,9 +17,9 @@ export function activate(context: vscode.ExtensionContext) { } ) - context.subscriptions.push(formatProvider) + context.subscriptions.push(formatCdlProvider) - const completionProvider = vscode.languages.registerCompletionItemProvider( + const completionCdlProvider = vscode.languages.registerCompletionItemProvider( { scheme: "file", language: "cdl" }, { provideCompletionItems( @@ -28,14 +28,14 @@ export function activate(context: vscode.ExtensionContext) { token: vscode.CancellationToken, context: vscode.CompletionContext ) { - return completionHandler(document, position) + return completionHandlerCdl(document, position) } }, " " // Trigger completion on space ) - context.subscriptions.push(completionProvider) + context.subscriptions.push(completionCdlProvider) - const hoverProvider = vscode.languages.registerHoverProvider( + const hoverCdlProvider = vscode.languages.registerHoverProvider( { scheme: "file", language: "cdl" }, { provideHover( @@ -43,11 +43,11 @@ export function activate(context: vscode.ExtensionContext) { position: vscode.Position, token: vscode.CancellationToken ) { - return hoverHandler(document, position) + return hoverCdlHandler(document, position) } } ) - context.subscriptions.push(hoverProvider) + context.subscriptions.push(hoverCdlProvider) } export function deactivate() {} diff --git a/package.json b/package.json index 045b847..4ccc034 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,17 @@ ".cdl" ], "configuration": "./language-configuration.json" + }, + { + "id": "def", + "aliases": [ + "NX DEF", + "def" + ], + "extensions": [ + ".def" + ], + "configuration": "./language-configuration.json" } ], "grammars": [ @@ -39,6 +50,11 @@ "language": "cdl", "scopeName": "source.cdl", "path": "./syntaxes/cdl.tmLanguage.json" + }, + { + "language": "def", + "scopeName": "source.def", + "path": "./syntaxes/def.tmLanguage.json" } ] }, diff --git a/syntaxes/cdl.tmLanguage.json b/syntaxes/cdl.tmLanguage.json index 91cecde..d2052f6 100644 --- a/syntaxes/cdl.tmLanguage.json +++ b/syntaxes/cdl.tmLanguage.json @@ -106,6 +106,15 @@ "name": "variable.language.cdl" } } + }, + { + "name": "keyword.control.cdl", + "match": "\\bTOGGLE\\s+(OFF|ON|off|on)\\b", + "captures": { + "1": { + "name": "variable.other.constant" + } + } } ] }, diff --git a/syntaxes/def.tmLanguage.json b/syntaxes/def.tmLanguage.json new file mode 100644 index 0000000..4a9e9aa --- /dev/null +++ b/syntaxes/def.tmLanguage.json @@ -0,0 +1,154 @@ +{ + "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", + "name": "DEF Support", + "patterns": [ + { + "include": "#comment" + }, + { + "include": "#strings" + }, + { + "include": "#function" + }, + { + "include": "#variables" + }, + { + "include": "#types" + }, + { + "include": "#keywords" + }, + { + "include": "#numbers" + }, + { + "include": "#unquoted-strings" + } + ], + "repository": { + "keywords": { + "patterns": [ + { + "name": "storage.type.def", + "match": "\\b(FORMAT|ADDRESS|FORMATTING|FORCE|LEADER|ZERO_FORMAT|TRAILER|OMIT|MAX|MIN)\\b" + } + ] + }, + "strings": { + "name": "string.quoted.double.def", + "begin": "(?