✨ feat(vscode): 代码阅读的调用与构造:跨多行写的调用排成「新建 / 调用 名字 · N 个参数」一行,实参摊成参数 / 值表;Python 查被调用名字的定义分新建和调用,查到后刷新
This commit is contained in:
1 parent
ebf228cdc7
commit
ecc415d763
30 files changed
+1033
-157
No files matched your search
@@ -1,7 +1,7 @@
|
||||
import type { BlockView } from './blockView'
|
||||
import type { LanguageAdapter, Translator } from './contract'
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import { readBlockViews, toBlockViews } from './blockView'
|
||||
import { readBlockViews, readDefinitionKind, toBlockViews } from './blockView'
|
||||
import { replaceLines } from './editText'
|
||||
import { createPythonAdapter } from './languages/python'
|
||||
import { createTypeScriptAdapter } from './languages/typescript'
|
||||
@@ -257,4 +257,25 @@ describe('blockView', () => {
|
||||
])
|
||||
expect(translationText(list[0].children[0])).toBe('返回 非 x')
|
||||
})
|
||||
|
||||
it('跨几行写的调用:一行译文下面带摊开实参的表;calleeKind 交给翻译插件分新建还是调用', async () => {
|
||||
const source = 'def f(user):\n return Detail(\n id=user.id,\n )\n'
|
||||
const { blocks: list } = await readBlockViews(runtime, py, pythonZhTranslator, 'python', source, undefined, call => call.callee.text === 'Detail' ? 'class' : undefined)
|
||||
const returned = list[0].children[0]
|
||||
expect(translationText(returned)).toBe('返回 新建 Detail · 1 个参数')
|
||||
expect('table' in returned && returned.table).toMatchObject({
|
||||
columns: ['参数', '值'],
|
||||
items: [{ cells: [[{ text: 'id', offset: source.indexOf('id=') }], [{ text: 'user' }, { text: '.' }, { text: 'id' }]] }],
|
||||
})
|
||||
})
|
||||
|
||||
it('readDefinitionKind:offset 落在哪块自己的名字上就是那块的种类,里层的块优先;不在名字上没有', async () => {
|
||||
const source = 'class UserService:\n def update_user(self):\n pass\n\nclass NotFound(Exception):\n pass\n\nlimit = 3\n'
|
||||
const kind = (text: string): Promise<string | undefined> => readDefinitionKind(runtime, py, 'python', source, source.indexOf(text))
|
||||
expect(await kind('UserService')).toBe('class')
|
||||
expect(await kind('update_user')).toBe('function')
|
||||
expect(await kind('NotFound')).toBe('exception')
|
||||
expect(await kind('limit')).toBe('variable')
|
||||
expect(await kind('pass')).toBeUndefined()
|
||||
})
|
||||
})
|
||||
Reference in new issue
Block a user