✨ feat(vscode): 代码阅读预览里工作区外的库文件也能问 AI,问答记进第一个工作区文件夹,重写注释不对库文件开放
This commit is contained in:
1 parent
cecae0e244
commit
39dfd9b084
24 files changed
+463
-79
No files matched your search
@@ -3,7 +3,7 @@ import { promises as fsp } from 'node:fs'
|
||||
import * as os from 'node:os'
|
||||
import * as path from 'node:path'
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import { changedKeys, detachedFiles, dropEntries, entriesUnder, moveEntries, normalizeKey, placeEntries, removeFiles, toPathKey } from './pathMap'
|
||||
import { changedKeys, detachedFiles, dropEntries, entriesUnder, moveEntries, normalizeKey, outsideKey, outsidePath, placeEntries, removeFiles, tableKey, toPathKey } from './pathMap'
|
||||
|
||||
describe('路径的键', () => {
|
||||
it('相对工作区文件夹、用 / 分隔', () => {
|
||||
@@ -30,6 +30,41 @@ describe('路径的键', () => {
|
||||
})
|
||||
})
|
||||
|
||||
describe('工作区外的文件的键', () => {
|
||||
const HOME = '/Users/me'
|
||||
const PATHLIB = '/Users/me/.local/share/uv/python/cpython-3.12.4-macos-aarch64-none/lib/python3.12/pathlib.py'
|
||||
|
||||
it('家目录下的写成 ~/…,别处写绝对路径;名字只是前缀相同的不算家目录下', () => {
|
||||
expect(outsideKey(PATHLIB, HOME)).toBe('~/.local/share/uv/python/cpython-3.12.4-macos-aarch64-none/lib/python3.12/pathlib.py')
|
||||
expect(outsideKey('/opt/homebrew/lib/python3.12/site-packages/requests/api.py', HOME)).toBe('/opt/homebrew/lib/python3.12/site-packages/requests/api.py')
|
||||
expect(outsideKey('/Users/meow/a.py', HOME)).toBe('/Users/meow/a.py')
|
||||
// Windows 上 Uri.path 带盘符
|
||||
expect(outsideKey('/c:/Users/me/AppData/a.py', '/c:/Users/me')).toBe('~/AppData/a.py')
|
||||
})
|
||||
|
||||
it('反过来还原成磁盘上的路径;工作区里的相对路径键不是工作区外的', () => {
|
||||
expect(outsidePath(outsideKey(PATHLIB, HOME), HOME)).toBe(PATHLIB)
|
||||
expect(outsidePath('/opt/homebrew/a.py', HOME)).toBe('/opt/homebrew/a.py')
|
||||
expect(outsidePath('src/a.ts', HOME)).toBeUndefined()
|
||||
})
|
||||
|
||||
it('读表时认这两种键,规范成同一种写法;跑出家目录的 ~/../ 丢掉', () => {
|
||||
expect(tableKey('~/.local/lib//pathlib.py')).toBe('~/.local/lib/pathlib.py')
|
||||
expect(tableKey('/opt/homebrew/lib/')).toBe('/opt/homebrew/lib')
|
||||
expect(tableKey('./src/a.ts')).toBe('src/a.ts')
|
||||
expect(tableKey('~/../etc/passwd')).toBeUndefined()
|
||||
expect(tableKey('/')).toBeUndefined()
|
||||
expect(tableKey('../a.ts')).toBeUndefined()
|
||||
})
|
||||
|
||||
it('工作区里的改名、删除、挪走碰不到工作区外的键,哪怕名字一样', () => {
|
||||
const map = { '~/lib/a.py': '库', '/opt/lib/a.py': '库', 'lib/a.py': '项目', 'opt/lib/a.py': '项目' }
|
||||
expect(dropEntries(map, 'lib')).toEqual({ '~/lib/a.py': '库', '/opt/lib/a.py': '库', 'opt/lib/a.py': '项目' })
|
||||
expect(entriesUnder(map, 'opt')).toEqual({ 'lib/a.py': '项目' })
|
||||
expect(moveEntries(map, 'opt', 'vendor')).toEqual({ '~/lib/a.py': '库', '/opt/lib/a.py': '库', 'lib/a.py': '项目', 'vendor/lib/a.py': '项目' })
|
||||
})
|
||||
})
|
||||
|
||||
describe('改名、挪位置', () => {
|
||||
const notes = {
|
||||
'campaign': '营销活动',
|
||||
|
||||
Reference in new issue
Block a user