vscode插件开发记录--定义跳转

举报
Amrf 发表于 2020/07/14 09:36:26 2020/07/14
【摘要】 场景描述:点击目标文字形式为:../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

image.png

https://stackoverflow.com/questions/50814413/how-to-implement-a-click-through-in-custom-html-mode-in-vs-code

image.png

https://stackoverflow.com/questions/54285472/vscode-how-to-automatically-jump-to-proper-definition

相关注册过程参考:

https://github.com/Microsoft/vscode/issues/67260


image.png

image.png

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。