Use Gitea Releases for installation and ship VS Code highlighting

This commit is contained in:
Antigravity committed 2026-10-06 14:12:58 +00:00
1 parent a46bd6e132
commit 201bdee372
243 files changed
+3289 -12521

No files matched your search

+2
View File
@@ -0,0 +1,2 @@
node_modules/
*.vsix
+5
View File
@@ -0,0 +1,5 @@
**/*
!package.json
!README.md
!language-configuration.json
!syntaxes/**
+32
View File
@@ -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 语法时明确报错,不以仿造语法代替。
+18
View File
@@ -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*[})\\]]"
}
}
+1872
View File
File diff suppressed because it is too large. Load diff
+56
View File
@@ -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": "[,:.]" }
]
}
}
}