From 4eb88026a26d2b952ebf3af14c2992552eb77297 Mon Sep 17 00:00:00 2001 From: hbybyyang <2451759073@hotmail.com> Date: Wed, 5 Aug 2020 08:29:31 +0800 Subject: [PATCH 01/31] =?UTF-8?q?=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/launch.json | 5 +- lib/vscode.js | 44 +++ .../\344\272\224\347\254\224.js" | 18 +- ...46\344\270\262\346\211\251\345\261\225.js" | 7 + .../\346\213\274\351\237\263.js" | 0 ...60\347\273\204\346\211\251\345\261\225.js" | 16 ++ "lib/\346\227\245\345\277\227.js" | 6 + ...27\347\254\246\350\241\250\347\244\272.js" | 20 ++ package.json | 8 +- util.js | 259 ------------------ vsc-extension-quickstart.md | 39 --- "\345\205\245\345\217\243.js" | 9 + "\346\217\222\344\273\266.js" | 41 --- ...45\345\205\250\345\256\236\347\216\260.js" | 203 +++++--------- 14 files changed, 185 insertions(+), 490 deletions(-) create mode 100644 lib/vscode.js rename "\344\272\224\347\254\224\350\276\223\345\205\245\346\263\225.js" => "lib/\344\272\224\347\254\224.js" (70%) rename bopomofo.js => "lib/\346\213\274\351\237\263.js" (100%) create mode 100644 "lib/\346\227\245\345\277\227.js" create mode 100644 "lib/\350\216\267\345\276\227\344\270\255\346\226\207\345\255\227\347\254\246\350\241\250\347\244\272.js" delete mode 100755 util.js delete mode 100755 vsc-extension-quickstart.md create mode 100644 "\345\205\245\345\217\243.js" delete mode 100755 "\346\217\222\344\273\266.js" diff --git a/.vscode/launch.json b/.vscode/launch.json index 2bed892..76cd0de 100755 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -10,9 +10,12 @@ "type": "extensionHost", "request": "launch", "runtimeExecutable": "${execPath}", + "env": { + "NODE_ENV": "dev" + }, "args": [ "--extensionDevelopmentPath=${workspaceFolder}", - // "--disable-extensions" + "--disable-extensions" ] }, { diff --git a/lib/vscode.js b/lib/vscode.js new file mode 100644 index 0000000..d74a401 --- /dev/null +++ b/lib/vscode.js @@ -0,0 +1,44 @@ +var vscode = require('vscode') +var R = require('ramda') + +exports.获得当前输入词 = function 获得当前输入词() { + // 我们需要的是文本被编辑后的情况 而不是编辑前的情况 + // 在某些地方调用 会意外的 获得文本被编辑前的情况 + // 所以加个定时器 确保函数在文本修改后执行 + // 这样函数就变成了异步的 于是加了Promise + return new Promise((res, rej) => { + setTimeout(() => { + var editor = vscode.window.activeTextEditor + if (!editor) return res(null) + + var position = editor.selections[0].anchor; + var document = editor.document + var range = document.getWordRangeAtPosition(position) + + if (range == null) return res(null) + + var 当前输入词 = document.getText(range) + return res(当前输入词) + }, 0) + }) +} +exports.获得当前文件后缀名 = function 获得当前文件后缀名({ document }) { + return R.last(document.fileName.split('.')) +} +exports.获得文档内容 = function 获得文档内容(document, position) { + var 总行数 = document.lineCount + var 当前行 = position.line + var 文档内容 = "" + for (var i = 0; i < 总行数; i++) { + if (i != 当前行) + 文档内容 += document.lineAt(i).text + "\n"; + } + return 文档内容 +} +exports.构造文本补全项 = function 构造文本补全项({ 标签, 内容 }) { + var r = new vscode.CompletionItem(标签) + r.label = 标签 + r.kind = 'text' + r.insertText = 内容 + return r +} diff --git "a/\344\272\224\347\254\224\350\276\223\345\205\245\346\263\225.js" "b/lib/\344\272\224\347\254\224.js" similarity index 70% rename from "\344\272\224\347\254\224\350\276\223\345\205\245\346\263\225.js" rename to "lib/\344\272\224\347\254\224.js" index c10470b..1c92b2f 100644 --- "a/\344\272\224\347\254\224\350\276\223\345\205\245\346\263\225.js" +++ "b/lib/\344\272\224\347\254\224.js" @@ -4,7 +4,7 @@ function 五笔(文字, 提示方式) { if (!文字) return ""; var 键码 = ""; var 非汉字字符计数 = 0 - var 版本=提示方式.substr(2,2); + var 版本 = 提示方式.substr(2, 2); for (var i = 0, len = 文字.length; i < len; i++) { var 字 = 文字.substr(i, 1); var unicode = 字.charCodeAt(0); @@ -12,23 +12,21 @@ function 五笔(文字, 提示方式) { if (unicode > 40869 || unicode < 19968) { 键码 += 字 非汉字字符计数++ - } else if (提示方式.indexOf("全码")!=-1) { - 键码 += 首字母大写(码表.取码(字,版本)) - } else if (提示方式.indexOf("四码")!=-1) { + } else if (提示方式.indexOf("全码") != -1) { + 键码 += 首字母大写(码表.取码(字, 版本)) + } else if (提示方式.indexOf("四码") != -1) { if (文字.length - 非汉字字符计数 == 1) { - 键码 += 码表.取码(字,版本) + 键码 += 码表.取码(字, 版本) } else if (文字.length - 非汉字字符计数 == 2) { - 键码 += 码表.取码(字,版本).slice(0, 2) + 键码 += 码表.取码(字, 版本).slice(0, 2) } else if (文字.length - 非汉字字符计数 == 3) { - 键码 += 码表.取码(字,版本).slice(0, i - 非汉字字符计数 < 2 ? 1 : 2) + 键码 += 码表.取码(字, 版本).slice(0, i - 非汉字字符计数 < 2 ? 1 : 2) } else if (文字.length - 非汉字字符计数 >= 4 && (i - 非汉字字符计数 < 3 || i + 1 - 非汉字字符计数 == 文字.length)) { - 键码 += 码表.取码(字,版本).slice(0, 1) + 键码 += 码表.取码(字, 版本).slice(0, 1) } } } return 键码; - - } function 首字母大写(拼音) { if (拼音.length > 0) { diff --git "a/lib/\345\255\227\347\254\246\344\270\262\346\211\251\345\261\225.js" "b/lib/\345\255\227\347\254\246\344\270\262\346\211\251\345\261\225.js" index dc59817..a7b5a7e 100644 --- "a/lib/\345\255\227\347\254\246\344\270\262\346\211\251\345\261\225.js" +++ "b/lib/\345\255\227\347\254\246\344\270\262\346\211\251\345\261\225.js" @@ -1 +1,8 @@ exports.转换为大写 = 字符串 => 字符串.toLocaleUpperCase() +exports.包含中文 = function 包含中文(str) { + return /.*[\u4e00-\u9fa5]+.*$/.test(str) +} +exports.查找词组 = function 查找词组(s) { + var wordPattern = /(-?\d*\.\d\w*)|([^\`\~\!\@\^\&\*\(\)\-\#\?\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s?。,、;:?…—·ˉˇ¨“”~〃|《》〔〕(),]+)/g; + return Array.from(new Set(s.match(wordPattern))) +} diff --git a/bopomofo.js "b/lib/\346\213\274\351\237\263.js" similarity index 100% rename from bopomofo.js rename to "lib/\346\213\274\351\237\263.js" diff --git "a/lib/\346\225\260\347\273\204\346\211\251\345\261\225.js" "b/lib/\346\225\260\347\273\204\346\211\251\345\261\225.js" index 50f8042..016627c 100644 --- "a/lib/\346\225\260\347\273\204\346\211\251\345\261\225.js" +++ "b/lib/\346\225\260\347\273\204\346\211\251\345\261\225.js" @@ -1 +1,17 @@ exports.多重笛卡尔积 = arr => arr.reduce((as, bs) => as.map(a => bs.map(b => [...a, b])).flat(), [[]]) +exports.数组去重 = (判别式, 数组) => { + var 包含 = (判别式, 项, 数组) => { + for (var i = 0; i < 数组.length; i++) { + if (判别式(数组[i], 项)) + return true + } + return false + } + + var r = [] + for (var i = 0; i < 数组.length; i++) { + if (!包含(判别式, 数组[i], r)) + r.push(数组[i]) + } + return r +} diff --git "a/lib/\346\227\245\345\277\227.js" "b/lib/\346\227\245\345\277\227.js" new file mode 100644 index 0000000..4f020f1 --- /dev/null +++ "b/lib/\346\227\245\345\277\227.js" @@ -0,0 +1,6 @@ +exports.log = (...s) => { + if (process.env.NODE_ENV == 'dev') { + console.log(...s.map(a => JSON.stringify(a))) + } + return s[s.length - 1] +} diff --git "a/lib/\350\216\267\345\276\227\344\270\255\346\226\207\345\255\227\347\254\246\350\241\250\347\244\272.js" "b/lib/\350\216\267\345\276\227\344\270\255\346\226\207\345\255\227\347\254\246\350\241\250\347\244\272.js" new file mode 100644 index 0000000..6ce4aef --- /dev/null +++ "b/lib/\350\216\267\345\276\227\344\270\255\346\226\207\345\255\227\347\254\246\350\241\250\347\244\272.js" @@ -0,0 +1,20 @@ +var 五笔 = require('./五笔.js') +var 拼音A = require('./拼音.js') +var 拼音 = require('pinyin') +var { 多重笛卡尔积 } = require('./数组扩展.js') +var { 转换为大写 } = require('./字符串扩展') + +module.exports = function 获得中文字符表示({ 表示方法, 文本, 选项 }) { + if (表示方法.indexOf("五笔") != -1) { + return [五笔.五笔(文本, 表示方法)] + } + if (表示方法.indexOf('拼音')) { + var 结果 = null + 结果 = 拼音(文本, { heteronym: 选项.使用多音字 == 'yes', style: 拼音.STYLE_NORMAL }) + 结果 = 结果.map(a => a.map(a => 转换为大写(a[0]) + a.substring(1))) + 结果 = 多重笛卡尔积(结果).map(a => a.join('')) + if (表示方法 != "全拼") + 结果 = 结果.map(a => 拼音A.双拼转换(a, 表示方法)) + return 结果 + } +} diff --git a/package.json b/package.json index c72f35d..4857fc4 100755 --- a/package.json +++ b/package.json @@ -14,14 +14,8 @@ "*", "onCommand:插件命令" ], - "main": "./插件.js", + "main": "./入口.js", "contributes": { - "commands": [ - { - "command": "插件命令", - "title": "中文插件" - } - ], "configuration": { "title": "中文代码快速补全", "properties": { diff --git a/util.js b/util.js deleted file mode 100755 index 6feb47b..0000000 --- a/util.js +++ /dev/null @@ -1,259 +0,0 @@ -const fs = require('fs'); -const os = require('os'); -const path = require('path'); -const vscode = require('vscode'); -const exec = require('child_process').exec; - -const util = { - /** - * 获取当前所在工程根目录,有3种使用方法:
- * getProjectPath(uri) uri 表示工程内某个文件的路径
- * getProjectPath(document) document 表示当前被打开的文件document对象
- * getProjectPath() 会自动从 activeTextEditor 拿document对象,如果没有拿到则报错 - * @param {*} document - */ - getProjectPath(document) { - if (!document) { - document = vscode.window.activeTextEditor ? vscode.window.activeTextEditor.document : null; - } - if (!document) { - this.showError('当前激活的编辑器不是文件或者没有文件被打开!'); - return ''; - } - const currentFile = (document.uri ? document.uri : document).fsPath; - let projectPath = null; - - let workspaceFolders = vscode.workspace.workspaceFolders.map(item => item.uri.path); - // 由于存在Multi-root工作区,暂时没有特别好的判断方法,先这样粗暴判断 - // 如果发现只有一个根文件夹,读取其子文件夹作为 workspaceFolders - if (workspaceFolders.length == 1 && workspaceFolders[0] === vscode.workspace.rootPath) { - const rootPath = workspaceFolders[0]; - var files = fs.readdirSync(rootPath); - workspaceFolders = files.filter(name => !/^\./g.test(name)).map(name => path.resolve(rootPath, name)); - // vscode.workspace.rootPath会不准确,且已过时 - // return vscode.workspace.rootPath + '/' + this._getProjectName(vscode, document); - } - workspaceFolders.forEach(folder => { - if (currentFile.indexOf(folder) === 0) { - projectPath = folder; - } - }) - if (!projectPath) { - this.showError('获取工程根路径异常!'); - return ''; - } - return projectPath; - }, - /** - * 获取当前工程名 - */ - getProjectName: function (projectPath) { - return path.basename(projectPath); - }, - getPluginPath() { - - }, - /** - * 将一个单词首字母大写并返回 - * @param {*} word 某个字符串 - */ - upperFirstLetter: function (word) { - return (word || '').replace(/^\w/, m => m.toUpperCase()); - }, - /** - * 将一个单词首字母转小写并返回 - * @param {*} word 某个字符串 - */ - lowerFirstLeter: function (word) { - return (word || '').replace(/^\w/, m => m.toLowerCase()); - }, - /** - * 全局日志开关,发布时可以注释掉日志输出 - */ - log: function (...args) { - console.log(...args); - }, - /** - * 全局日志开关,发布时可以注释掉日志输出 - */ - error: function (...args) { - console.error(...args); - }, - /** - * 弹出错误信息 - */ - showError: function (info) { - vscode.window.showErrorMessage(info); - }, - /** - * 弹出提示信息 - */ - showInfo: function (info) { - vscode.window.showInformationMessage(info); - }, - findStrInFolder: function (folderPath, str) { - - }, - /** - * 从某个文件里面查找某个字符串,返回第一个匹配处的行与列,未找到返回第一行第一列 - * @param filePath 要查找的文件 - * @param reg 正则对象,最好不要带g,也可以是字符串 - */ - findStrInFile: function (filePath, reg) { - const content = fs.readFileSync(filePath, 'utf-8'); - reg = typeof reg === 'string' ? new RegExp(reg, 'm') : reg; - // 没找到直接返回 - if (content.search(reg) < 0) return { row: 0, col: 0 }; - const rows = content.split(os.EOL); - // 分行查找只为了拿到行 - for (let i = 0; i < rows.length; i++) { - let col = rows[i].search(reg); - if (col >= 0) { - return { row: i, col }; - } - } - return { row: 0, col: 0 }; - }, - /** - * 获取某个字符串在文件里第一次出现位置的范围, - */ - getStrRangeInFile: function (filePath, str) { - var pos = this.findStrInFile(filePath, str); - return new vscode.Range(new vscode.Position(pos.row, pos.col), new vscode.Position(pos.row, pos.col + str.length)); - }, - /** - * 简单的检测版本大小 - */ - checkVersion: function (version1, version2) { - version1 = parseInt(version1.replace(/\./g, '')); - version2 = parseInt(version2.replace(/\./g, '')); - return version1 > version2; - }, - /** - * 获取某个扩展文件绝对路径 - * @param context 上下文 - * @param relativePath 扩展中某个文件相对于根目录的路径,如 images/test.jpg - */ - getExtensionFileAbsolutePath: function (context, relativePath) { - return path.join(context.extensionPath, relativePath); - }, - /** - * 获取某个扩展文件相对于webview需要的一种特殊路径格式 - * 形如:vscode-resource:/Users/toonces/projects/vscode-cat-coding/media/cat.gif - * @param context 上下文 - * @param relativePath 扩展中某个文件相对于根目录的路径,如 images/test.jpg - */ - getExtensionFileVscodeResource: function (context, relativePath) { - const diskPath = vscode.Uri.file(path.join(context.extensionPath, relativePath)); - return diskPath.with({ scheme: 'vscode-resource' }).toString(); - }, - /** - * 在Finder中打开某个文件或者路径 - */ - openFileInFinder: function (filePath) { - if (!fs.existsSync(filePath)) { - this.showError('文件不存在:' + filePath); - } - // 如果是目录,直接打开就好 - if (fs.statSync(filePath).isDirectory()) { - exec(`open ${filePath}`); - } else { - // 如果是文件,要分开处理 - const fileName = path.basename(filePath); - filePath = path.dirname(filePath); - // 这里有待完善,还不知道如何finder中如何选中文件 - exec(`open ${filePath}`); - } - }, - /** - * 在vscode中打开某个文件 - * @param {*} path 文件绝对路径 - * @param {*} text 可选,如果不为空,则选中第一处匹配的对应文字 - */ - openFileInVscode: function (path, text) { - let options = undefined; - if (text) { - const selection = this.getStrRangeInFile(path, text); - options = { selection }; - } - vscode.window.showTextDocument(vscode.Uri.file(path), options); - }, - /** - * 用JD-GUI打开jar包 - */ - openJarByJdGui: function (jarPath) { - // 如何选中文件有待完善 - const jdGuiPath = vscode.workspace.getConfiguration().get('eggHelper.jdGuiPath'); - if (!jdGuiPath) { - this.showError('JD-GUI路径不能为空!'); - return; - } - if (!fs.existsSync(jdGuiPath)) { - this.showError('您还没有安装JD-GUI,请安装完后到vscode设置里面找到HSF助手并进行路径配置。'); - return; - } - if (!fs.existsSync(jarPath)) { - this.showError('jar包未找到:' + jarPath); - return; - } - exec(`open ${jarPath} -a ${jdGuiPath}`); - }, - /** - * 使用默认浏览器中打开某个URL - */ - openUrlInBrowser: function (url) { - exec(`open '${url}'`); - }, - /** - * 递归遍历清空某个资源的require缓存 - * @param {*} absolutePath - */ - clearRequireCache(absolutePath) { - const root = require.cache[absolutePath]; - if (!root) return; - if (root.children) { - // 如果有子依赖项,先清空依赖项的缓存 - root.children.forEach(item => { - this.clearRequireCache(item.id); - }); - } - delete require.cache[absolutePath]; - }, - /** - * 动态require,和普通require不同的是,加载之前会先尝试删除缓存 - * @param {*} modulePath - */ - dynamicRequire(modulePath) { - this.clearRequireCache(modulePath); - return require(modulePath); - }, - /** - * 读取properties文件 - * @param {*} filePath - */ - readProperties(filePath) { - const content = fs.readFileSync(filePath, 'utf-8'); - let rows = content.split(os.EOL); - rows = rows.filter(row => row && row.trim() && !/^#/.test(row)); - const result = {}; - rows.forEach(row => { - let temp = row.split('='); - result[temp[0].trim()] = temp[1].trim(); - }); - return result; - }, - /** - * 比较2个对象转JSON字符串后是否完全一样 - * 特别注意,由于JS遍历对象的无序性(部分浏览器是按照添加顺序遍历的)导致同样的对象, - * 转成JSON串之后反而不一样,所以这里采用其它方式实现。 - * @param {*} obj1 - * @param {*} obj2 - */ - jsonEquals(obj1, obj2) { - let s1 = this.formatToSpecialJSON(obj1, '', true); - let s2 = this.formatToSpecialJSON(obj2, '', true); - return s1 === s2; - } -}; - -module.exports = util; diff --git a/vsc-extension-quickstart.md b/vsc-extension-quickstart.md deleted file mode 100755 index e6da2a5..0000000 --- a/vsc-extension-quickstart.md +++ /dev/null @@ -1,39 +0,0 @@ -# Welcome to your VS Code Extension - -## What's in the folder - -* This folder contains all of the files necessary for your extension. -* `package.json` - this is the manifest file in which you declare your extension and command. - * The sample plugin registers a command and defines its title and command name. With this information VS Code can show the command in the command palette. It doesn’t yet need to load the plugin. -* `extension.js` - this is the main file where you will provide the implementation of your command. - * The file exports one function, `activate`, which is called the very first time your extension is activated (in this case by executing the command). Inside the `activate` function we call `registerCommand`. - * We pass the function containing the implementation of the command as the second parameter to `registerCommand`. - -## Get up and running straight away - -* Press `F5` to open a new window with your extension loaded. -* Run your command from the command palette by pressing (`Ctrl+Shift+P` or `Cmd+Shift+P` on Mac) and typing `Hello World`. -* Set breakpoints in your code inside `extension.js` to debug your extension. -* Find output from your extension in the debug console. - -## Make changes - -* You can relaunch the extension from the debug toolbar after changing code in `extension.js`. -* You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes. - -## Explore the API - -* You can open the full set of our API when you open the file `node_modules/@types/vscode/index.d.ts`. - -## Run tests - -* Open the debug viewlet (`Ctrl+Shift+D` or `Cmd+Shift+D` on Mac) and from the launch configuration dropdown pick `Extension Tests`. -* Press `F5` to run the tests in a new window with your extension loaded. -* See the output of the test result in the debug console. -* Make changes to `src/test/suite/extension.test.js` or create new test files inside the `test/suite` folder. - * The provided test runner will only consider files matching the name pattern `**.test.ts`. - * You can create folders inside the `test` folder to structure your tests any way you want. -## Go further - - * [Publish your extension](https://code.visualstudio.com/api/working-with-extensions/publishing-extension) on the VSCode extension marketplace. - * Automate builds by setting up [Continuous Integration](https://code.visualstudio.com/api/working-with-extensions/continuous-integration). diff --git "a/\345\205\245\345\217\243.js" "b/\345\205\245\345\217\243.js" new file mode 100644 index 0000000..a7471db --- /dev/null +++ "b/\345\205\245\345\217\243.js" @@ -0,0 +1,9 @@ +var vscode = require('vscode') +var 补全实现 = require('./补全实现') + +function activate(context) { + console.log('恭喜,插件已激活') + 补全实现(context) +} + +exports.activate = activate diff --git "a/\346\217\222\344\273\266.js" "b/\346\217\222\344\273\266.js" deleted file mode 100755 index 9b4db95..0000000 --- "a/\346\217\222\344\273\266.js" +++ /dev/null @@ -1,41 +0,0 @@ -// The module 'vscode' contains the VS Code extensibility API -// Import the module and reference it with the alias vscode in your code below -const vscode = require('vscode'); -// const util = require('./util'); -// this method is called when your extension is activated -// your extension is activated the very first time the command is executed - -/** - * @param {vscode.ExtensionContext} context - */ -function activate(context) { - - // Use the console to output diagnostic information (console.log) and errors (console.error) - // This line of code will only be executed once when your extension is activated - console.log('恭喜,插件已激活'); - require('./补全实现')(context); - // The command has been defined in the package.json file - // Now provide the implementation of the command with registerCommand - // The commandId parameter must match the command field in package.json - let disposable = vscode.commands.registerCommand('插件命令', function () { - // The code you place here will be executed every time your command is executed - - // Display a message box to the user - vscode.window.showInformationMessage('喵'); - }); - - context.subscriptions.push(disposable); -} - - - -exports.activate = activate; - -// this method is called when your extension is deactivated -function deactivate() { } - -module.exports = { - activate, - deactivate -} - diff --git "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" index fa93243..c19a2b5 100755 --- "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" +++ "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" @@ -1,44 +1,10 @@ -const vscode = require('vscode') -const bopomofo = require('./bopomofo') -const 五笔 = require('./五笔输入法') -const 谷歌输入法 = require('./lib/谷歌输入法API') -const 百度搜索联想 = require('./lib/百度搜索联想') -var pinyin = require("pinyin") -var 字符串扩展 = require("./lib/字符串扩展") -var { 多重笛卡尔积 } = require("./lib/数组扩展") +var vscode = require('vscode') var R = require('ramda') +var { log } = require('./lib/日志') +var { 包含中文, 查找词组 } = require('./lib/字符串扩展') +var { 数组去重 } = require('./lib/数组扩展') +var 获得中文字符表示 = require('./lib/获得中文字符表示') -function 包含中文(str) { - return /.*[\u4e00-\u9fa5]+.*$/.test(str) -} -var 数组去重 = 数组 => Array.from(new Set(数组)) -function 查找词组(s) { - var wordPattern = /(-?\d*\.\d\w*)|([^\`\~\!\@\^\&\*\(\)\-\#\?\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s?。,、;:?…—·ˉˇ¨“”~〃|《》〔〕(),]+)/g; - return 数组去重(s.match(wordPattern)) -} -function 获得文档内容(document, position) { - var 总行数 = document.lineCount - var 当前行 = position.line - var 文档内容 = "" - for (var i = 0; i < 总行数; i++) { - if (i != 当前行) - 文档内容 += document.lineAt(i).text + "\n"; - } - return 文档内容 -} -function 获得拼音(提示方式, 文本) { - var 拼音 = null - if (提示方式.indexOf("五笔") != -1) { - 拼音 = [五笔.五笔(文本, 提示方式)] - } else { - var 使用多音字 = vscode.workspace.getConfiguration('ChineseInputAssistant').get("InputMethod_polyphone") - 拼音 = pinyin(文本, { heteronym: 使用多音字 == 'yes', style: pinyin.STYLE_NORMAL }) - 拼音 = 拼音.map(a => a.map(a => 字符串扩展.转换为大写(a[0]) + a.substring(1))) - 拼音 = 多重笛卡尔积(拼音).map(a => a.join('')) - if (提示方式 != "全拼") 拼音 = 拼音.map(a => bopomofo.双拼转换(a, 提示方式)) - } - return 拼音 -} function 获得当前输入词() { // 我们需要的是文本被编辑后的情况 而不是编辑前的情况 // 在某些地方调用 会意外的 获得文本被编辑前的情况 @@ -60,98 +26,68 @@ function 获得当前输入词() { }, 0) }) } - -var 上次的补全词 = [] -var provideCompletionItems_上次调用输入词 = undefined -async function provideCompletionItems(document, position, token, context) { - var 当前文件类型 = R.last(document.fileName.split('.')) - - var 当前输入词 = await 获得当前输入词() - // console.log('当前输入词', 当前输入词) - - // 防止无限递归 - if (当前输入词 == provideCompletionItems_上次调用输入词) { - // console.log('重复调用') - return [] - } - provideCompletionItems_上次调用输入词 = 当前输入词 - - // 获得配置项 - var 使用输入法 = vscode.workspace.getConfiguration('ChineseInputAssistant').get("InputMethod") - var 提示方式 = vscode.workspace.getConfiguration('中文代码快速补全').get("提示方式") - - var 提示文本们 = [] - - // 获得系统解析出的关键字 - // vscode.executeCompletionItemProvider 会调用provideCompletionItems 所以要防止无限递归 - var 系统解析出的关键字 = await vscode.commands.executeCommand('vscode.executeCompletionItemProvider', document.uri, position) - 提示文本们 = 提示文本们.concat(系统解析出的关键字.items) - - // 对 c/cpp 的特殊处理 - if (当前文件类型 == 'c' || 当前文件类型 == 'cpp') { - // 加入上次的补全词 - 上次的补全词 = 上次的补全词.map(a => a.label).filter(a => a.indexOf('\t') != -1).map(a => a.split('\t')[0]) - 提示文本们 = 提示文本们.concat(上次的补全词.filter(a => !提示文本们.map(b => b.label).includes(a)).map(a => ({ - label: a, - kind: vscode.CompletionItemKind.Text, - }))) - - // 获得当前文档的所有中文 加入候选项 - var 中文词组 = R.compose(R.filter(包含中文), 查找词组)(获得文档内容(document, position)) - 提示文本们 = 提示文本们.concat(中文词组.filter(a => !提示文本们.map(b => b.label).includes(a)).map(a => ({ - label: a, - kind: vscode.CompletionItemKind.Text, - }))) - } - - // 获得输入法提供的关键字 - if (使用输入法 != 'no') { - var func - - if (使用输入法 == 'Google Pinyin') - func = 谷歌输入法 - else if (使用输入法 == 'Baidu Sugrec') - func = 百度搜索联想 - - var 输入法结果 = await func(当前输入词)(5).catch(e => { - console.error('调用输入法api失败:' + e.toString()) - 输入法结果 = [] - }) - 提示文本们 = 提示文本们.concat(输入法结果.map(a => ({ - label: a, - kind: vscode.CompletionItemKind.Text, - }))) - } - - // 将带中文的标签加入拼音返回 - // 不带中文的不需要包括在返回结果里 - // 这个函数只需要返回新增的提示 不需要返回原有的提示 - var 返回对象 = 提示文本们.map(补全对象 => { - var 文本 = 补全对象.label - if (包含中文(文本)) { - return 获得拼音(提示方式, 文本).map(拼音 => { - var r = new vscode.CompletionItem(文本) - r.label = `${文本}\t${拼音}` - r.kind = 补全对象.kind - r.insertText = 补全对象.insertText || 文本 - return r - }) - } - - // cpp 插件很奇怪 必须要原样返回 - if (当前文件类型 == 'c' || 当前文件类型 == 'cpp') - return [补全对象] - - return [] - }).flat() - - // 对 c/cpp 的特殊处理 - if (当前文件类型 == 'c' || 当前文件类型 == 'cpp') { - 上次的补全词 = 返回对象 +function 获得文档内容(document, position) { + var 总行数 = document.lineCount + var 当前行 = position.line + var 文档内容 = "" + for (var i = 0; i < 总行数; i++) { + if (i != 当前行) + 文档内容 += document.lineAt(i).text + "\n"; } + return 文档内容 +} - // console.log(返回对象.map(a => a.label).join(',')) - return 返回对象 +// vscode.executeCompletionItemProvider 会调用 provideCompletionItems 导致无限递归 +// 因为 js 是单线程模型 所以做了一个简单的锁 应该不会有问题 +var 防递归锁 = false +async function provideCompletionItems(document, position, token, context) { + if (防递归锁) return [] + 防递归锁 = true + + var 输入词 = await 获得当前输入词() + log('================') + log('输入词', 输入词) + + var 文件类型 = R.last(document.fileName.split('.')) + // log('当前文件类型', 文件类型) + + var 用户配置 = {} + 用户配置.使用输入法 = vscode.workspace.getConfiguration('ChineseInputAssistant').get("InputMethod") + 用户配置.使用多音字 = vscode.workspace.getConfiguration('ChineseInputAssistant').get("InputMethod_polyphone") + 用户配置.提示方式 = vscode.workspace.getConfiguration('中文代码快速补全').get("提示方式") + // log('用户配置', 用户配置) + + var 返回对象 = [] + + var 完成项提供程序 = await vscode.commands.executeCommand('vscode.executeCompletionItemProvider', document.uri, position) + 完成项提供程序 = 完成项提供程序.items + 返回对象 = 返回对象.concat(完成项提供程序) + // log('完成项提供程序', 完成项提供程序.map(a => a.label)) + + // 这个好像很卡 + // var 文档符号提供程序 = await vscode.commands.executeCommand('vscode.executeDocumentSymbolProvider', document.uri) + // 文档符号提供程序 = 文档符号提供程序.map(a => new vscode.CompletionItem(a.name, a.kind)) + // 返回对象 = 返回对象.concat(文档符号提供程序) + // log('文档符号提供程序', 文档符号提供程序.map(a => a.label)) + + var 文档符号 = R.compose(R.filter(包含中文), 查找词组)(获得文档内容(document, position)) + 文档符号 = 文档符号.map(a => new vscode.CompletionItem(a, vscode.CompletionItemKind.Text)) + 返回对象 = 返回对象.concat(文档符号) + // log('文档符号', 文档符号.map(a => a.label)) + + 返回对象 = 数组去重((a, b) => a.label == b.label, 返回对象) + 返回对象 = 返回对象.filter(a => 包含中文(a.label)) + 返回对象 = 返回对象.map(a => R.set(R.lensProp('insertText'), a.label, a)) + 返回对象 = 返回对象.map(a => R.set(R.lensProp('label'), `${a.label}\t${获得中文字符表示({ + 表示方法: 用户配置.提示方式, + 文本: a.label, + 选项: { 使用多音字: 用户配置.使用多音字 } + })}`, a)) + + 防递归锁 = false + + log('返回对象', 返回对象.map(a => a.label)) + return new vscode.CompletionList(返回对象, true) } function resolveCompletionItem(item, token) { @@ -159,10 +95,11 @@ function resolveCompletionItem(item, token) { } module.exports = function (context) { - // 注册触发补全功能时调用的函数 - context.subscriptions.push(vscode.languages.registerCompletionItemProvider({ scheme: 'file', language: '*' }, { + context.subscriptions.push(vscode.languages.registerCompletionItemProvider({ + scheme: 'file', + language: '*' + }, { provideCompletionItems, resolveCompletionItem - }, '.', '$', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z')) + }, '.')) } - -- Gitee From 957d165f10042cd5116b514beda162500365c113 Mon Sep 17 00:00:00 2001 From: hbybyyang <2451759073@hotmail.com> Date: Wed, 5 Aug 2020 08:38:38 +0800 Subject: [PATCH 02/31] =?UTF-8?q?=E8=8E=B7=E5=BE=97=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E5=86=85=E5=AE=B9=20=E6=9B=B4=E5=A5=BD=E7=9A=84=E5=86=99?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...1\245\345\205\250\345\256\236\347\216\260.js" | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" index c19a2b5..3119904 100755 --- "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" +++ "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" @@ -26,16 +26,6 @@ function 获得当前输入词() { }, 0) }) } -function 获得文档内容(document, position) { - var 总行数 = document.lineCount - var 当前行 = position.line - var 文档内容 = "" - for (var i = 0; i < 总行数; i++) { - if (i != 当前行) - 文档内容 += document.lineAt(i).text + "\n"; - } - return 文档内容 -} // vscode.executeCompletionItemProvider 会调用 provideCompletionItems 导致无限递归 // 因为 js 是单线程模型 所以做了一个简单的锁 应该不会有问题 @@ -48,8 +38,8 @@ async function provideCompletionItems(document, position, token, context) { log('================') log('输入词', 输入词) - var 文件类型 = R.last(document.fileName.split('.')) - // log('当前文件类型', 文件类型) + var 文件后缀名 = R.last(document.fileName.split('.')) + // log('当前文件后缀名', 文件后缀名) var 用户配置 = {} 用户配置.使用输入法 = vscode.workspace.getConfiguration('ChineseInputAssistant').get("InputMethod") @@ -70,7 +60,7 @@ async function provideCompletionItems(document, position, token, context) { // 返回对象 = 返回对象.concat(文档符号提供程序) // log('文档符号提供程序', 文档符号提供程序.map(a => a.label)) - var 文档符号 = R.compose(R.filter(包含中文), 查找词组)(获得文档内容(document, position)) + var 文档符号 = R.compose(R.filter(包含中文), 查找词组)(document.getText()) 文档符号 = 文档符号.map(a => new vscode.CompletionItem(a, vscode.CompletionItemKind.Text)) 返回对象 = 返回对象.concat(文档符号) // log('文档符号', 文档符号.map(a => a.label)) -- Gitee From 04479479cfa7bd1f97300f930468f6f6624c2830 Mon Sep 17 00:00:00 2001 From: fromwheretowhere Date: Tue, 4 Aug 2020 20:37:05 -0700 Subject: [PATCH 03/31] =?UTF-8?q?=E5=8A=9F=E8=83=BD=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E5=BC=80=E5=A4=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\345\212\237\350\203\275.md" | 79 +++++++++++++++++++ ...00\345\217\221\350\257\264\346\230\216.md" | 0 2 files changed, 79 insertions(+) create mode 100644 "\346\226\207\346\241\243/\345\212\237\350\203\275.md" rename "\345\274\200\345\217\221\350\257\264\346\230\216.md" => "\346\226\207\346\241\243/\345\274\200\345\217\221\350\257\264\346\230\216.md" (100%) diff --git "a/\346\226\207\346\241\243/\345\212\237\350\203\275.md" "b/\346\226\207\346\241\243/\345\212\237\350\203\275.md" new file mode 100644 index 0000000..fe2a2a6 --- /dev/null +++ "b/\346\226\207\346\241\243/\345\212\237\350\203\275.md" @@ -0,0 +1,79 @@ + +## 术语表 + +参考:[VSC IntelliSense 官方文档](https://code.visualstudio.com/docs/editor/intellisense) + +| 中文 | 英文 | 简述 | +| ------------- | ------------- | ------------- | +| 代码补全 | code completion | | +| 触发字符 | trigger character | 比如 JavaScript 中的 . | +| 建议弹窗 | suggestions widget | 光标下方的包含建议补全项的窗口 | +| 关键词 | keyword | 编程语言语法中的保留关键词,如 [JS](https://www.w3schools.com/js/js_reserved.asp)中的 const,continue 等 | +| 标识符 | identifier | 关键词之外的代码内容,包括变量、方法、类名等等 | + +标识符分为下面几种: +| 中文 | 英文 | 简述 | +| ------------- | ------------- | ------------- | +| 方法 | method, function | +| 变量 | variable | +| 域 | field | +| 类 | class | +| 接口 | interface | +| 模块 | module | +| 属性 | Properties and Attributes | +| 枚举 | Values and Enumerations | +| 引用 | reference | +| 代码片段 | (code) snippet | +| 颜色 | color | +| 单位 | unit | +| 词语 | Words | 不归属于上述种类的内容 + +# 功能 + +此部分 JS 相关,今后逐步补充其他语言。建议弹窗内容中,补全项的顺序、种类与实际效果一致,如无特殊情况,列出前五项。 + +## 无本插件时效果 + +使用 VS Code 默认补全配置。测试文件[在此](../供测试/js/index.js) + +### 英文标识符 + +#### 方法 + + + +#### 变量 + +语言内置变量:输入“con”,建议弹窗内容 + +- 【变量】 console +- 【变量】lib_node +- 【关键词】let +- 【代码片段】log +- 【模块】languages + +自定义变量:输入"l" + +- 【变量】 lib_esm +- 【变量】 lib_node +- 【关键词】 let +- 【代码片段】 log +- 【模块】 languages + +【待补完】 + +### 中文标识符 + +#### 变量 + +输入“中”: + +- 【变量】 中文变量 + +【待补完】 + +## 安装本插件后效果 + +### 英文标识符 + +### 中文标识符 diff --git "a/\345\274\200\345\217\221\350\257\264\346\230\216.md" "b/\346\226\207\346\241\243/\345\274\200\345\217\221\350\257\264\346\230\216.md" similarity index 100% rename from "\345\274\200\345\217\221\350\257\264\346\230\216.md" rename to "\346\226\207\346\241\243/\345\274\200\345\217\221\350\257\264\346\230\216.md" -- Gitee From 82bb897112cfbf8176c4e2e6e85bea5703039c9b Mon Sep 17 00:00:00 2001 From: fromwheretowhere Date: Tue, 4 Aug 2020 20:42:44 -0700 Subject: [PATCH 04/31] =?UTF-8?q?=E4=BF=AE=E6=AD=A3con=20=E5=BB=BA?= =?UTF-8?q?=E8=AE=AE=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\346\226\207\346\241\243/\345\212\237\350\203\275.md" | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git "a/\346\226\207\346\241\243/\345\212\237\350\203\275.md" "b/\346\226\207\346\241\243/\345\212\237\350\203\275.md" index fe2a2a6..d5266a9 100644 --- "a/\346\226\207\346\241\243/\345\212\237\350\203\275.md" +++ "b/\346\226\207\346\241\243/\345\212\237\350\203\275.md" @@ -46,11 +46,11 @@ 语言内置变量:输入“con”,建议弹窗内容 -- 【变量】 console -- 【变量】lib_node -- 【关键词】let -- 【代码片段】log -- 【模块】languages +- 【变量】 console +- 【关键词】 const +- 【变量】 context +- 【关键词】 continue +- 【方法】 concat 自定义变量:输入"l" -- Gitee From 2a5edada7bd52c64349f94aedf475dcc25dd8361 Mon Sep 17 00:00:00 2001 From: fromwheretowhere Date: Tue, 4 Aug 2020 20:50:12 -0700 Subject: [PATCH 05/31] =?UTF-8?q?=E5=8A=9F=E8=83=BD=E6=96=87=E6=A1=A3:=20?= =?UTF-8?q?=E5=8A=A0=E5=85=A5=E5=88=86=E7=B1=BB=E5=9B=BE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\345\212\237\350\203\275.md" | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git "a/\346\226\207\346\241\243/\345\212\237\350\203\275.md" "b/\346\226\207\346\241\243/\345\212\237\350\203\275.md" index d5266a9..636750c 100644 --- "a/\346\226\207\346\241\243/\345\212\237\350\203\275.md" +++ "b/\346\226\207\346\241\243/\345\212\237\350\203\275.md" @@ -11,22 +11,23 @@ | 关键词 | keyword | 编程语言语法中的保留关键词,如 [JS](https://www.w3schools.com/js/js_reserved.asp)中的 const,continue 等 | | 标识符 | identifier | 关键词之外的代码内容,包括变量、方法、类名等等 | -标识符分为下面几种: -| 中文 | 英文 | 简述 | -| ------------- | ------------- | ------------- | -| 方法 | method, function | -| 变量 | variable | -| 域 | field | -| 类 | class | -| 接口 | interface | -| 模块 | module | -| 属性 | Properties and Attributes | -| 枚举 | Values and Enumerations | -| 引用 | reference | -| 代码片段 | (code) snippet | -| 颜色 | color | -| 单位 | unit | -| 词语 | Words | 不归属于上述种类的内容 +关键词、标识符分类: +| 图标 | 中文 | 英文 | 简述 | +| ------------- | ------------- | ------------- | ------------- | +| ![](https://code.visualstudio.com/assets/docs/editor/intellisense/Method_16x.svg) | 方法 | method, function | +| ![](https://code.visualstudio.com/assets/docs/editor/intellisense/Variable_16x.svg) | 变量 | variable | +| ![](https://code.visualstudio.com/assets/docs/editor/intellisense/Field_16x.svg) | 域 | field | +| ![](https://code.visualstudio.com/assets/docs/editor/intellisense/Class_16x.svg) | 类 | class | +| ![](https://code.visualstudio.com/assets/docs/editor/intellisense/Interface_16x.svg) | 接口 | interface | +| ![](https://code.visualstudio.com/assets/docs/editor/intellisense/Namespace_16x.svg) | 模块 | module | +| ![](https://code.visualstudio.com/assets/docs/editor/intellisense/Property_16x.svg) | 属性 | Properties and Attributes | +| ![](https://code.visualstudio.com/assets/docs/editor/intellisense/EnumItem_16x.svg) | 枚举 | Values and Enumerations | +| ![](https://code.visualstudio.com/assets/docs/editor/intellisense/Reference_16x.svg) | 引用 | reference | +| ![](https://code.visualstudio.com/assets/docs/editor/intellisense/Keyword_16x.svg) | 关键词 | keyword | +| ![](https://code.visualstudio.com/assets/docs/editor/intellisense/ColorPalette_16x.svg) | 颜色 | color | +| ![](https://code.visualstudio.com/assets/docs/editor/intellisense/Ruler_16x.svg) | 单位 | unit | +| ![](https://code.visualstudio.com/assets/docs/editor/intellisense/Snippet_16x.svg) | 代码片段 | (code) snippet | +| ![](https://code.visualstudio.com/assets/docs/editor/intellisense/String_16x.svg) | 词语 | Words | 不归属于上述种类的内容 # 功能 -- Gitee From 4bc1e53ecaa3c72564eac38acc5d7712c06ae49d Mon Sep 17 00:00:00 2001 From: fromwheretowhere Date: Wed, 5 Aug 2020 00:44:19 -0700 Subject: [PATCH 06/31] =?UTF-8?q?=E5=8A=9F=E8=83=BD:=20=E6=97=A0=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=E6=95=88=E6=9E=9C=E9=83=A8=E5=88=86=E5=9F=BA=E6=9C=AC?= =?UTF-8?q?=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../js/index.js" | 6 ++ .../\345\212\237\350\203\275.md" | 58 ++++++++++++++----- 2 files changed, 49 insertions(+), 15 deletions(-) diff --git "a/\344\276\233\346\265\213\350\257\225/js/index.js" "b/\344\276\233\346\265\213\350\257\225/js/index.js" index 585b5cf..497f148 100644 --- "a/\344\276\233\346\265\213\350\257\225/js/index.js" +++ "b/\344\276\233\346\265\213\350\257\225/js/index.js" @@ -3,6 +3,12 @@ import lib_esm from './lib_esm' var lib_node = require('./lib_node') var 中文变量 = 1 +function add() { + +} + +zero = 0 + // 输入 lib_esm.zw // 输入 lib_node.zw // 输入 zw diff --git "a/\346\226\207\346\241\243/\345\212\237\350\203\275.md" "b/\346\226\207\346\241\243/\345\212\237\350\203\275.md" index 636750c..6e4fe9d 100644 --- "a/\346\226\207\346\241\243/\345\212\237\350\203\275.md" +++ "b/\346\226\207\346\241\243/\345\212\237\350\203\275.md" @@ -39,37 +39,65 @@ ### 英文标识符 +下面的用例,按照建议弹窗第一项的种类分成几部分。 + #### 方法 +语言内置方法:输入“hasIn”。***可能不需输入所有字符,就会出现在建议弹窗内容第一项,并且之后还有其他项(种类可能各异)。以下无特殊说明也是如此。*** +自定义方法:输入“add” #### 变量 -语言内置变量:输入“con”,建议弹窗内容 +语言内置变量:输入“console” -- 【变量】 console -- 【关键词】 const -- 【变量】 context -- 【关键词】 continue -- 【方法】 concat +自定义变量:输入"lib_esm" -自定义变量:输入"l" +#### 域 -- 【变量】 lib_esm -- 【变量】 lib_node -- 【关键词】 let -- 【代码片段】 log -- 【模块】 languages +输入“activate” -【待补完】 +#### 类 + +输入“CodeAction” + +#### 模块 + +输入“Intl” + +#### 枚举 + +输入“IndentAction” + +#### 关键词 + +输入“new” + +#### 代码片段 + +输入“log” + +#### 词语 + +输入“zero” + +#### 接口【暂未重现】 +#### 属性【暂未重现】 +#### 引用【暂未重现】 ### 中文标识符 +#### 域 + +输入“lib_esm.中文” + #### 变量 -输入“中”: +输入“中文变量” + +#### 词语 -- 【变量】 中文变量 +lib_esm.中文变量 【待补完】 -- Gitee From 958bd3306503ac30f601acda3248f0698893c51d Mon Sep 17 00:00:00 2001 From: fromwheretowhere Date: Wed, 5 Aug 2020 00:59:16 -0700 Subject: [PATCH 07/31] =?UTF-8?q?=E5=8A=9F=E8=83=BD:=20=E5=AE=89=E8=A3=85?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E4=B8=80=E9=83=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\345\212\237\350\203\275.md" | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git "a/\346\226\207\346\241\243/\345\212\237\350\203\275.md" "b/\346\226\207\346\241\243/\345\212\237\350\203\275.md" index 6e4fe9d..7d45ec6 100644 --- "a/\346\226\207\346\241\243/\345\212\237\350\203\275.md" +++ "b/\346\226\207\346\241\243/\345\212\237\350\203\275.md" @@ -37,7 +37,7 @@ 使用 VS Code 默认补全配置。测试文件[在此](../供测试/js/index.js) -### 英文标识符 +### 英文标识符、关键词 下面的用例,按照建议弹窗第一项的种类分成几部分。 @@ -103,6 +103,14 @@ lib_esm.中文变量 ## 安装本插件后效果 -### 英文标识符 +### 英文标识符、关键词 + +应与无插件时效果相同。 ### 中文标识符 + +中文输入状态下,应与无插件时效果相同。 + +英文输入状态下,仅在提示方式为全拼下测试。 + +【待补完】 \ No newline at end of file -- Gitee From 23a610554500fcd97b5638a60a02329840fe954f Mon Sep 17 00:00:00 2001 From: fromwheretowhere Date: Wed, 5 Aug 2020 13:54:35 -0700 Subject: [PATCH 08/31] =?UTF-8?q?=E5=8A=9F=E8=83=BD:=20=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E9=A1=B9=E6=97=A0=E8=A7=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../js/index.js" | 2 ++ .../\345\212\237\350\203\275.md" | 18 ++++++++++-------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git "a/\344\276\233\346\265\213\350\257\225/js/index.js" "b/\344\276\233\346\265\213\350\257\225/js/index.js" index 497f148..cf91c89 100644 --- "a/\344\276\233\346\265\213\350\257\225/js/index.js" +++ "b/\344\276\233\346\265\213\350\257\225/js/index.js" @@ -9,6 +9,8 @@ function add() { zero = 0 +class aClass {} + // 输入 lib_esm.zw // 输入 lib_node.zw // 输入 zw diff --git "a/\346\226\207\346\241\243/\345\212\237\350\203\275.md" "b/\346\226\207\346\241\243/\345\212\237\350\203\275.md" index 7d45ec6..5e53741 100644 --- "a/\346\226\207\346\241\243/\345\212\237\350\203\275.md" +++ "b/\346\226\207\346\241\243/\345\212\237\350\203\275.md" @@ -31,19 +31,21 @@ # 功能 -此部分 JS 相关,今后逐步补充其他语言。建议弹窗内容中,补全项的顺序、种类与实际效果一致,如无特殊情况,列出前五项。 +此部分 JS 相关,今后逐步补充其他语言。***由于各测试平台的库有所不同,补全项中的自动导入(auto import)相关部分不在测试范围内。*** ## 无本插件时效果 -使用 VS Code 默认补全配置。测试文件[在此](../供测试/js/index.js) +使用 VS Code 默认补全配置。在新工作区中拷贝[测试目录](../供测试/js/)进行测试。 ### 英文标识符、关键词 -下面的用例,按照建议弹窗第一项的种类分成几部分。 +下面的用例,按照建议弹窗第一项的种类分成几部分。如有更加接近实用的用例,欢迎改进。 #### 方法 -语言内置方法:输入“hasIn”。***可能不需输入所有字符,就会出现在建议弹窗内容第一项,并且之后还有其他项(种类可能各异)。以下无特殊说明也是如此。*** +语言内置方法:输入“isFinite”。 + +***可能不需输入所有字符,就会出现在建议弹窗内容第一项,并且之后还有其他项(种类可能各异)。以下无特殊说明也是如此。*** 自定义方法:输入“add” @@ -55,19 +57,19 @@ #### 域 -输入“activate” +输入“add.arguments” #### 类 -输入“CodeAction” +输入“aClass” #### 模块 -输入“Intl” +【待添加】 #### 枚举 -输入“IndentAction” +【待添加】 #### 关键词 -- Gitee From 015bd5fae6e57b20704d159f5aee305f1d109e26 Mon Sep 17 00:00:00 2001 From: fromwheretowhere Date: Wed, 5 Aug 2020 14:26:13 -0700 Subject: [PATCH 09/31] =?UTF-8?q?=E5=8A=9F=E8=83=BD:=20=E6=8B=BC=E9=9F=B3?= =?UTF-8?q?=E8=BE=93=E5=85=A5=E9=83=A8=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../js/index.js" | 7 ++-- .../\345\212\237\350\203\275.md" | 36 ++++++++++++++++++- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git "a/\344\276\233\346\265\213\350\257\225/js/index.js" "b/\344\276\233\346\265\213\350\257\225/js/index.js" index cf91c89..5cb17f5 100644 --- "a/\344\276\233\346\265\213\350\257\225/js/index.js" +++ "b/\344\276\233\346\265\213\350\257\225/js/index.js" @@ -3,13 +3,14 @@ import lib_esm from './lib_esm' var lib_node = require('./lib_node') var 中文变量 = 1 -function add() { - -} +function add() {} +function 加法() {} zero = 0 +零蛋 = 0 class aClass {} +class 小类 {} // 输入 lib_esm.zw // 输入 lib_node.zw diff --git "a/\346\226\207\346\241\243/\345\212\237\350\203\275.md" "b/\346\226\207\346\241\243/\345\212\237\350\203\275.md" index 5e53741..a20231a 100644 --- "a/\346\226\207\346\241\243/\345\212\237\350\203\275.md" +++ "b/\346\226\207\346\241\243/\345\212\237\350\203\275.md" @@ -115,4 +115,38 @@ lib_esm.中文变量 英文输入状态下,仅在提示方式为全拼下测试。 -【待补完】 \ No newline at end of file +#### 方法 + +输入“jf”,出现“加法” + +#### 变量 + +输入“zwbl”,出现“中文变量” + +#### 域 + +【待添加】 + +#### 类 + +输入“xiaol”,出现“小类” + +#### 模块 + +【待添加】 + +#### 枚举 + +【待添加】 + +#### 关键词 + +【无中文关键词】 + +#### 代码片段 + +输入“chux”,出现“ChuXianCiShu” + +#### 词语 + +输入“lingd”,出现“零蛋” -- Gitee From ea5629ae6164e64da496cd2e99425e8a847f6d8a Mon Sep 17 00:00:00 2001 From: fromwheretowhere Date: Wed, 5 Aug 2020 14:29:14 -0700 Subject: [PATCH 10/31] =?UTF-8?q?=E5=8A=9F=E8=83=BD:=20=E8=A1=A5=E5=85=85?= =?UTF-8?q?=E5=9F=9F=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\346\226\207\346\241\243/\345\212\237\350\203\275.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/\346\226\207\346\241\243/\345\212\237\350\203\275.md" "b/\346\226\207\346\241\243/\345\212\237\350\203\275.md" index a20231a..bf8818f 100644 --- "a/\346\226\207\346\241\243/\345\212\237\350\203\275.md" +++ "b/\346\226\207\346\241\243/\345\212\237\350\203\275.md" @@ -125,7 +125,7 @@ lib_esm.中文变量 #### 域 -【待添加】 +输入“lib_esm.zw”,出现“中文” #### 类 -- Gitee From f0d567f5a4fc59d12e3eaa3ea1a78946aa5ccc42 Mon Sep 17 00:00:00 2001 From: hbybyyang <2451759073@hotmail.com> Date: Thu, 6 Aug 2020 05:47:17 +0800 Subject: [PATCH 11/31] =?UTF-8?q?=E4=B8=8D=E5=BA=94=E8=AF=A5=E6=8A=8A?= =?UTF-8?q?=E5=BD=93=E5=89=8D=E8=BE=93=E5=85=A5=E7=9A=84=E8=AF=8D=E4=B9=9F?= =?UTF-8?q?=E4=BD=9C=E4=B8=BA=E8=A1=A5=E5=85=A8=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\350\241\245\345\205\250\345\256\236\347\216\260.js" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" index 3119904..57fb3c6 100755 --- "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" +++ "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" @@ -66,7 +66,7 @@ async function provideCompletionItems(document, position, token, context) { // log('文档符号', 文档符号.map(a => a.label)) 返回对象 = 数组去重((a, b) => a.label == b.label, 返回对象) - 返回对象 = 返回对象.filter(a => 包含中文(a.label)) + 返回对象 = 返回对象.filter(a => 包含中文(a.label)).filter(a => a.label != 输入词) 返回对象 = 返回对象.map(a => R.set(R.lensProp('insertText'), a.label, a)) 返回对象 = 返回对象.map(a => R.set(R.lensProp('label'), `${a.label}\t${获得中文字符表示({ 表示方法: 用户配置.提示方式, -- Gitee From cd52454d090ce7e556e494182ff1f33e75f24690 Mon Sep 17 00:00:00 2001 From: fromwheretowhere Date: Wed, 5 Aug 2020 20:00:25 -0700 Subject: [PATCH 12/31] =?UTF-8?q?=E5=8A=9F=E8=83=BD:=20=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E5=8C=96;=20=E4=BA=94=E7=AC=94=E5=88=9D=E6=B5=8B;=20cpp=20?= =?UTF-8?q?=E4=B8=80=E9=83=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../js/index.js" | 8 +- .../\345\212\237\350\203\275.md" | 147 +++++++----------- ...62\347\237\245\351\227\256\351\242\230.md" | 25 +++ 3 files changed, 89 insertions(+), 91 deletions(-) create mode 100644 "\346\226\207\346\241\243/\345\267\262\347\237\245\351\227\256\351\242\230.md" diff --git "a/\344\276\233\346\265\213\350\257\225/js/index.js" "b/\344\276\233\346\265\213\350\257\225/js/index.js" index 5cb17f5..c09b30f 100644 --- "a/\344\276\233\346\265\213\350\257\225/js/index.js" +++ "b/\344\276\233\346\265\213\350\257\225/js/index.js" @@ -3,14 +3,16 @@ import lib_esm from './lib_esm' var lib_node = require('./lib_node') var 中文变量 = 1 -function add() {} function 加法() {} +function add() {} -zero = 0 零蛋 = 0 +zero = 0 + +战国时代 = 1 -class aClass {} class 小类 {} +class aClass {} // 输入 lib_esm.zw // 输入 lib_node.zw diff --git "a/\346\226\207\346\241\243/\345\212\237\350\203\275.md" "b/\346\226\207\346\241\243/\345\212\237\350\203\275.md" index bf8818f..358631a 100644 --- "a/\346\226\207\346\241\243/\345\212\237\350\203\275.md" +++ "b/\346\226\207\346\241\243/\345\212\237\350\203\275.md" @@ -31,122 +31,93 @@ # 功能 +## JavaScript + 此部分 JS 相关,今后逐步补充其他语言。***由于各测试平台的库有所不同,补全项中的自动导入(auto import)相关部分不在测试范围内。*** -## 无本插件时效果 +### 无本插件时效果 使用 VS Code 默认补全配置。在新工作区中拷贝[测试目录](../供测试/js/)进行测试。 -### 英文标识符、关键词 +#### 英文标识符、关键词 下面的用例,按照建议弹窗第一项的种类分成几部分。如有更加接近实用的用例,欢迎改进。 -#### 方法 - -语言内置方法:输入“isFinite”。 - ***可能不需输入所有字符,就会出现在建议弹窗内容第一项,并且之后还有其他项(种类可能各异)。以下无特殊说明也是如此。*** -自定义方法:输入“add” - -#### 变量 - -语言内置变量:输入“console” - -自定义变量:输入"lib_esm" - -#### 域 - -输入“add.arguments” - -#### 类 - -输入“aClass” - -#### 模块 - -【待添加】 - -#### 枚举 - -【待添加】 - -#### 关键词 - -输入“new” - -#### 代码片段 - -输入“log” - -#### 词语 - -输入“zero” - -#### 接口【暂未重现】 -#### 属性【暂未重现】 -#### 引用【暂未重现】 - -### 中文标识符 - -#### 域 - -输入“lib_esm.中文” - -#### 变量 - -输入“中文变量” - -#### 词语 - -lib_esm.中文变量 +| 种类 | 输入 | +| ------------- | ------------- | +方法(语言内置) | isFinite +方法(自定义)| add +变量(语言内置) | console +变量(自定义) | lib_esm +域 | add.arguments +类 | aClass +关键词 | new +代码片段 | log +词语 | zero +模块 |【待添加】 +枚举 |【待添加】 +接口 |【暂未重现】 +属性 |【暂未重现】 +引用 |【暂未重现】 + +#### 中文标识符 + +| 种类 | 输入 | +| ------------- | ------------- | +域 | lib_esm.中文 +变量 | 中文变量 +词语 | lib_esm.中文变量 【待补完】 -## 安装本插件后效果 +### 安装本插件后效果 -### 英文标识符、关键词 +#### 英文标识符、关键词 应与无插件时效果相同。 -### 中文标识符 +#### 中文标识符 中文输入状态下,应与无插件时效果相同。 -英文输入状态下,仅在提示方式为全拼下测试。 - -#### 方法 +下面为英文输入状态下,不同中文匹配方式。 -输入“jf”,出现“加法” +- 全拼 -#### 变量 - -输入“zwbl”,出现“中文变量” - -#### 域 - -输入“lib_esm.zw”,出现“中文” - -#### 类 - -输入“xiaol”,出现“小类” - -#### 模块 +| 种类 | 输入 | 补全项文本 | +| ------------- | ------------- | ------------- | +方法 | jf | 加法 +变量 | zwbl | 中文变量 +域 | lib_esm.zw | 中文 +类 | xiaol | 小类 +代码片段 | chux | ChuXianCiShu +词语 | lingd | 零蛋 +关键词 |【无中文关键词】 +模块 |【待添加】 +枚举 |【待添加】 -【待添加】 +- 五笔 -#### 枚举 +98全码下,输入“hljw”,出现“战国时代” -【待添加】 +## C++ -#### 关键词 +测试源码[在此](../供测试/cpp/main.cpp) -【无中文关键词】 +### 无本插件时效果 -#### 代码片段 +| 种类 | 输入 | 补全项文本 | +| ------------- | ------------- | ------------- | +变量 | oval | oval +变量 | 椭 | 椭圆 -输入“chux”,出现“ChuXianCiShu” +### 安装本插件后效果 -#### 词语 +注意:种类本来是“变量”,现在是“词语” -输入“lingd”,出现“零蛋” +| 种类 | 输入 | 补全项文本 | +| ------------- | ------------- | ------------- | +变量 | oval | oval +***词语*** | tuo | 椭圆 diff --git "a/\346\226\207\346\241\243/\345\267\262\347\237\245\351\227\256\351\242\230.md" "b/\346\226\207\346\241\243/\345\267\262\347\237\245\351\227\256\351\242\230.md" new file mode 100644 index 0000000..35d84cb --- /dev/null +++ "b/\346\226\207\346\241\243/\345\267\262\347\237\245\351\227\256\351\242\230.md" @@ -0,0 +1,25 @@ + +当中文输入状态时,补全项中有时会同时存在带拼音项与不带拼音项,尤其是输入比较慢时更明显。比如输入“中”的过程中,vsc 会在每个字符输入时返回建议(如下)。也许由于每次返回的延时,最后的补全项会有不同。 +``` +"输入词" "z" +日志.js:3 +"返回对象" ["中文变量\tZhongWenBianLiang","加法\tJiaFa","小类\tXiaoLei","零蛋\tLingDan","使用\tShiYong","语法需要\tYuFaXuYao","或者\tHuoZhe","输入\tShuRu"] +日志.js:3 +"================" +日志.js:3 +"输入词" "zhon" +日志.js:3 +"返回对象" ["中文变量\tZhongWenBianLiang","加法\tJiaFa","小类\tXiaoLei","零蛋\tLingDan","使用\tShiYong","语法需要\tYuFaXuYao","或者\tHuoZhe","输入\tShuRu"] +日志.js:3 +"================" +日志.js:3 +"输入词" "zhong" +日志.js:3 +"返回对象" ["中文变量\tZhongWenBianLiang","加法\tJiaFa","小类\tXiaoLei","零蛋\tLingDan","使用\tShiYong","语法需要\tYuFaXuYao","或者\tHuoZhe","输入\tShuRu"] +日志.js:3 +"================" +日志.js:3 +"输入词" "中" +日志.js:3 +"返回对象" ["中文变量\tZhongWenBianLiang","加法\tJiaFa","小类\tXiaoLei","零蛋\tLingDan","中文\tZhongWen","另一个中文\tLingYiGeZhongWen","使用\tShiYong","语法需要\tYuFaXuYao","或者\tHuoZhe","输入\tShuRu"] +``` \ No newline at end of file -- Gitee From 00657b58074bf28670597cdd338b42cb4d47d0d4 Mon Sep 17 00:00:00 2001 From: hbybyyang <2451759073@hotmail.com> Date: Thu, 6 Aug 2020 11:09:32 +0800 Subject: [PATCH 13/31] =?UTF-8?q?=E5=85=88=E6=8A=8A=E8=BE=93=E5=85=A5?= =?UTF-8?q?=E6=B3=95=E6=94=BE=E4=B8=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\234\347\264\242\350\201\224\346\203\263.js" | 2 +- ...214\350\276\223\345\205\245\346\263\225API.js" | 2 +- ...41\245\345\205\250\345\256\236\347\216\260.js" | 15 ++++++++++++++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git "a/lib/\347\231\276\345\272\246\346\220\234\347\264\242\350\201\224\346\203\263.js" "b/lib/\347\231\276\345\272\246\346\220\234\347\264\242\350\201\224\346\203\263.js" index f2e770b..b30f124 100644 --- "a/lib/\347\231\276\345\272\246\346\220\234\347\264\242\350\201\224\346\203\263.js" +++ "b/lib/\347\231\276\345\272\246\346\220\234\347\264\242\350\201\224\346\203\263.js" @@ -1,6 +1,6 @@ const http = require('./http') -module.exports = 字符串 => async 数量 => { +module.exports = async (字符串, 数量 = 5) => { if (字符串.indexOf('\r') != -1 || 字符串.indexOf('\n') != -1) return [] // console.log(字符串) var url = `https://www.baidu.com/sugrec?prod=pc&from=pc_web&wd=${字符串}` diff --git "a/lib/\350\260\267\346\255\214\350\276\223\345\205\245\346\263\225API.js" "b/lib/\350\260\267\346\255\214\350\276\223\345\205\245\346\263\225API.js" index 220b0b1..2f4fde9 100644 --- "a/lib/\350\260\267\346\255\214\350\276\223\345\205\245\346\263\225API.js" +++ "b/lib/\350\260\267\346\255\214\350\276\223\345\205\245\346\263\225API.js" @@ -1,7 +1,7 @@ const http = require('./http') // api使用来自 https://github.com/zyctree/vscode-google-pinyin -module.exports = 字符串 => async 数量 => { +module.exports = async (字符串, 数量 = 5) => { if (字符串.indexOf('\r') != -1 || 字符串.indexOf('\n') != -1) return [] // console.log(字符串) var url = `http://inputtools.google.com/request?text=${字符串}&itc=zh-t-i0-pinyin&num=${数量}&cp=0&cs=1&ie=utf-8&oe=utf-8&app=demopage` diff --git "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" index 57fb3c6..f3944d0 100755 --- "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" +++ "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" @@ -4,6 +4,8 @@ var { log } = require('./lib/日志') var { 包含中文, 查找词组 } = require('./lib/字符串扩展') var { 数组去重 } = require('./lib/数组扩展') var 获得中文字符表示 = require('./lib/获得中文字符表示') +var 谷歌输入法API = require('./lib/谷歌输入法API') +var 百度搜索联想 = require('./lib/百度搜索联想') function 获得当前输入词() { // 我们需要的是文本被编辑后的情况 而不是编辑前的情况 @@ -31,10 +33,11 @@ function 获得当前输入词() { // 因为 js 是单线程模型 所以做了一个简单的锁 应该不会有问题 var 防递归锁 = false async function provideCompletionItems(document, position, token, context) { + var 输入词 = await 获得当前输入词() || '' + if (防递归锁) return [] 防递归锁 = true - var 输入词 = await 获得当前输入词() log('================') log('输入词', 输入词) @@ -65,6 +68,16 @@ async function provideCompletionItems(document, position, token, context) { 返回对象 = 返回对象.concat(文档符号) // log('文档符号', 文档符号.map(a => a.label)) + if (用户配置.使用输入法 != 'no') { + var 输入法提供的字符 = [] + if (用户配置.使用输入法 == 'Google Pinyin') + 输入法提供的字符 = await 谷歌输入法API(输入词) + else if (用户配置.使用输入法 == 'Baidu Sugrec') + 输入法提供的字符 = await 百度搜索联想(输入词) + 输入法提供的字符 = 输入法提供的字符.map(a => new vscode.CompletionItem(a, vscode.CompletionItemKind.Text)) + 返回对象 = 返回对象.concat(输入法提供的字符) + } + 返回对象 = 数组去重((a, b) => a.label == b.label, 返回对象) 返回对象 = 返回对象.filter(a => 包含中文(a.label)).filter(a => a.label != 输入词) 返回对象 = 返回对象.map(a => R.set(R.lensProp('insertText'), a.label, a)) -- Gitee From ec43e5fe9d71a81efbf84b9c4bf06f1f46a1eed5 Mon Sep 17 00:00:00 2001 From: hbybyyang <2451759073@hotmail.com> Date: Thu, 6 Aug 2020 12:32:01 +0800 Subject: [PATCH 14/31] =?UTF-8?q?=E8=BE=93=E5=85=A5=E6=B3=95=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\344\276\233\346\265\213\350\257\225/js/index.js" | 8 ++++---- ...0\241\245\345\205\250\345\256\236\347\216\260.js" | 12 +++++++----- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git "a/\344\276\233\346\265\213\350\257\225/js/index.js" "b/\344\276\233\346\265\213\350\257\225/js/index.js" index c09b30f..919586a 100644 --- "a/\344\276\233\346\265\213\350\257\225/js/index.js" +++ "b/\344\276\233\346\265\213\350\257\225/js/index.js" @@ -3,16 +3,16 @@ import lib_esm from './lib_esm' var lib_node = require('./lib_node') var 中文变量 = 1 -function 加法() {} -function add() {} +function 加法() { } +function add() { } 零蛋 = 0 zero = 0 战国时代 = 1 -class 小类 {} -class aClass {} +class 小类 { } +class aClass { } // 输入 lib_esm.zw // 输入 lib_node.zw diff --git "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" index f3944d0..0f21fad 100755 --- "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" +++ "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" @@ -57,6 +57,8 @@ async function provideCompletionItems(document, position, token, context) { 返回对象 = 返回对象.concat(完成项提供程序) // log('完成项提供程序', 完成项提供程序.map(a => a.label)) + 防递归锁 = false + // 这个好像很卡 // var 文档符号提供程序 = await vscode.commands.executeCommand('vscode.executeDocumentSymbolProvider', document.uri) // 文档符号提供程序 = 文档符号提供程序.map(a => new vscode.CompletionItem(a.name, a.kind)) @@ -69,12 +71,14 @@ async function provideCompletionItems(document, position, token, context) { // log('文档符号', 文档符号.map(a => a.label)) if (用户配置.使用输入法 != 'no') { + var 中文的输入词 = 输入词.split('').filter(a => 包含中文(a)).join('') + var 去除中文的输入词 = 输入词.split('').filter(a => !包含中文(a)).join('') var 输入法提供的字符 = [] if (用户配置.使用输入法 == 'Google Pinyin') - 输入法提供的字符 = await 谷歌输入法API(输入词) + 输入法提供的字符 = await 谷歌输入法API(去除中文的输入词) else if (用户配置.使用输入法 == 'Baidu Sugrec') - 输入法提供的字符 = await 百度搜索联想(输入词) - 输入法提供的字符 = 输入法提供的字符.map(a => new vscode.CompletionItem(a, vscode.CompletionItemKind.Text)) + 输入法提供的字符 = await 百度搜索联想(去除中文的输入词) + 输入法提供的字符 = 输入法提供的字符.map(a => 中文的输入词 + a).map(a => new vscode.CompletionItem(a, vscode.CompletionItemKind.Text)) 返回对象 = 返回对象.concat(输入法提供的字符) } @@ -87,8 +91,6 @@ async function provideCompletionItems(document, position, token, context) { 选项: { 使用多音字: 用户配置.使用多音字 } })}`, a)) - 防递归锁 = false - log('返回对象', 返回对象.map(a => a.label)) return new vscode.CompletionList(返回对象, true) } -- Gitee From 22e5f03b256856643460f042d3ebdc3e0645840e Mon Sep 17 00:00:00 2001 From: hbybyyang <2451759073@hotmail.com> Date: Thu, 6 Aug 2020 12:41:52 +0800 Subject: [PATCH 15/31] =?UTF-8?q?=E8=BE=93=E5=85=A5=E6=B3=95=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E7=9A=84=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\350\241\245\345\205\250\345\256\236\347\216\260.js" | 7 +++++++ 1 file changed, 7 insertions(+) diff --git "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" index 0f21fad..edf8895 100755 --- "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" +++ "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" @@ -71,6 +71,13 @@ async function provideCompletionItems(document, position, token, context) { // log('文档符号', 文档符号.map(a => a.label)) if (用户配置.使用输入法 != 'no') { + // 如果我想分别输入一个词组 例如 "多重笛卡尔积" + // 我的输入顺序是 先输入 "多重" 再输入 "笛卡尔积" 这是一个组词 而不是一次性打出来 + // 当我输入到 "多重d"的时候 `输入词`这个变量是"多重d" 如果直接拿这个词去调用输入法 很难得到正确的结果 + // 我们期待的应该是 此时 使用"d"去调用输入法 + // 但这样也是不可行的 如果我拿"d"去调用输入法 确实可以得到正确的结果 但此时 得到的结果 并不是以"多"开头的 便不会弹出提示框 + // 因此 这里的方案是 同时获得带中文的和不带中文的 用不带中文的调用输入法 再在结果前面补上中文 + // 注意 这个策略在一些情况下会失效 例如 在汉字中间输入时 var 中文的输入词 = 输入词.split('').filter(a => 包含中文(a)).join('') var 去除中文的输入词 = 输入词.split('').filter(a => !包含中文(a)).join('') var 输入法提供的字符 = [] -- Gitee From e15d3139347d5e4ae5991ed4e17672c95acffd7e Mon Sep 17 00:00:00 2001 From: hbybyyang <2451759073@hotmail.com> Date: Thu, 6 Aug 2020 13:12:23 +0800 Subject: [PATCH 16/31] =?UTF-8?q?=E7=BC=93=E5=AD=98=E4=B8=8A=E6=AC=A1?= =?UTF-8?q?=E7=9A=84=E7=BB=93=E6=9E=9C=E4=BD=9C=E4=B8=BA=E4=B8=8B=E6=AC=A1?= =?UTF-8?q?=E7=9A=84=E8=BE=93=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...45\345\205\250\345\256\236\347\216\260.js" | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" index edf8895..aad5676 100755 --- "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" +++ "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" @@ -32,6 +32,7 @@ function 获得当前输入词() { // vscode.executeCompletionItemProvider 会调用 provideCompletionItems 导致无限递归 // 因为 js 是单线程模型 所以做了一个简单的锁 应该不会有问题 var 防递归锁 = false +var 上次的结果 = [] async function provideCompletionItems(document, position, token, context) { var 输入词 = await 获得当前输入词() || '' @@ -75,23 +76,34 @@ async function provideCompletionItems(document, position, token, context) { // 我的输入顺序是 先输入 "多重" 再输入 "笛卡尔积" 这是一个组词 而不是一次性打出来 // 当我输入到 "多重d"的时候 `输入词`这个变量是"多重d" 如果直接拿这个词去调用输入法 很难得到正确的结果 // 我们期待的应该是 此时 使用"d"去调用输入法 - // 但这样也是不可行的 如果我拿"d"去调用输入法 确实可以得到正确的结果 但此时 得到的结果 并不是以"多"开头的 便不会弹出提示框 + // 但这样也是不可行的 如果我拿"d"去调用输入法 确实可以得到正确的结果 但此时 得到的结果 并不是以"多重"开头的 便不会弹出提示框 // 因此 这里的方案是 同时获得带中文的和不带中文的 用不带中文的调用输入法 再在结果前面补上中文 // 注意 这个策略在一些情况下会失效 例如 在汉字中间输入时 var 中文的输入词 = 输入词.split('').filter(a => 包含中文(a)).join('') var 去除中文的输入词 = 输入词.split('').filter(a => !包含中文(a)).join('') - var 输入法提供的字符 = [] - if (用户配置.使用输入法 == 'Google Pinyin') - 输入法提供的字符 = await 谷歌输入法API(去除中文的输入词) - else if (用户配置.使用输入法 == 'Baidu Sugrec') - 输入法提供的字符 = await 百度搜索联想(去除中文的输入词) - 输入法提供的字符 = 输入法提供的字符.map(a => 中文的输入词 + a).map(a => new vscode.CompletionItem(a, vscode.CompletionItemKind.Text)) - 返回对象 = 返回对象.concat(输入法提供的字符) + var 输入法提供的词 = [] + if (用户配置.使用输入法 == 'Google Pinyin' && 去除中文的输入词 != '' && 去除中文的输入词 != null) + 输入法提供的词 = await 谷歌输入法API(去除中文的输入词) + else if (用户配置.使用输入法 == 'Baidu Sugrec' && 去除中文的输入词 != '' && 去除中文的输入词 != null) + 输入法提供的词 = await 百度搜索联想(去除中文的输入词) + 输入法提供的词 = 输入法提供的词.map(a => 中文的输入词 + a).map(a => new vscode.CompletionItem(a, vscode.CompletionItemKind.Text)) + 返回对象 = 返回对象.concat(输入法提供的词) } + // 有些插件不会保留点操作的结果 + // 例如 输入 `lib.` 我们通过 vscode.executeCompletionItemProvider 确实获得了lib内部的属性 这个行为是语言对应的自动完成插件提供的 + // 此时 例如获得了"中文变量"这样一个成员变量 + // 但继续输入时 例如输入为`lib.z`时 某些插件就不会返回"中文变量"这个成员变量了 + // 而我们预期的行为是 只要在点操作符后 都应当返回这个对象的全部成员变量 无论输入什么 + // 因此我们缓存上次的结果 作为下次的输入 + 返回对象 = 返回对象.concat(上次的结果) + 返回对象 = 数组去重((a, b) => a.label == b.label, 返回对象) 返回对象 = 返回对象.filter(a => 包含中文(a.label)).filter(a => a.label != 输入词) 返回对象 = 返回对象.map(a => R.set(R.lensProp('insertText'), a.label, a)) + + 上次的结果 = 返回对象 + 返回对象 = 返回对象.map(a => R.set(R.lensProp('label'), `${a.label}\t${获得中文字符表示({ 表示方法: 用户配置.提示方式, 文本: a.label, -- Gitee From 4708f5c862e451f095ee48833116b7a0ce0d340b Mon Sep 17 00:00:00 2001 From: hbybyyang <2451759073@hotmail.com> Date: Thu, 6 Aug 2020 13:39:59 +0800 Subject: [PATCH 17/31] =?UTF-8?q?=E4=B8=8A=E6=AC=A1=E7=9A=84=E7=BB=93?= =?UTF-8?q?=E6=9E=9C=E6=97=A0=E9=99=90=E5=8F=A0=E5=8A=A0=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\350\241\245\345\205\250\345\256\236\347\216\260.js" | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" index aad5676..7715932 100755 --- "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" +++ "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" @@ -33,6 +33,7 @@ function 获得当前输入词() { // 因为 js 是单线程模型 所以做了一个简单的锁 应该不会有问题 var 防递归锁 = false var 上次的结果 = [] +var 上次的结果池容量 = 20 async function provideCompletionItems(document, position, token, context) { var 输入词 = await 获得当前输入词() || '' @@ -96,13 +97,15 @@ async function provideCompletionItems(document, position, token, context) { // 但继续输入时 例如输入为`lib.z`时 某些插件就不会返回"中文变量"这个成员变量了 // 而我们预期的行为是 只要在点操作符后 都应当返回这个对象的全部成员变量 无论输入什么 // 因此我们缓存上次的结果 作为下次的输入 + // 但这样 `上次的结果`会不断叠加 因此我们设定了它的上限 返回对象 = 返回对象.concat(上次的结果) 返回对象 = 数组去重((a, b) => a.label == b.label, 返回对象) 返回对象 = 返回对象.filter(a => 包含中文(a.label)).filter(a => a.label != 输入词) 返回对象 = 返回对象.map(a => R.set(R.lensProp('insertText'), a.label, a)) - 上次的结果 = 返回对象 + 上次的结果 = 上次的结果.concat(返回对象) + if (上次的结果.length >= 上次的结果池容量) 上次的结果.slice(上次的结果.length - 上次的结果池容量, 上次的结果.length) 返回对象 = 返回对象.map(a => R.set(R.lensProp('label'), `${a.label}\t${获得中文字符表示({ 表示方法: 用户配置.提示方式, -- Gitee From 83aba830478b73a8816d91287d204842e92d3b1f Mon Sep 17 00:00:00 2001 From: hbybyyang <2451759073@hotmail.com> Date: Thu, 6 Aug 2020 13:40:48 +0800 Subject: [PATCH 18/31] =?UTF-8?q?=E8=AF=B7=E6=B1=82=E8=BE=93=E5=85=A5?= =?UTF-8?q?=E6=B3=95api=E5=A4=B1=E8=B4=A5=E6=97=B6=E4=B8=8D=E4=BC=9A?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E6=95=B4=E4=B8=AA=E8=BF=87=E7=A8=8B=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\350\241\245\345\205\250\345\256\236\347\216\260.js" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" index 7715932..73c51a6 100755 --- "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" +++ "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" @@ -84,9 +84,9 @@ async function provideCompletionItems(document, position, token, context) { var 去除中文的输入词 = 输入词.split('').filter(a => !包含中文(a)).join('') var 输入法提供的词 = [] if (用户配置.使用输入法 == 'Google Pinyin' && 去除中文的输入词 != '' && 去除中文的输入词 != null) - 输入法提供的词 = await 谷歌输入法API(去除中文的输入词) + 输入法提供的词 = await 谷歌输入法API(去除中文的输入词).catch(e => console.error(e)) else if (用户配置.使用输入法 == 'Baidu Sugrec' && 去除中文的输入词 != '' && 去除中文的输入词 != null) - 输入法提供的词 = await 百度搜索联想(去除中文的输入词) + 输入法提供的词 = await 百度搜索联想(去除中文的输入词).catch(e => console.error(e)) 输入法提供的词 = 输入法提供的词.map(a => 中文的输入词 + a).map(a => new vscode.CompletionItem(a, vscode.CompletionItemKind.Text)) 返回对象 = 返回对象.concat(输入法提供的词) } -- Gitee From 0dc48bb447ca6594e44517479adffe816c840f63 Mon Sep 17 00:00:00 2001 From: hbybyyang <2451759073@hotmail.com> Date: Thu, 6 Aug 2020 13:42:47 +0800 Subject: [PATCH 19/31] =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=90=8E=E7=BC=80?= =?UTF-8?q?=E5=90=8D=E5=B9=B6=E6=B2=A1=E6=9C=89=E7=94=A8=E5=88=B0=E5=98=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\350\241\245\345\205\250\345\256\236\347\216\260.js" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" index 73c51a6..7c29dee 100755 --- "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" +++ "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" @@ -43,7 +43,7 @@ async function provideCompletionItems(document, position, token, context) { log('================') log('输入词', 输入词) - var 文件后缀名 = R.last(document.fileName.split('.')) + // var 文件后缀名 = R.last(document.fileName.split('.')) // log('当前文件后缀名', 文件后缀名) var 用户配置 = {} -- Gitee From 7875c8ce91f14a9ea949054e94a2e9e6b2291299 Mon Sep 17 00:00:00 2001 From: hbybyyang <2451759073@hotmail.com> Date: Thu, 6 Aug 2020 13:44:06 +0800 Subject: [PATCH 20/31] =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\350\241\245\345\205\250\345\256\236\347\216\260.js" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" index 7c29dee..f634be4 100755 --- "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" +++ "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" @@ -92,9 +92,9 @@ async function provideCompletionItems(document, position, token, context) { } // 有些插件不会保留点操作的结果 - // 例如 输入 `lib.` 我们通过 vscode.executeCompletionItemProvider 确实获得了lib内部的属性 这个行为是语言对应的自动完成插件提供的 + // 例如 输入 `obj.` 我们通过 vscode.executeCompletionItemProvider 确实获得了obj内部的属性 这个行为是语言对应的自动完成插件提供的 // 此时 例如获得了"中文变量"这样一个成员变量 - // 但继续输入时 例如输入为`lib.z`时 某些插件就不会返回"中文变量"这个成员变量了 + // 但继续输入时 例如输入为`obj.z`时 某些插件就不会返回"中文变量"这个成员变量了 // 而我们预期的行为是 只要在点操作符后 都应当返回这个对象的全部成员变量 无论输入什么 // 因此我们缓存上次的结果 作为下次的输入 // 但这样 `上次的结果`会不断叠加 因此我们设定了它的上限 -- Gitee From d23c38116ac20ca1787cc6daa50e54482464aa06 Mon Sep 17 00:00:00 2001 From: hbybyyang <2451759073@hotmail.com> Date: Thu, 6 Aug 2020 13:50:50 +0800 Subject: [PATCH 21/31] =?UTF-8?q?=E4=B8=8A=E6=AC=A1=E7=9A=84=E7=BB=93?= =?UTF-8?q?=E6=9E=9C=20=E5=85=A5=E9=98=9F=E7=9A=84=E9=A1=BA=E5=BA=8F?= =?UTF-8?q?=E5=8F=8D=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\350\241\245\345\205\250\345\256\236\347\216\260.js" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" index f634be4..7f2efe1 100755 --- "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" +++ "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" @@ -98,14 +98,14 @@ async function provideCompletionItems(document, position, token, context) { // 而我们预期的行为是 只要在点操作符后 都应当返回这个对象的全部成员变量 无论输入什么 // 因此我们缓存上次的结果 作为下次的输入 // 但这样 `上次的结果`会不断叠加 因此我们设定了它的上限 - 返回对象 = 返回对象.concat(上次的结果) + 返回对象 = 上次的结果.concat(返回对象) 返回对象 = 数组去重((a, b) => a.label == b.label, 返回对象) 返回对象 = 返回对象.filter(a => 包含中文(a.label)).filter(a => a.label != 输入词) 返回对象 = 返回对象.map(a => R.set(R.lensProp('insertText'), a.label, a)) 上次的结果 = 上次的结果.concat(返回对象) - if (上次的结果.length >= 上次的结果池容量) 上次的结果.slice(上次的结果.length - 上次的结果池容量, 上次的结果.length) + if (上次的结果.length >= 上次的结果池容量) 上次的结果 = 上次的结果.slice(上次的结果.length - 上次的结果池容量, 上次的结果.length) 返回对象 = 返回对象.map(a => R.set(R.lensProp('label'), `${a.label}\t${获得中文字符表示({ 表示方法: 用户配置.提示方式, -- Gitee From 7b6c4d9d12161ee8b2da86948deb3b78c337f8ed Mon Sep 17 00:00:00 2001 From: hbybyyang <2451759073@hotmail.com> Date: Thu, 6 Aug 2020 13:53:40 +0800 Subject: [PATCH 22/31] =?UTF-8?q?=E5=AE=8C=E5=96=84=E9=80=89=E9=A1=B9?= =?UTF-8?q?=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- "\350\241\245\345\205\250\345\256\236\347\216\260.js" | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 4857fc4..40987a0 100755 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ ], "enumDescriptions": [ "不使用输入法", - "谷歌拼音输入法", + "谷歌拼音输入法(需能访问谷歌api)", "百度搜索联想" ] }, diff --git "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" index 7f2efe1..5350fdc 100755 --- "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" +++ "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" @@ -105,7 +105,8 @@ async function provideCompletionItems(document, position, token, context) { 返回对象 = 返回对象.map(a => R.set(R.lensProp('insertText'), a.label, a)) 上次的结果 = 上次的结果.concat(返回对象) - if (上次的结果.length >= 上次的结果池容量) 上次的结果 = 上次的结果.slice(上次的结果.length - 上次的结果池容量, 上次的结果.length) + if (上次的结果.length >= 上次的结果池容量) + 上次的结果 = 上次的结果.slice(上次的结果.length - 上次的结果池容量, 上次的结果.length) 返回对象 = 返回对象.map(a => R.set(R.lensProp('label'), `${a.label}\t${获得中文字符表示({ 表示方法: 用户配置.提示方式, -- Gitee From 608b6058d889a7910e64e2aeb8464d89f54aca4f Mon Sep 17 00:00:00 2001 From: fromwheretowhere Date: Wed, 5 Aug 2020 23:20:54 -0700 Subject: [PATCH 23/31] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20cpp=20=E6=B5=8B?= =?UTF-8?q?=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\344\276\233\346\265\213\350\257\225/cpp/main.cpp" | 2 ++ "\346\226\207\346\241\243/\345\212\237\350\203\275.md" | 9 ++++++++- .../\345\267\262\347\237\245\351\227\256\351\242\230.md" | 2 ++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git "a/\344\276\233\346\265\213\350\257\225/cpp/main.cpp" "b/\344\276\233\346\265\213\350\257\225/cpp/main.cpp" index 64d0c7a..9423431 100644 --- "a/\344\276\233\346\265\213\350\257\225/cpp/main.cpp" +++ "b/\344\276\233\346\265\213\350\257\225/cpp/main.cpp" @@ -5,6 +5,8 @@ using namespace std; int main() { Circle 椭圆(3); + Circle oval(3); + // 输入 tuo 补全为 椭圆 再输入 点 return 1; diff --git "a/\346\226\207\346\241\243/\345\212\237\350\203\275.md" "b/\346\226\207\346\241\243/\345\212\237\350\203\275.md" index 358631a..6cbef29 100644 --- "a/\346\226\207\346\241\243/\345\212\237\350\203\275.md" +++ "b/\346\226\207\346\241\243/\345\212\237\350\203\275.md" @@ -1,3 +1,6 @@ +## 功能简述 + +在不影响 VS Code 的现有代码补全功能的前提下,不用切换到第三方中文输入法,就可以通过拼音等方式获得对应的中文代码补全。 ## 术语表 @@ -29,7 +32,7 @@ | ![](https://code.visualstudio.com/assets/docs/editor/intellisense/Snippet_16x.svg) | 代码片段 | (code) snippet | | ![](https://code.visualstudio.com/assets/docs/editor/intellisense/String_16x.svg) | 词语 | Words | 不归属于上述种类的内容 -# 功能 +# 详细功能 ## JavaScript @@ -110,6 +113,7 @@ | 种类 | 输入 | 补全项文本 | | ------------- | ------------- | ------------- | +方法 | oval.求 | 求面积 变量 | oval | oval 变量 | 椭 | 椭圆 @@ -119,5 +123,8 @@ | 种类 | 输入 | 补全项文本 | | ------------- | ------------- | ------------- | +方法 | oval.求 | 求面积 +方法 | oval.qiu | 求面积 +方法 | 椭圆.qiu | 求面积 变量 | oval | oval ***词语*** | tuo | 椭圆 diff --git "a/\346\226\207\346\241\243/\345\267\262\347\237\245\351\227\256\351\242\230.md" "b/\346\226\207\346\241\243/\345\267\262\347\237\245\351\227\256\351\242\230.md" index 35d84cb..bda32df 100644 --- "a/\346\226\207\346\241\243/\345\267\262\347\237\245\351\227\256\351\242\230.md" +++ "b/\346\226\207\346\241\243/\345\267\262\347\237\245\351\227\256\351\242\230.md" @@ -1,4 +1,6 @@ +## JavaScript + 当中文输入状态时,补全项中有时会同时存在带拼音项与不带拼音项,尤其是输入比较慢时更明显。比如输入“中”的过程中,vsc 会在每个字符输入时返回建议(如下)。也许由于每次返回的延时,最后的补全项会有不同。 ``` "输入词" "z" -- Gitee From 52ac47fe2da1043ee5f7d6d6d0b720d67454426a Mon Sep 17 00:00:00 2001 From: fromwheretowhere Date: Wed, 5 Aug 2020 23:54:12 -0700 Subject: [PATCH 24/31] =?UTF-8?q?=E5=8A=9F=E8=83=BD:=20=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E8=BE=93=E5=85=A5=E6=B5=8B=E8=AF=95;=20cpp=20=E5=B7=B2?= =?UTF-8?q?=E7=9F=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cpp/hello.cpp" | 19 +++++++++++++++++++ .../\345\212\237\350\203\275.md" | 8 ++++++++ ...62\347\237\245\351\227\256\351\242\230.md" | 7 ++++++- 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 "\344\276\233\346\265\213\350\257\225/cpp/hello.cpp" diff --git "a/\344\276\233\346\265\213\350\257\225/cpp/hello.cpp" "b/\344\276\233\346\265\213\350\257\225/cpp/hello.cpp" new file mode 100644 index 0000000..fc088cc --- /dev/null +++ "b/\344\276\233\346\265\213\350\257\225/cpp/hello.cpp" @@ -0,0 +1,19 @@ +#include +#include +#include + +/* +源自: https://code.visualstudio.com/docs/cpp/config-clang-mac#_add-hello-world-source-code-file +*/ +using namespace std; + +int main() +{ + vector msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"}; + + for (const string& word : msg) + { + cout << word << " "; + } + cout << endl; +} \ No newline at end of file diff --git "a/\346\226\207\346\241\243/\345\212\237\350\203\275.md" "b/\346\226\207\346\241\243/\345\212\237\350\203\275.md" index 6cbef29..2b63152 100644 --- "a/\346\226\207\346\241\243/\345\212\237\350\203\275.md" +++ "b/\346\226\207\346\241\243/\345\212\237\350\203\275.md" @@ -128,3 +128,11 @@ 方法 | 椭圆.qiu | 求面积 变量 | oval | oval ***词语*** | tuo | 椭圆 + +## 编程语言无关 + +集成了百度搜索、谷歌拼音等 API。在输入英文字符时,建议弹窗中会出现对应中文补全项。 + +下面选择百度搜索,以 [JavaScript例程](../供测试/js/) 为例: + +输入“jiafa”,在“加法”方法之外,还有几项拼音相关中文,种类为“词语”,如“假发”。 diff --git "a/\346\226\207\346\241\243/\345\267\262\347\237\245\351\227\256\351\242\230.md" "b/\346\226\207\346\241\243/\345\267\262\347\237\245\351\227\256\351\242\230.md" index bda32df..7cf80ef 100644 --- "a/\346\226\207\346\241\243/\345\267\262\347\237\245\351\227\256\351\242\230.md" +++ "b/\346\226\207\346\241\243/\345\267\262\347\237\245\351\227\256\351\242\230.md" @@ -24,4 +24,9 @@ "输入词" "中" 日志.js:3 "返回对象" ["中文变量\tZhongWenBianLiang","加法\tJiaFa","小类\tXiaoLei","零蛋\tLingDan","中文\tZhongWen","另一个中文\tLingYiGeZhongWen","使用\tShiYong","语法需要\tYuFaXuYao","或者\tHuoZhe","输入\tShuRu"] -``` \ No newline at end of file +``` + +## C++ + +由于每次建议项都被缓存,在建议弹窗在其他位置被同一字符触发时,会出现之前的建议项。 +比如,main.cpp 中输入“椭圆.q”,建议中有“补全为”。紧接着,在 hello.cpp 中输入“msg.q”,建议中也会出现“补全为” -- Gitee From 8957869f45370a223c98c093ee67316abfee296b Mon Sep 17 00:00:00 2001 From: hbybyyang <2451759073@hotmail.com> Date: Thu, 6 Aug 2020 23:38:11 +0800 Subject: [PATCH 25/31] =?UTF-8?q?=E7=BC=93=E5=AD=98=E7=BB=93=E6=9E=9C?= =?UTF-8?q?=E5=B9=B6=E4=B8=8D=E6=98=AF=E4=B8=80=E4=B8=AA=E5=A5=BD=E4=B8=BB?= =?UTF-8?q?=E6=84=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...41\245\345\205\250\345\256\236\347\216\260.js" | 15 --------------- 1 file changed, 15 deletions(-) diff --git "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" index 5350fdc..91cbe95 100755 --- "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" +++ "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" @@ -32,8 +32,6 @@ function 获得当前输入词() { // vscode.executeCompletionItemProvider 会调用 provideCompletionItems 导致无限递归 // 因为 js 是单线程模型 所以做了一个简单的锁 应该不会有问题 var 防递归锁 = false -var 上次的结果 = [] -var 上次的结果池容量 = 20 async function provideCompletionItems(document, position, token, context) { var 输入词 = await 获得当前输入词() || '' @@ -91,23 +89,10 @@ async function provideCompletionItems(document, position, token, context) { 返回对象 = 返回对象.concat(输入法提供的词) } - // 有些插件不会保留点操作的结果 - // 例如 输入 `obj.` 我们通过 vscode.executeCompletionItemProvider 确实获得了obj内部的属性 这个行为是语言对应的自动完成插件提供的 - // 此时 例如获得了"中文变量"这样一个成员变量 - // 但继续输入时 例如输入为`obj.z`时 某些插件就不会返回"中文变量"这个成员变量了 - // 而我们预期的行为是 只要在点操作符后 都应当返回这个对象的全部成员变量 无论输入什么 - // 因此我们缓存上次的结果 作为下次的输入 - // 但这样 `上次的结果`会不断叠加 因此我们设定了它的上限 - 返回对象 = 上次的结果.concat(返回对象) - 返回对象 = 数组去重((a, b) => a.label == b.label, 返回对象) 返回对象 = 返回对象.filter(a => 包含中文(a.label)).filter(a => a.label != 输入词) 返回对象 = 返回对象.map(a => R.set(R.lensProp('insertText'), a.label, a)) - 上次的结果 = 上次的结果.concat(返回对象) - if (上次的结果.length >= 上次的结果池容量) - 上次的结果 = 上次的结果.slice(上次的结果.length - 上次的结果池容量, 上次的结果.length) - 返回对象 = 返回对象.map(a => R.set(R.lensProp('label'), `${a.label}\t${获得中文字符表示({ 表示方法: 用户配置.提示方式, 文本: a.label, -- Gitee From 29bdfe99de2f9ac1968f65438d47c579fd882b7f Mon Sep 17 00:00:00 2001 From: hbybyyang <2451759073@hotmail.com> Date: Fri, 7 Aug 2020 00:09:40 +0800 Subject: [PATCH 26/31] =?UTF-8?q?=E8=BE=93=E5=85=A5=E7=BE=8E=E5=85=83?= =?UTF-8?q?=E7=AC=A6=E5=8F=B7=E4=B9=9F=E4=BC=9A=E8=A7=A6=E5=8F=91=E8=A1=A5?= =?UTF-8?q?=E5=85=A8+=E8=BE=93=E5=85=A5=E6=B3=95=E5=89=8D=E7=BC=80?= =?UTF-8?q?=E7=AD=9B=E9=80=89=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...246\344\270\262\346\211\251\345\261\225.js" | 3 +++ ...245\345\205\250\345\256\236\347\216\260.js" | 18 +++++++++--------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git "a/lib/\345\255\227\347\254\246\344\270\262\346\211\251\345\261\225.js" "b/lib/\345\255\227\347\254\246\344\270\262\346\211\251\345\261\225.js" index a7b5a7e..7a7539d 100644 --- "a/lib/\345\255\227\347\254\246\344\270\262\346\211\251\345\261\225.js" +++ "b/lib/\345\255\227\347\254\246\344\270\262\346\211\251\345\261\225.js" @@ -2,6 +2,9 @@ exports.转换为大写 = 字符串 => 字符串.toLocaleUpperCase() exports.包含中文 = function 包含中文(str) { return /.*[\u4e00-\u9fa5]+.*$/.test(str) } +exports.是纯字母 = function 是纯字母(str) { + return /[A-Za-z]/.test(str) +} exports.查找词组 = function 查找词组(s) { var wordPattern = /(-?\d*\.\d\w*)|([^\`\~\!\@\^\&\*\(\)\-\#\?\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s?。,、;:?…—·ˉˇ¨“”~〃|《》〔〕(),]+)/g; return Array.from(new Set(s.match(wordPattern))) diff --git "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" index 91cbe95..494274d 100755 --- "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" +++ "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" @@ -1,7 +1,7 @@ var vscode = require('vscode') var R = require('ramda') var { log } = require('./lib/日志') -var { 包含中文, 查找词组 } = require('./lib/字符串扩展') +var { 包含中文, 查找词组, 是纯字母 } = require('./lib/字符串扩展') var { 数组去重 } = require('./lib/数组扩展') var 获得中文字符表示 = require('./lib/获得中文字符表示') var 谷歌输入法API = require('./lib/谷歌输入法API') @@ -78,14 +78,14 @@ async function provideCompletionItems(document, position, token, context) { // 但这样也是不可行的 如果我拿"d"去调用输入法 确实可以得到正确的结果 但此时 得到的结果 并不是以"多重"开头的 便不会弹出提示框 // 因此 这里的方案是 同时获得带中文的和不带中文的 用不带中文的调用输入法 再在结果前面补上中文 // 注意 这个策略在一些情况下会失效 例如 在汉字中间输入时 - var 中文的输入词 = 输入词.split('').filter(a => 包含中文(a)).join('') - var 去除中文的输入词 = 输入词.split('').filter(a => !包含中文(a)).join('') + var 前缀 = 输入词.split('').filter(a => !是纯字母(a)).join('') + var 纯字母输入词 = 输入词.split('').filter(a => 是纯字母(a)).join('') var 输入法提供的词 = [] - if (用户配置.使用输入法 == 'Google Pinyin' && 去除中文的输入词 != '' && 去除中文的输入词 != null) - 输入法提供的词 = await 谷歌输入法API(去除中文的输入词).catch(e => console.error(e)) - else if (用户配置.使用输入法 == 'Baidu Sugrec' && 去除中文的输入词 != '' && 去除中文的输入词 != null) - 输入法提供的词 = await 百度搜索联想(去除中文的输入词).catch(e => console.error(e)) - 输入法提供的词 = 输入法提供的词.map(a => 中文的输入词 + a).map(a => new vscode.CompletionItem(a, vscode.CompletionItemKind.Text)) + if (用户配置.使用输入法 == 'Google Pinyin' && 纯字母输入词 != '' && 纯字母输入词 != null) + 输入法提供的词 = await 谷歌输入法API(纯字母输入词).catch(e => console.error(e)) + else if (用户配置.使用输入法 == 'Baidu Sugrec' && 纯字母输入词 != '' && 纯字母输入词 != null) + 输入法提供的词 = await 百度搜索联想(纯字母输入词).catch(e => console.error(e)) + 输入法提供的词 = 输入法提供的词.map(a => 前缀 + a).map(a => new vscode.CompletionItem(a, vscode.CompletionItemKind.Text)) 返回对象 = 返回对象.concat(输入法提供的词) } @@ -114,5 +114,5 @@ module.exports = function (context) { }, { provideCompletionItems, resolveCompletionItem - }, '.')) + }, '.', '$')) } -- Gitee From 7dab8dba4c30c16bc097e6031f032bc001918a59 Mon Sep 17 00:00:00 2001 From: hbybyyang <2451759073@hotmail.com> Date: Fri, 7 Aug 2020 00:11:57 +0800 Subject: [PATCH 27/31] =?UTF-8?q?=E6=9B=B4=E6=AD=A3=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\350\241\245\345\205\250\345\256\236\347\216\260.js" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" index 494274d..e23c003 100755 --- "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" +++ "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" @@ -76,7 +76,7 @@ async function provideCompletionItems(document, position, token, context) { // 当我输入到 "多重d"的时候 `输入词`这个变量是"多重d" 如果直接拿这个词去调用输入法 很难得到正确的结果 // 我们期待的应该是 此时 使用"d"去调用输入法 // 但这样也是不可行的 如果我拿"d"去调用输入法 确实可以得到正确的结果 但此时 得到的结果 并不是以"多重"开头的 便不会弹出提示框 - // 因此 这里的方案是 同时获得带中文的和不带中文的 用不带中文的调用输入法 再在结果前面补上中文 + // 因此 这里的方案是 同时获得前缀(不带字母的)的和纯字母输入词 用纯字母输入词调用输入法 再在结果前面补上前缀 // 注意 这个策略在一些情况下会失效 例如 在汉字中间输入时 var 前缀 = 输入词.split('').filter(a => !是纯字母(a)).join('') var 纯字母输入词 = 输入词.split('').filter(a => 是纯字母(a)).join('') -- Gitee From 26eca99c65528f504b64b025332eea123f0253a3 Mon Sep 17 00:00:00 2001 From: hbybyyang <2451759073@hotmail.com> Date: Fri, 7 Aug 2020 02:10:56 +0800 Subject: [PATCH 28/31] =?UTF-8?q?=E8=BE=93=E5=85=A5=E6=B3=95=E8=B0=83?= =?UTF-8?q?=E7=94=A8=E5=A4=B1=E8=B4=A5=E6=97=B6=E5=BC=B9=E5=87=BA=E6=8F=90?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...45\345\205\250\345\256\236\347\216\260.js" | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" index e23c003..2deb6b4 100755 --- "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" +++ "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" @@ -81,12 +81,20 @@ async function provideCompletionItems(document, position, token, context) { var 前缀 = 输入词.split('').filter(a => !是纯字母(a)).join('') var 纯字母输入词 = 输入词.split('').filter(a => 是纯字母(a)).join('') var 输入法提供的词 = [] - if (用户配置.使用输入法 == 'Google Pinyin' && 纯字母输入词 != '' && 纯字母输入词 != null) - 输入法提供的词 = await 谷歌输入法API(纯字母输入词).catch(e => console.error(e)) - else if (用户配置.使用输入法 == 'Baidu Sugrec' && 纯字母输入词 != '' && 纯字母输入词 != null) - 输入法提供的词 = await 百度搜索联想(纯字母输入词).catch(e => console.error(e)) - 输入法提供的词 = 输入法提供的词.map(a => 前缀 + a).map(a => new vscode.CompletionItem(a, vscode.CompletionItemKind.Text)) - 返回对象 = 返回对象.concat(输入法提供的词) + var 输入法 = null + if (用户配置.使用输入法 == 'Google Pinyin' && 纯字母输入词 != '' && 纯字母输入词 != null) { + 输入法 = 谷歌输入法API + } else if (用户配置.使用输入法 == 'Baidu Sugrec' && 纯字母输入词 != '' && 纯字母输入词 != null) { + 输入法 = 百度搜索联想 + } + if (输入法 != null) { + 输入法提供的词 = await 输入法(纯字母输入词).catch(e => { + console.error(e) + vscode.window.showInformationMessage(`ChineseInputAssistant:调用输入法api出错:` + e) + }) + 输入法提供的词 = 输入法提供的词.map(a => 前缀 + a).map(a => new vscode.CompletionItem(a, vscode.CompletionItemKind.Text)) + 返回对象 = 返回对象.concat(输入法提供的词) + } } 返回对象 = 数组去重((a, b) => a.label == b.label, 返回对象) -- Gitee From 6190d8bc4a824552a7fb98639c98ccf0747e7d11 Mon Sep 17 00:00:00 2001 From: hbybyyang <2451759073@hotmail.com> Date: Fri, 7 Aug 2020 02:59:56 +0800 Subject: [PATCH 29/31] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=BE=93=E5=85=A5?= =?UTF-8?q?=E6=B3=95=E6=8A=A5=E9=94=99=E6=8F=90=E7=A4=BA=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\350\241\245\345\205\250\345\256\236\347\216\260.js" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" index 2deb6b4..32f18d7 100755 --- "a/\350\241\245\345\205\250\345\256\236\347\216\260.js" +++ "b/\350\241\245\345\205\250\345\256\236\347\216\260.js" @@ -90,7 +90,7 @@ async function provideCompletionItems(document, position, token, context) { if (输入法 != null) { 输入法提供的词 = await 输入法(纯字母输入词).catch(e => { console.error(e) - vscode.window.showInformationMessage(`ChineseInputAssistant:调用输入法api出错:` + e) + vscode.window.showInformationMessage(`调用输入法接口出错:` + e) }) 输入法提供的词 = 输入法提供的词.map(a => 前缀 + a).map(a => new vscode.CompletionItem(a, vscode.CompletionItemKind.Text)) 返回对象 = 返回对象.concat(输入法提供的词) -- Gitee From c3a8b588d701f171fe6e8a6163a0d0a5c2a3df57 Mon Sep 17 00:00:00 2001 From: fromwheretowhere Date: Fri, 7 Aug 2020 01:01:12 -0700 Subject: [PATCH 30/31] =?UTF-8?q?=E5=8A=9F=E8=83=BD:=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=20php,=20python,=20ts;=20=E4=BF=AE=E6=AD=A3=20c++?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\345\212\237\350\203\275.md" | 85 ++++++++++++++++--- ...62\347\237\245\351\227\256\351\242\230.md" | 5 -- 2 files changed, 74 insertions(+), 16 deletions(-) diff --git "a/\346\226\207\346\241\243/\345\212\237\350\203\275.md" "b/\346\226\207\346\241\243/\345\212\237\350\203\275.md" index 2b63152..15152a6 100644 --- "a/\346\226\207\346\241\243/\345\212\237\350\203\275.md" +++ "b/\346\226\207\346\241\243/\345\212\237\350\203\275.md" @@ -13,6 +13,7 @@ | 建议弹窗 | suggestions widget | 光标下方的包含建议补全项的窗口 | | 关键词 | keyword | 编程语言语法中的保留关键词,如 [JS](https://www.w3schools.com/js/js_reserved.asp)中的 const,continue 等 | | 标识符 | identifier | 关键词之外的代码内容,包括变量、方法、类名等等 | +| 字段 | | 包括标识符、注释中的中文字段 关键词、标识符分类: | 图标 | 中文 | 英文 | 简述 | @@ -34,11 +35,13 @@ # 详细功能 +编程语言按字母顺序排列。 + ## JavaScript 此部分 JS 相关,今后逐步补充其他语言。***由于各测试平台的库有所不同,补全项中的自动导入(auto import)相关部分不在测试范围内。*** -### 无本插件时效果 +### 无本插件时 使用 VS Code 默认补全配置。在新工作区中拷贝[测试目录](../供测试/js/)进行测试。 @@ -75,7 +78,7 @@ 【待补完】 -### 安装本插件后效果 +### 安装本插件后 #### 英文标识符、关键词 @@ -107,9 +110,9 @@ ## C++ -测试源码[在此](../供测试/cpp/main.cpp) +测试时使用[此语言插件](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools)。测试源码[在此](../供测试/cpp/main.cpp)。 -### 无本插件时效果 +### 无本插件时 | 种类 | 输入 | 补全项文本 | | ------------- | ------------- | ------------- | @@ -117,17 +120,75 @@ 变量 | oval | oval 变量 | 椭 | 椭圆 -### 安装本插件后效果 +### 安装本插件后 + +无本插件的用例仍可用之外: -注意:种类本来是“变量”,现在是“词语” +注意:“椭圆”的种类本来是“变量”,现在是“词语” | 种类 | 输入 | 补全项文本 | | ------------- | ------------- | ------------- | -方法 | oval.求 | 求面积 -方法 | oval.qiu | 求面积 -方法 | 椭圆.qiu | 求面积 -变量 | oval | oval -***词语*** | tuo | 椭圆 +方法 | oval.qiu 或 椭圆.qiu | 补全为(仅支持当前文件中的字段) +***词语*** | tuoyuan | 椭圆 + +## PHP + +测试时使用[此语言插件](https://marketplace.visualstudio.com/items?itemName=ms-python.python)。测试源码[在此](../供测试/斐波那契.py)。 + +### 无本插件时 + +| 种类 | 输入 | 补全项文本 | +| ------------- | ------------- | ------------- | +方法 | join | join +关键词 | echo | echo +变量 | $数列 | $数列 + +### 安装本插件后 + +无本插件的用例仍可用之外: + +| 种类 | 输入 | 补全项文本 | +| ------------- | ------------- | ------------- | +词语 | shulie | $数列 + +## Python + +测试时使用[此语言插件](https://marketplace.visualstudio.com/items?itemName=ms-python.python)。测试源码[在此](../供测试/斐波那契.py)。 + +### 无本插件时 + +| 种类 | 输入 | 补全项文本 | +| ------------- | ------------- | ------------- | +方法 | print | print +关键词 | for | for +变量 | 数 | 数 + +### 安装本插件后 +无本插件的用例仍可用之外: + +| 种类 | 输入 | 补全项文本 | +| ------------- | ------------- | ------------- | +变量 | feibonaqi | 斐波那契 + +## TypeScript + +测试源码[在此](../供测试/加载词典.ts)。 + +### 无本插件时 + +| 种类 | 输入 | 补全项文本 | +| ------------- | ------------- | ------------- | +方法 | print | print +关键词 | function | function +变量 | 词典数据 | 词典数据 + +### 安装本插件后 + +无本插件的用例仍可用之外: + +| 种类 | 输入 | 补全项文本 | +| ------------- | ------------- | ------------- | +变量 | cidianshuju | 词典数据 ## 编程语言无关 @@ -136,3 +197,5 @@ 下面选择百度搜索,以 [JavaScript例程](../供测试/js/) 为例: 输入“jiafa”,在“加法”方法之外,还有几项拼音相关中文,种类为“词语”,如“假发”。 + +如果访问 API 受阻,会提示用户。 diff --git "a/\346\226\207\346\241\243/\345\267\262\347\237\245\351\227\256\351\242\230.md" "b/\346\226\207\346\241\243/\345\267\262\347\237\245\351\227\256\351\242\230.md" index 7cf80ef..4f74892 100644 --- "a/\346\226\207\346\241\243/\345\267\262\347\237\245\351\227\256\351\242\230.md" +++ "b/\346\226\207\346\241\243/\345\267\262\347\237\245\351\227\256\351\242\230.md" @@ -25,8 +25,3 @@ 日志.js:3 "返回对象" ["中文变量\tZhongWenBianLiang","加法\tJiaFa","小类\tXiaoLei","零蛋\tLingDan","中文\tZhongWen","另一个中文\tLingYiGeZhongWen","使用\tShiYong","语法需要\tYuFaXuYao","或者\tHuoZhe","输入\tShuRu"] ``` - -## C++ - -由于每次建议项都被缓存,在建议弹窗在其他位置被同一字符触发时,会出现之前的建议项。 -比如,main.cpp 中输入“椭圆.q”,建议中有“补全为”。紧接着,在 hello.cpp 中输入“msg.q”,建议中也会出现“补全为” -- Gitee From 56771a4659c440de043ef5fe11bc7095834a227d Mon Sep 17 00:00:00 2001 From: fromwheretowhere Date: Fri, 7 Aug 2020 10:58:51 -0700 Subject: [PATCH 31/31] =?UTF-8?q?1.3.0=20=E5=8A=9F=E8=83=BD=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E4=B8=8E=E9=A6=96=E9=A1=B5=E4=BB=8B=E7=BB=8D=E4=B8=80?= =?UTF-8?q?=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 5 +++ README.md | 30 ++++-------------- package-lock.json | 2 +- package.json | 2 +- .../js/index.js" | 2 ++ .../\346\274\224\347\244\272_Haskell.png" | Bin 36877 -> 0 bytes .../\346\274\224\347\244\272_Java.png" | Bin 83389 -> 0 bytes .../\346\274\224\347\244\272_Swift.png" | Bin 27873 -> 0 bytes .../\346\274\224\347\244\272_c.png" | Bin 41964 -> 0 bytes .../\345\212\237\350\203\275.md" | 20 +++++++++++- ...62\347\237\245\351\227\256\351\242\230.md" | 3 ++ 11 files changed, 37 insertions(+), 27 deletions(-) delete mode 100644 "\346\210\252\345\233\276/\346\274\224\347\244\272_Haskell.png" delete mode 100644 "\346\210\252\345\233\276/\346\274\224\347\244\272_Java.png" delete mode 100644 "\346\210\252\345\233\276/\346\274\224\347\244\272_Swift.png" delete mode 100644 "\346\210\252\345\233\276/\346\274\224\347\244\272_c.png" diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c02960..37335f1 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ ## 各版本更新说明 +### 1.3.0 + +- 修复:[JS 原补全项消失问题](https://gitee.com/Program-in-Chinese/vscode_Chinese_Input_Assistant/issues/I1Q34I) +- 修复:[C++ 语言插件不兼容问题](https://gitee.com/Program-in-Chinese/vscode_Chinese_Input_Assistant/issues/I1PWE7) + ### 1.2.1 修复问题: [补全项重复](https://gitee.com/Program-in-Chinese/vscode_Chinese_Input_Assistant/issues/I1PUZX) diff --git a/README.md b/README.md index 0226754..06ea1d4 100755 --- a/README.md +++ b/README.md @@ -44,28 +44,12 @@ ![演示](截图/输入法_五笔四码.png) -支持各种编程语言,全拼下已实测过的: - -- C# - -![演示](截图/演示_c.png) - -- Haskell - -![演示](截图/演示_Haskell.png) - -- Java - -![演示](截图/演示_Java.png) +与各种编程语言的现有支持插件兼容,全拼下已实测过的: - JavaScript ![演示](截图/演示_JS.png) -- Kotlin - -![演示](截图/演示_Kotlin.png) - - PHP 对 $ 开头的变量名,直接输入拼音即有提示: @@ -76,14 +60,14 @@ ![演示](截图/演示_Python.png) -- Swift - -![演示](截图/演示_Swift.png) - - TypeScript ![演示](截图/演示_TS.png) +当无编程语言支持插件时,也支持当前文件中的中文字段补全: + +![演示](截图/演示_Kotlin.png) + 同样支持中英混合命名: ![演示](截图/演示_中英混合.png) @@ -96,6 +80,4 @@ ## [版本更新说明](CHANGELOG.md) -## 已知问题 - -暂无 +## [已知问题](文档/已知问题.md) diff --git a/package-lock.json b/package-lock.json index 110cb8f..af6054e 100755 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "ChineseInputAssistant", - "version": "1.2.1", + "version": "1.3.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 40987a0..db15b31 100755 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "ChineseInputAssistant", "displayName": "中文代码快速补全", "description": "中文标识符(变量、方法名等)无需切换中文输入法即有补全提示", - "version": "1.2.1", + "version": "1.3.0", "publisher": "CodeInChinese", "engines": { "vscode": "^1.38.0" diff --git "a/\344\276\233\346\265\213\350\257\225/js/index.js" "b/\344\276\233\346\265\213\350\257\225/js/index.js" index 919586a..f4535ab 100644 --- "a/\344\276\233\346\265\213\350\257\225/js/index.js" +++ "b/\344\276\233\346\265\213\350\257\225/js/index.js" @@ -14,6 +14,8 @@ zero = 0 class 小类 { } class aClass { } +多重笛卡尔积 = 0 + // 输入 lib_esm.zw // 输入 lib_node.zw // 输入 zw diff --git "a/\346\210\252\345\233\276/\346\274\224\347\244\272_Haskell.png" "b/\346\210\252\345\233\276/\346\274\224\347\244\272_Haskell.png" deleted file mode 100644 index a4a44d32a05d367c5af94d38d99a4403b2de35a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36877 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�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 BbG`ro diff --git "a/\346\210\252\345\233\276/\346\274\224\347\244\272_c.png" "b/\346\210\252\345\233\276/\346\274\224\347\244\272_c.png" deleted file mode 100644 index b7f0e0026a3eff0eefcffdb4f80edda76728e664..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41964 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