⚡ perf(vscode): 代码阅读预览的文档消息里源码和着色只带一份:块不再各带一份连子块在内的整段源码和上色,编辑框按块的编辑范围从整份源码和着色里取,5126 行的消息 4.3MB → 1.9MB
This commit is contained in:
1 parent
0371712176
commit
2e3602242e
43 files changed
+501
-239
No files matched your search
@@ -2,7 +2,7 @@ import type { BlockView } from '../blockView'
|
||||
import type { Inline, LanguageAdapter, PropertyRow, Segment, Translator } from '../contract'
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import { fileAttributes } from '../attributes'
|
||||
import { readBlockViews, toBlockViews } from '../blockView'
|
||||
import { blockCodes, readBlockViews, toBlockViews } from '../blockView'
|
||||
import { replaceLines } from '../editText'
|
||||
import { celeryRule } from '../rules/celery'
|
||||
import { dataclassRule } from '../rules/dataclass'
|
||||
@@ -231,7 +231,7 @@ describe('异常卡片(Python)', () => {
|
||||
const source = PY_CASES.split('\n')
|
||||
const base = named(await pyViews(PY_CASES), 'Base')
|
||||
expect([source[base.startLine], source[base.endLine]]).toEqual(['class Base(Exception):', ' # 收尾'])
|
||||
expect(replaceLines(PY_CASES, base.startLine, base.endLine, base.code.replace('code = "E"', 'code = "F"')))
|
||||
expect(replaceLines(PY_CASES, base.startLine, base.endLine, blockCodes(PY_CASES)(base).replace('code = "E"', 'code = "F"')))
|
||||
.toBe(PY_CASES.replace('code = "E"', 'code = "F"'))
|
||||
expect(PY_CASES.slice(base.defines?.startIndex, base.defines?.endIndex)).toBe('Base')
|
||||
const rows = properties(base)
|
||||
@@ -303,13 +303,13 @@ describe('异常卡片(宿主、筛选、中文名)', () => {
|
||||
.toContainEqual({ id: 'exception', name: '异常', count: 10 })
|
||||
})
|
||||
|
||||
it('各块的源码着色拼起来等于编辑范围的整行源码', async () => {
|
||||
it('各块的源码是编辑范围的整行源码去共同缩进', async () => {
|
||||
for (const [list, source] of [[await pyViews(APP), APP], [await pyViews(COMMERCE), COMMERCE], [await tsViews(TS), TS]] as const) {
|
||||
const rows = source.split('\n')
|
||||
const code = blockCodes(source)
|
||||
for (const view of flatten(list)) {
|
||||
expect(view.codeTokens.map(token => token.text).join(''), view.id).toBe(view.code)
|
||||
const indent = Math.min(...rows.slice(view.startLine, view.endLine + 1).filter(row => row.trim()).map(row => row.length - row.trimStart().length))
|
||||
expect(view.code, view.id).toBe(rows.slice(view.startLine, view.endLine + 1).map(row => row.slice(indent)).join('\n'))
|
||||
expect(code(view), view.id).toBe(rows.slice(view.startLine, view.endLine + 1).map(row => row.slice(indent)).join('\n'))
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import type { BlockView } from '../blockView'
|
||||
import type { Outline } from '../testSupport'
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import { toBlockViews } from '../blockView'
|
||||
import { blockCodes, toBlockViews } from '../blockView'
|
||||
import { blockMarks } from '../diff/viewDiff'
|
||||
import { rustImplRule } from '../rules/rustImpl'
|
||||
import { isCrateRoot } from '../rules/rustTree'
|
||||
@@ -143,8 +143,9 @@ describe('rust 语言卡片', () => {
|
||||
const list = await views(source)
|
||||
const mod = list.find(block => block.kind === 'module')
|
||||
expect(mod?.kind).toBe('module')
|
||||
expect(list.some(block => block.kind === 'statement' && block.code.includes('const LIMIT'))).toBe(false)
|
||||
expect(list.filter(block => block.kind === 'statement').map(block => block.code)).toEqual(['mod other;'])
|
||||
const code = blockCodes(source)
|
||||
expect(list.some(block => block.kind === 'statement' && code(block).includes('const LIMIT'))).toBe(false)
|
||||
expect(list.filter(block => block.kind === 'statement').map(code)).toEqual(['mod other;'])
|
||||
expect(mod?.children.map(block => block.kind)).toEqual(['import', 'const', 'variable', 'function', 'function', 'statement', 'statement'])
|
||||
expect(viewLines(mod ? [mod] : [])).toEqual([
|
||||
'module 1',
|
||||
|
||||
Reference in new issue
Block a user