vscode插件开发记录--定义跳转
【摘要】 场景描述:点击目标文字形式为:../vendor/.../xxx.c:823:9,跳转linux机器对应文件对应位置可以通过正则/.*\.\.(\/vendor\/[^:]+):([\d]+):([\d]+).*/i匹配到文件路径,行号,行内字符位置;由于对应的文件路径位于远程目录所以需要先抓到本地临时目录后,再返回;provideDefinition函数返回结构参考如下:return ne...
场景描述:点击目标文字形式为:../vendor/.../xxx.c:823:9,跳转linux机器对应文件对应位置
可以通过正则/.*\.\.(\/vendor\/[^:]+):([\d]+):([\d]+).*/i匹配到文件路径,行号,行内字符位置;
由于对应的文件路径位于远程目录所以需要先抓到本地临时目录后,再返回;
provideDefinition函数返回结构参考如下:
return new Promise(async (resolve, reject) => { let key = document.uri.path.replace(/\//g,"\\").substring(1); let remoteConfig = ConnectionProvider.tempRemoteMap.get(key); if(remoteConfig){ const { sftp } = await ClientManager.getSSH(remoteConfig.sshConfig) const tempPath = await FileManager.record(`temp/${filename}`, null, FileModel.WRITE); sftp?.fastGet("/"+info.path, tempPath, async (err) => { if (err) { vscode.window.showErrorMessage(err.message) } else { ConnectionProvider.tempRemoteMap.set(path.resolve(tempPath), { remote: "/"+info.path, sshConfig: remoteConfig!.sshConfig }) let loc = new vscode.Location( vscode.Uri.file(tempPath), new vscode.Position(info.line-1, info.character));// resolve(loc); } }) }else{ resolve(null); } });
(ssh2的一些依赖封装参考:https://github.com/cweijan/vscode-ssh)
参考:
https://code.visualstudio.com/updates/v1_26
https://stackoverflow.com/questions/54285472/vscode-how-to-automatically-jump-to-proper-definition
相关注册过程参考:
https://github.com/Microsoft/vscode/issues/67260
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)