diff --git a/src/extension.ts b/src/extension.ts index 59f97664feac9afabd1846b27089a0c4d0f60bbb..e1a8714a00eee691763272127774cadd25002177 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -16,6 +16,12 @@ import { 查询锁, 设置锁 } from './lib/模型/锁' // 程序运行中的上下文. var 上下文: 上下文 var 配置: ReturnType +var outputChannel: vscode.OutputChannel + +let log: (msg: string) => void = (msg: string) => { + if (!outputChannel) outputChannel = vscode.window.createOutputChannel('中文代码快速补全') + outputChannel.appendLine(`[${new Date().toLocaleString()}] ${msg}`) +} async function 完成项提供者(document: TextDocument, position: Position) { // 必要变量 @@ -23,6 +29,10 @@ async function 完成项提供者(document: TextDocument, position: Position) { var 输入字段 = await 获得当前输入字段() var { 模式, 分组 } = 计算字符串模式和分组(输入字段) + log( + `开始补全 ${document.fileName}, ${document.languageId}, ${position.line}:${position.character}, 输入字段: ${输入字段}, 模式: ${模式}, 分组: ${分组}`, + ) + // 这里获得的`输入字段`是当前这个词, 而不是输入的那个字符. // 例如, 在已有的字母`n`后面输入`i`, `输入字段`会是`ni`而不是`i`. // 如果输入是中文, 例如, 光标放到字符`n`后面, 然后在输入法中输入`nihao`的时候并不会触发补全, 当按空格把`你好`打上来的时候才会触发补全, 此时`输入字段`是`n你好`. @@ -209,7 +219,9 @@ async function 完成项提供者(document: TextDocument, position: Position) { export async function activate(context: vscode.ExtensionContext) { var packageObj = JSON.parse((await fs.promises.readFile(path.resolve(__dirname, '../package.json'))).toString()) var 插件版本 = packageObj.version - console.log('中文代码快速补全: 插件已启动, 版本: %s', 插件版本) + + if (!outputChannel) outputChannel = vscode.window.createOutputChannel('中文代码快速补全') + log('中文代码快速补全: 插件已启动, 版本: ' + 插件版本) // 初始化配置 上下文 = await 创建上下文() @@ -219,12 +231,17 @@ export async function activate(context: vscode.ExtensionContext) { vscode.workspace.onDidChangeConfiguration(async () => { 上下文 = await 创建上下文() 配置 = 查询配置(上下文.配置) - console.log('中文代码快速补全: 配置已刷新') + log('中文代码快速补全: 配置已刷新') }) context.subscriptions.push( vscode.languages.registerCompletionItemProvider( - { scheme: 'file', language: '*' }, + [ + { scheme: 'file', language: '*' }, + { scheme: 'untitled', language: '*' }, + { scheme: 'file', language: '*', notebookType: '*' }, + { scheme: 'untitled', language: '*', notebookType: '*' }, + ], { provideCompletionItems: 完成项提供者, resolveCompletionItem: () => null }, ...配置.触发补全的字符, ),