✨ feat(vscode): 代码阅读支持库规则,内置 SQLAlchemy 模型类显示成数据表卡片

This commit is contained in:
cruldra committed 2026-09-26 18:29:40 +08:00
1 parent 32be7d54b6
commit 5ece24cef9
26 files changed
+1768 -81

No files matched your search

@@ -397,6 +397,15 @@ export function createZhTemplateTranslator(table: ZhTable): Translator {
return joinTokens(tokens)
}
function expression(node: Node, document: SourceDocument): Inline[] {
return joinTokens(tokensIn(node, nodeSpan(node), document))
}
function doc(node: Node): Markdown | undefined {
const markdown = docText([table.commentText(node)])
return markdown ? { markdown } : undefined
}
function describe(block: FactBlock, document: SourceDocument): PropertyRow[] {
const { header } = block
const { language } = document
@@ -406,7 +415,7 @@ export function createZhTemplateTranslator(table: ZhTable): Translator {
return joinTokens(tokensIn(node, span, document))
}
const phrases: Phrases = {
translated: node => within(node, { startIndex: node.startIndex, endIndex: node.endIndex, startRow: node.startPosition.row, endRow: node.endPosition.row }),
translated: node => within(node, nodeSpan(node)),
within,
entryCount: (literal, size) => {
const name = table.mapLiterals[literal.type]
@@ -416,10 +425,7 @@ export function createZhTemplateTranslator(table: ZhTable): Translator {
// 点分模块名逐节照抄,每一节各自能跳到定义,和 VS Code 里一样
module: node => stringNodes.has(node.type) ? [segment(node.text, 'string', offsetOf(node, language))] : verbatim(node, document, 'type'),
name: (node, role) => [segment(node.text, role, offsetOf(node, language))],
doc: (node) => {
const markdown = docText([table.commentText(node)])
return markdown ? { markdown } : undefined
},
doc,
}
switch (block.kind) {
case 'function':
@@ -433,7 +439,21 @@ export function createZhTemplateTranslator(table: ZhTable): Translator {
}
}
return { id: table.id, label: table.label, languageIds: table.languageIds, translate, describe, attributeNames: ZH_ATTRIBUTE_NAMES }
return {
id: table.id,
label: table.label,
languageIds: table.languageIds,
displayLanguage: 'zh',
translate,
describe,
expression,
doc,
attributeNames: ZH_ATTRIBUTE_NAMES,
}
}
function nodeSpan(node: Node): SourceSpan {
return { startIndex: node.startIndex, endIndex: node.endIndex, startRow: node.startPosition.row, endRow: node.endPosition.row }
}
function segment(text: string, role: TokenRole, offset: number | undefined): Segment {