From 5688304817766f062f21e855760a7949e2b892ed Mon Sep 17 00:00:00 2001 From: landaiqing Date: Sun, 2 Nov 2025 17:20:22 +0800 Subject: [PATCH] :art: Add variable support for http client --- .../editor/extensions/httpclient/index.ts | 2 - .../httpclient/language/http.grammar | 113 ++++- .../language/http.grammar.response.test.ts | 263 ++++++++++ .../language/http.grammar.var.test.ts | 350 ++++++++++++++ .../httpclient/language/http.highlight.ts | 38 +- .../httpclient/language/http.parser.terms.ts | 91 ++-- .../httpclient/language/http.parser.ts | 28 +- .../httpclient/parser/request-parser.ts | 64 ++- .../httpclient/parser/response-inserter.ts | 448 ++++++------------ .../parser/variable-resolver.test.ts | 367 ++++++++++++++ .../httpclient/parser/variable-resolver.ts | 325 +++++++++++++ .../httpclient/widgets/run-gutter.ts | 6 +- 12 files changed, 1704 insertions(+), 391 deletions(-) create mode 100644 frontend/src/views/editor/extensions/httpclient/language/http.grammar.response.test.ts create mode 100644 frontend/src/views/editor/extensions/httpclient/language/http.grammar.var.test.ts create mode 100644 frontend/src/views/editor/extensions/httpclient/parser/variable-resolver.test.ts create mode 100644 frontend/src/views/editor/extensions/httpclient/parser/variable-resolver.ts diff --git a/frontend/src/views/editor/extensions/httpclient/index.ts b/frontend/src/views/editor/extensions/httpclient/index.ts index 294ba57..35dd1a5 100644 --- a/frontend/src/views/editor/extensions/httpclient/index.ts +++ b/frontend/src/views/editor/extensions/httpclient/index.ts @@ -5,14 +5,12 @@ import {Extension} from '@codemirror/state'; import {httpRequestsField, httpRunButtonGutter, httpRunButtonTheme} from './widgets/run-gutter'; -import {responseCacheField} from "@/views/editor/extensions/httpclient/parser/response-inserter"; /** * 创建 HTTP Client 扩展 */ export function createHttpClientExtension(): Extension[] { return [ - responseCacheField, httpRequestsField, httpRunButtonGutter, httpRunButtonTheme, diff --git a/frontend/src/views/editor/extensions/httpclient/language/http.grammar b/frontend/src/views/editor/extensions/httpclient/language/http.grammar index 5e15a59..ee4da15 100644 --- a/frontend/src/views/editor/extensions/httpclient/language/http.grammar +++ b/frontend/src/views/editor/extensions/httpclient/language/http.grammar @@ -9,14 +9,25 @@ // @json - JSON 格式(属性必须用逗号分隔) // @formdata - 表单数据(属性必须用逗号分隔) // @urlencoded - URL 编码格式(属性必须用逗号分隔) -// @text - 纯文本内容(使用 content 字段) +// @text - 纯文本内容 // -// 3. 响应数据: +// 3. 变量定义: +// @var { +// baseUrl: "https://api.example.com", +// version: "v1", +// timeout: 30000 +// } +// +// 4. 变量引用: +// {{variableName}} - 简单引用 +// {{variableName:default}} - 带默认值引用 +// +// 5. 响应数据: // 使用独立的 JSON 块 // # Response 200 OK 234ms // { "code": 200, "message": "success" } // -// 4. 注释: +// 6. 注释: // # 单行注释 // // 示例 1 - JSON 请求: @@ -83,12 +94,55 @@ @top Document { item* } item { + VarDeclaration | RequestStatement | + ResponseDeclaration | AtRule | JsonObject | JsonArray } +// 变量声明 +VarDeclaration { + @specialize[@name=VarKeyword] + JsonBlock +} + +// 响应声明 +// 格式:@response