🐛 fix(vscode): 代码阅读把 Python 赋值后面的字符串当变量说明,其余单独的字符串显示成注释
This commit is contained in:
1 parent
a51f90e34d
commit
1f86201373
14 files changed
+358
-59
No files matched your search
@@ -123,12 +123,13 @@ interface Call {
|
||||
keywords: Map<string, Node>
|
||||
}
|
||||
|
||||
/** 类主体里一条给名字赋值(或只写注解)的语句。 */
|
||||
/** 类主体里一条给名字赋值(或只写注解)的语句;doc 是它的属性 docstring(字段的 doc、变量的 facts.doc)。 */
|
||||
interface Member {
|
||||
block: CodeBlock
|
||||
name: Node
|
||||
annotation?: Node
|
||||
value?: Node
|
||||
doc?: Node
|
||||
}
|
||||
|
||||
/** 一个字段:只写 `Mapped[...]` 注解的没有 call。 */
|
||||
@@ -225,7 +226,13 @@ function memberOf(block: CodeBlock): Member | undefined {
|
||||
const name = assignment?.type === 'assignment' ? assignment.childForFieldName('left') : null
|
||||
if (!assignment || name?.type !== 'identifier')
|
||||
return undefined
|
||||
return { block, name, annotation: assignment.childForFieldName('type') ?? undefined, value: assignment.childForFieldName('right') ?? undefined }
|
||||
return {
|
||||
block,
|
||||
name,
|
||||
annotation: assignment.childForFieldName('type') ?? undefined,
|
||||
value: assignment.childForFieldName('right') ?? undefined,
|
||||
doc: 'facts' in block ? block.facts.doc : block.doc,
|
||||
}
|
||||
}
|
||||
|
||||
/** 注解里 `type` 节点只包着一个类型时取里面那个。 */
|
||||
@@ -424,7 +431,7 @@ function isNullable(call: Call | undefined, optional: boolean | undefined): bool
|
||||
return call?.name === 'Column' || optional === undefined ? true : optional
|
||||
}
|
||||
|
||||
/** 字段表的一行:字段 | 类型 | 约束 | 说明。讲的定义是字段名。 */
|
||||
/** 字段表的一行:字段 | 类型 | 约束 | 说明(`comment=`,没写时用字段的属性 docstring 原文)。讲的定义是字段名。 */
|
||||
function columnItem({ member, call }: Column, env: Env): PropertyItem {
|
||||
const { words, context } = env
|
||||
const mapped = mappedType(member.annotation)
|
||||
@@ -452,12 +459,13 @@ function columnItem({ member, call }: Column, env: Env): PropertyItem {
|
||||
for (const foreign of calls.filter((found): found is Call => found?.name === 'ForeignKey'))
|
||||
constraints.push(foreignKey(foreign, env))
|
||||
const comment = keywords.get('comment')
|
||||
const doc = member.doc && context.doc(member.doc)
|
||||
return {
|
||||
cells: [
|
||||
[name(member.name, 'variable')],
|
||||
typeArg ? sqlType(typeArg, env) : annotated ? context.translate(annotated.type) : [hint(words.unannotated)],
|
||||
joined(constraints, hint(' · ')),
|
||||
comment ? textOr(comment, 'comment', env) : [],
|
||||
comment ? textOr(comment, 'comment', env) : doc ? [{ text: doc.markdown, role: 'comment' }] : [],
|
||||
],
|
||||
defines: range(member.name),
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user