From 56900fa9a74204daaefa8e593bee2ac90a008d96 Mon Sep 17 00:00:00 2001 From: Horus Lugo Date: Wed, 4 Feb 2026 03:48:42 +0100 Subject: [PATCH] feat: add VS Code extension for @renders JSDoc syntax highlighting --- vscode-extension/package.json | 26 ++++++++++++++ .../renders-jsdoc.injection.tmLanguage.json | 35 +++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 vscode-extension/package.json create mode 100644 vscode-extension/syntaxes/renders-jsdoc.injection.tmLanguage.json diff --git a/vscode-extension/package.json b/vscode-extension/package.json new file mode 100644 index 0000000..1e7b0a2 --- /dev/null +++ b/vscode-extension/package.json @@ -0,0 +1,26 @@ +{ + "name": "renders-jsdoc-syntax", + "displayName": "Renders JSDoc Syntax", + "description": "Syntax highlighting for @renders and @transparent JSDoc annotations used by eslint-plugin-react-render-types", + "version": "0.1.0", + "publisher": "horusgoul", + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/HorusGoul/eslint-plugin-react-render-types.git", + "directory": "vscode-extension" + }, + "engines": { + "vscode": "^1.60.0" + }, + "categories": ["Programming Languages"], + "contributes": { + "grammars": [ + { + "scopeName": "renders.jsdoc.injection", + "path": "./syntaxes/renders-jsdoc.injection.tmLanguage.json", + "injectTo": ["source.ts", "source.tsx", "source.js", "source.jsx"] + } + ] + } +} diff --git a/vscode-extension/syntaxes/renders-jsdoc.injection.tmLanguage.json b/vscode-extension/syntaxes/renders-jsdoc.injection.tmLanguage.json new file mode 100644 index 0000000..a0c9dd0 --- /dev/null +++ b/vscode-extension/syntaxes/renders-jsdoc.injection.tmLanguage.json @@ -0,0 +1,35 @@ +{ + "scopeName": "renders.jsdoc.injection", + "injectionSelector": "L:comment.block.documentation", + "patterns": [ + { "include": "#renders-with-type" }, + { "include": "#renders-without-type" }, + { "include": "#transparent-tag" } + ], + "repository": { + "renders-with-type": { + "match": "((@)renders[?*]?!?)\\s*(\\{)([^}]*)(\\})", + "captures": { + "1": { "name": "storage.type.class.jsdoc" }, + "2": { "name": "punctuation.definition.block.tag.jsdoc" }, + "3": { "name": "punctuation.definition.bracket.curly.begin.jsdoc" }, + "4": { "name": "entity.name.type.instance.jsdoc" }, + "5": { "name": "punctuation.definition.bracket.curly.end.jsdoc" } + } + }, + "renders-without-type": { + "match": "((@)renders[?*]?!?)(?=\\s|\\*/|$)", + "captures": { + "1": { "name": "storage.type.class.jsdoc" }, + "2": { "name": "punctuation.definition.block.tag.jsdoc" } + } + }, + "transparent-tag": { + "match": "((@)transparent)(?=\\s|\\*/|$)", + "captures": { + "1": { "name": "storage.type.class.jsdoc" }, + "2": { "name": "punctuation.definition.block.tag.jsdoc" } + } + } + } +}