Use Gitea Releases for installation and ship VS Code highlighting
This commit is contained in:
1 parent
a46bd6e132
commit
201bdee372
243 files changed
+3289
-12521
No files matched your search
@@ -0,0 +1,2 @@
|
||||
node_modules/
|
||||
*.vsix
|
||||
@@ -0,0 +1,5 @@
|
||||
**/*
|
||||
!package.json
|
||||
!README.md
|
||||
!language-configuration.json
|
||||
!syntaxes/**
|
||||
@@ -0,0 +1,32 @@
|
||||
# Dever Language for VS Code
|
||||
|
||||
支持 `.dever` 语法高亮、括号配对、自动闭合、缩进和 `#` 快捷键注释。
|
||||
Markdown 正文保留原有编辑体验,`dever` 和 `typescript dever` 围栏共用 Dever 高亮规则;支持反引号、波浪号及更长的关闭围栏。无需先安装 Dever 编译器。
|
||||
|
||||
## 安装
|
||||
|
||||
从 [Gitea Releases](https://git.dever.cc/shemic/dever/releases) 下载 VSIX,在 VS Code 的扩展视图中选择“从 VSIX 安装”,或执行(将文件名替换为下载的版本):
|
||||
|
||||
```sh
|
||||
code --install-extension dever-language-0.1.0.vsix
|
||||
```
|
||||
|
||||
`.dever.md` 继续使用 Markdown 语言模式,不要切换为普通 Dever。已有纯 TypeScript 围栏不会被接管。
|
||||
插件随 VSIX 单独分发,不包含编译器、skills、依赖或构建缓存;`dever update` 不负责安装或更新编辑器插件。
|
||||
|
||||
这是纯语法插件,不提供补全、跳转、格式化或实时编译诊断。最终颜色由 VS Code 主题决定;Markdown 着色依赖 VS Code 的宿主语法,不等同于编译器的程序块抽取。语言合法性、Markdown 说明契约和业务约束仍由 `dever check` 判断。
|
||||
插件暂未发布到插件市场,扩展标识为 `shemic.dever-language`。
|
||||
|
||||
## 开发与打包
|
||||
|
||||
维护者需要 Node.js 22 或更新版本。用户安装 VSIX 不需要 Node.js、npm 或 Rust。
|
||||
在本目录运行 `npm ci --ignore-scripts` 准备锁定的开发依赖,再运行 `npm run package` 生成 VSIX。
|
||||
插件没有运行时依赖或激活代码,不读取应用配置、环境变量,也不执行用户程序。
|
||||
|
||||
正式测试放在仓库根的 `test/editor-vscode/`。使用 VS Code 随附的 `extensions/markdown-basics/syntaxes/markdown.tmLanguage.json` 作为真实宿主语法:
|
||||
|
||||
```sh
|
||||
npm test -- --markdown-grammar /absolute/path/to/markdown.tmLanguage.json
|
||||
```
|
||||
|
||||
测试用实际 TextMate/Oniguruma 引擎校验作用域与嵌入语言标识,覆盖两种 Markdown 围栏、关闭边界、注释/字符串、整数除法、声明以及仓库维护中的 CMS 双实现。没有宿主 Markdown 语法时明确报错,不以仿造语法代替。
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"comments": {
|
||||
"lineComment": "#"
|
||||
},
|
||||
"brackets": [["{", "}"], ["[", "]"], ["(", ")"]],
|
||||
"autoClosingPairs": [
|
||||
{ "open": "{", "close": "}", "notIn": ["string", "comment"] },
|
||||
{ "open": "[", "close": "]", "notIn": ["string", "comment"] },
|
||||
{ "open": "(", "close": ")", "notIn": ["string", "comment"] },
|
||||
{ "open": "\"", "close": "\"", "notIn": ["string", "comment"] }
|
||||
],
|
||||
"surroundingPairs": [["{", "}"], ["[", "]"], ["(", ")"], ["\"", "\""]],
|
||||
"wordPattern": "[A-Za-z_][A-Za-z0-9_]*",
|
||||
"indentationRules": {
|
||||
"increaseIndentPattern": "^\\s*(?!#)(?:[^\"#]|\"(?:\\\\.|[^\"\\\\])*\")*[({\\[]\\s*(?:#.*)?$",
|
||||
"decreaseIndentPattern": "^\\s*[})\\]]"
|
||||
}
|
||||
}
|
||||
Generated
+1872
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"name": "dever-language",
|
||||
"displayName": "Dever Language",
|
||||
"description": "Dever syntax highlighting and editing support, including Markdown code blocks.",
|
||||
"version": "0.1.0",
|
||||
"publisher": "shemic",
|
||||
"private": true,
|
||||
"license": "UNLICENSED",
|
||||
"engines": {
|
||||
"vscode": "^1.85.0"
|
||||
},
|
||||
"categories": ["Programming Languages"],
|
||||
"keywords": ["dever", "markdown", "syntax highlighting"],
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "ssh://git@git.dever.cc:2222/shemic/dever.git",
|
||||
"directory": "editor/vscode"
|
||||
},
|
||||
"contributes": {
|
||||
"languages": [
|
||||
{
|
||||
"id": "dever",
|
||||
"aliases": ["Dever", "dever"],
|
||||
"extensions": [".dever"],
|
||||
"configuration": "./language-configuration.json"
|
||||
}
|
||||
],
|
||||
"grammars": [
|
||||
{
|
||||
"language": "dever",
|
||||
"scopeName": "source.dever",
|
||||
"path": "./syntaxes/dever.tmLanguage.json"
|
||||
},
|
||||
{
|
||||
"scopeName": "markdown.dever.codeblock",
|
||||
"path": "./syntaxes/dever-markdown.tmLanguage.json",
|
||||
"injectTo": ["text.html.markdown"],
|
||||
"embeddedLanguages": {
|
||||
"meta.embedded.block.dever": "dever"
|
||||
},
|
||||
"tokenTypes": {
|
||||
"meta.embedded.block.dever": "other"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"scripts": {
|
||||
"test": "node ../../test/editor-vscode/highlight.test.cjs",
|
||||
"package": "vsce package --no-dependencies --skip-license"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@vscode/vsce": "4.0.0",
|
||||
"vscode-oniguruma": "2.0.1",
|
||||
"vscode-textmate": "9.2.0"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"name": "Dever Markdown blocks",
|
||||
"scopeName": "markdown.dever.codeblock",
|
||||
"injectionSelector": "L:text.html.markdown -markup.fenced_code.block -markup.raw.block -markup.quote -markup.list -meta.embedded.block -comment",
|
||||
"patterns": [
|
||||
{
|
||||
"name": "markup.fenced_code.block.markdown",
|
||||
"contentName": "meta.embedded.block.dever source.dever",
|
||||
"begin": "^ {0,3}(`{3,})[ \\t]*(dever|typescript dever)[ \\t]*$",
|
||||
"end": "^ {0,3}\\1`* *$",
|
||||
"beginCaptures": {
|
||||
"1": { "name": "punctuation.definition.markdown.dever" },
|
||||
"2": { "name": "fenced_code.block.language.markdown" }
|
||||
},
|
||||
"endCaptures": { "0": { "name": "punctuation.definition.markdown.dever" } },
|
||||
"patterns": [{ "include": "source.dever" }]
|
||||
},
|
||||
{
|
||||
"name": "markup.fenced_code.block.markdown",
|
||||
"contentName": "meta.embedded.block.dever source.dever",
|
||||
"begin": "^ {0,3}(~{3,})[ \\t]*(dever|typescript dever)[ \\t]*$",
|
||||
"end": "^ {0,3}\\1~* *$",
|
||||
"beginCaptures": {
|
||||
"1": { "name": "punctuation.definition.markdown.dever" },
|
||||
"2": { "name": "fenced_code.block.language.markdown" }
|
||||
},
|
||||
"endCaptures": { "0": { "name": "punctuation.definition.markdown.dever" } },
|
||||
"patterns": [{ "include": "source.dever" }]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
{
|
||||
"name": "Dever",
|
||||
"scopeName": "source.dever",
|
||||
"patterns": [
|
||||
{ "include": "#comments" },
|
||||
{ "include": "#strings" },
|
||||
{ "include": "#unsupported" },
|
||||
{ "include": "#declarations" },
|
||||
{ "include": "#constants" },
|
||||
{ "include": "#numbers" },
|
||||
{ "include": "#names" },
|
||||
{ "include": "#keywords" },
|
||||
{ "include": "#operators" }
|
||||
],
|
||||
"repository": {
|
||||
"comments": {
|
||||
"name": "comment.line.number-sign.dever",
|
||||
"begin": "#",
|
||||
"end": "$"
|
||||
},
|
||||
"strings": {
|
||||
"name": "string.quoted.double.dever",
|
||||
"begin": "\"",
|
||||
"end": "\"|$",
|
||||
"beginCaptures": { "0": { "name": "punctuation.definition.string.begin.dever" } },
|
||||
"endCaptures": { "0": { "name": "punctuation.definition.string.end.dever" } },
|
||||
"patterns": [
|
||||
{ "name": "constant.character.escape.dever", "match": "\\\\(?:[\"\\\\nrt]|u\\{[0-9A-Fa-f]{1,6}\\})" },
|
||||
{ "name": "invalid.illegal.escape.dever", "match": "\\\\." }
|
||||
]
|
||||
},
|
||||
"declarations": {
|
||||
"patterns": [
|
||||
{
|
||||
"match": "\\b(type)\\s+([A-Z][A-Za-z0-9_]*)",
|
||||
"captures": {
|
||||
"1": { "name": "storage.type.dever" },
|
||||
"2": { "name": "entity.name.type.dever" }
|
||||
}
|
||||
},
|
||||
{
|
||||
"match": "^\\s*(?:(public)\\s+)?(get|post|put|delete|cmd|rest)\\b",
|
||||
"captures": {
|
||||
"1": { "name": "storage.modifier.dever" },
|
||||
"2": { "name": "keyword.control.api.dever" }
|
||||
}
|
||||
},
|
||||
{
|
||||
"match": "^\\s*(external)\\s+(command|exec|pip|npm|go)\\b",
|
||||
"captures": {
|
||||
"1": { "name": "storage.modifier.external.dever" },
|
||||
"2": { "name": "keyword.other.external.dever" }
|
||||
}
|
||||
},
|
||||
{ "name": "keyword.other.declaration.dever", "match": "^\\s*(database|relation|seed|migrate|sql|index|unique|schedule)\\b" }
|
||||
]
|
||||
},
|
||||
"constants": {
|
||||
"name": "constant.language.dever",
|
||||
"match": "\\b(true|false|null|other)\\b"
|
||||
},
|
||||
"unsupported": {
|
||||
"name": "invalid.illegal.keyword.dever",
|
||||
"match": "\\b(package|exposes|if|else|switch|match|when|by|for|while|break|continue|iterate|recur|repeat|return|function|throw|catch|try|import|use|class|interface|unsafe|macro)\\b"
|
||||
},
|
||||
"numbers": {
|
||||
"name": "constant.numeric.dever",
|
||||
"match": "(?<![A-Za-z0-9_])[0-9]+(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?(?![A-Za-z0-9_])"
|
||||
},
|
||||
"names": {
|
||||
"patterns": [
|
||||
{ "name": "variable.other.member.dever", "match": "\\b[a-z_][A-Za-z0-9_]*(?=\\s*:)" },
|
||||
{ "name": "entity.name.function.dever", "match": "\\b[a-z_][A-Za-z0-9_]*(?=\\s*\\()" },
|
||||
{ "name": "support.type.dever", "match": "\\b(Int|Float|Decimal|Bool|Text|Bytes|Secret|List|Map|Stream|AsyncStream|Channel|Task|Group|Json|Date|Time|DateTime|Duration|Id|Uuid)\\b" },
|
||||
{ "name": "entity.name.type.dever", "match": "\\b[A-Z][A-Za-z0-9_]*\\b" },
|
||||
{ "name": "entity.name.namespace.dever", "match": "\\b(dever|app|domain|model|port|adapter)(?=\\.)" }
|
||||
]
|
||||
},
|
||||
"keywords": {
|
||||
"patterns": [
|
||||
{ "name": "keyword.operator.logical.dever", "match": "\\b(and|or|not)\\b" },
|
||||
{ "name": "storage.modifier.dever", "match": "\\b(public|global|pure|transaction|job|recover|fails|private|owner)\\b" },
|
||||
{ "name": "keyword.other.model.dever", "match": "\\b(default|unique|index|before|after|drop)\\b" },
|
||||
{ "name": "keyword.other.adapter.dever", "match": "\\b(setting|lib|allow)\\b" }
|
||||
]
|
||||
},
|
||||
"operators": {
|
||||
"patterns": [
|
||||
{ "name": "keyword.operator.dever", "match": "//|==|!=|<=|>=|[=+*/%<>?-]" },
|
||||
{ "name": "punctuation.section.dever", "match": "[{}()\\[\\]]" },
|
||||
{ "name": "punctuation.separator.dever", "match": "[,:.]" }
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user