intellism / vscode-comment-translate

vscode 注释翻译插件, 不干扰正常代码,方便快速阅读源码。
https://marketplace.visualstudio.com/items?itemName=intellsmi.comment-translate
MIT License
484 stars 77 forks source link

讨论TextMateService.createGrammar会导致插件在remote SSH/WSL下失效 #141

Open Cherrs opened 1 year ago

Cherrs commented 1 year ago

关联的issues:

64

110

74

103

58

我在canLanguages里手动添加vscode自带的语言,翻译hover正常工作,但commentProvideHover会throw error #58 有提到 取消订阅commentProvideHover后,翻译在remote SSH/WSL下正常工作 TextMateService的代码我没看懂,推测作用应该是使用vscode-textmate生成工具栏:切换翻译源,替换翻译文本之类的功能?

我想到的两个解决方案:

  1. 将vscode自带语法规则的语言添加到canLanguages里,然后修改createGrammar返回值为可空,如果没有注册Grammar返回null不影响正常翻译 #140
  2. 将vscode自带的语法规则集成到comment-translate里,使用集成的规则生成grammarExtensions

这里我偷懒请教几个问题

  1. TextMateService的用处,为何要使用语言的grammar
  2. 用vscode-textmate生成那个小工具的功能必须要使用语言的grammar吗?是否可以用vscode.commands替代?
  3. 不同语言createGrammar出来的区别是啥?

我对typescript/javascript和vscode插件开发不熟悉,如有不对的地方请指正,抱歉

intellism commented 1 year ago
  1. TextMate是VSCode的语法高亮方案。 https://code.visualstudio.com/api/language-extensions/syntax-highlight-guide
  2. 这个插件使用了TextMate分析哪些部分是 注释、字符串,针对不同内容做不同的翻译处理。 目前VSCode API没有暴露"文档高亮语法"出来,所以这里在插件使用相同方法进行分析了。
  3. 不同语言可以通过插件贡献不同的高亮方案, createGrammar 就是对应语法的处理方法入口。 具体处理方法,可以查看下VSCode源码。

最后感谢探索出remote下的处理方法。 我这边没有使用remote环境,一直没有进行细致分析,这里看明显内置的语言高亮Gramma,不是通过插件方式注册的,之前我的处理方式是不能在这个场景生效。

Cherrs commented 1 year ago
  1. TextMate是VSCode的语法高亮方案。 https://code.visualstudio.com/api/language-extensions/syntax-highlight-guide
  2. 这个插件使用了TextMate分析哪些部分是 注释、字符串,针对不同内容做不同的翻译处理。 目前VSCode API没有暴露"文档高亮语法"出来,所以这里在插件使用相同方法进行分析了。
  3. 不同语言可以通过插件贡献不同的高亮方案, createGrammar 就是对应语法的处理方法入口。 具体处理方法,可以查看下VSCode源码。

最后感谢探索出remote下的处理方法。 我这边没有使用remote环境,一直没有进行细致分析,这里看明显内置的语言高亮Gramma,不是通过插件方式注册的,之前我的处理方式是不能在这个场景生效。

感谢解答我的疑惑!

根据你的解答来看,不使用TextMateService,commentProvideHover return null的情况下 翻译出来的文本是没有高亮 注释 字符串的? 和正常运行的插件差别在没有工具栏

目前看rust语言,TextMateService好像并不是必须的,不清楚是翻译api处理了这个还是其他什么原因 我的pull request在remote下没有使用TextMateService,翻译过后的代码正常高亮,注释和代码块也没有被翻译

可能是因为语言的问题? image

image

需要使用TextMate处理高亮的语言是什么?我可以测试一下

intellism commented 1 year ago
  1. TextMate是VSCode的语法高亮方案。 https://code.visualstudio.com/api/language-extensions/syntax-highlight-guide
  2. 这个插件使用了TextMate分析哪些部分是 注释、字符串,针对不同内容做不同的翻译处理。 目前VSCode API没有暴露"文档高亮语法"出来,所以这里在插件使用相同方法进行分析了。
  3. 不同语言可以通过插件贡献不同的高亮方案, createGrammar 就是对应语法的处理方法入口。 具体处理方法,可以查看下VSCode源码。

最后感谢探索出remote下的处理方法。 我这边没有使用remote环境,一直没有进行细致分析,这里看明显内置的语言高亮Gramma,不是通过插件方式注册的,之前我的处理方式是不能在这个场景生效。

感谢解答我的疑惑!

根据你的解答来看,不使用TextMateService,commentProvideHover return null的情况下 翻译出来的文本是没有高亮 注释 字符串的? 和正常运行的插件差别在没有工具栏

目前看rust语言,TextMateService好像并不是必须的,不清楚是翻译api处理了这个还是其他什么原因 我的pull request在remote下没有使用TextMateService,翻译过后的代码正常高亮,注释和代码块也没有被翻译

可能是因为语言的问题? image

image

需要使用TextMate处理高亮的语言是什么?我可以测试一下

看了下你提交的PR, 按道理如果没有语法文件,翻译插件是识别不了 注释区域的, 只有通过选中选区才可以翻译。 image

其次所以语言高亮都需要 textmate语法高亮文件, remote模式下,我猜测是高亮插件的位置是多个地方的,是分批进行初始化的。这个插件没有监听插件变化,按道理监听变化后再加载,应该能解决,后面我尝试下。

Cherrs commented 1 year ago

@intellism 我尝试过每次触发Hover的时候查看加载的插件,确实是在vscode_server没有加载语法高亮 remote不是基于浏览器的vscode,是server+client的方式 我之前看的文档,我的理解是一部分插件在server 一部分插件在client,通过vscode_server进程来负责通信 语法高亮文件都是本地clinet里的,远程上vscode_server的文件夹我也翻找过了,没有高亮文件

我上面的例子,commentProvideHover 已经返回null了,是不会使用TextMateService,也没有语法文件 却正确显示并翻译了注释,所以我觉得TextMateService好像并没有起到效果,或者说在支持markdown注释的语言里不需要使用TextMateService?

intellism commented 1 year ago

@intellism 我尝试过每次触发Hover的时候查看加载的插件,确实是在vscode_server没有加载语法高亮 remote不是基于浏览器的vscode,是server+client的方式 我之前看的文档,我的理解是一部分插件在server 一部分插件在client,通过vscode_server进程来负责通信 语法高亮文件都是本地clinet里的,远程上vscode_server的文件夹我也翻找过了,没有高亮文件

我上面的例子,commentProvideHover 已经返回null了,是不会使用TextMateService,也没有语法文件 却正确显示并翻译了注释,所以我觉得TextMateService好像并没有起到效果,或者说在支持markdown注释的语言里不需要使用TextMateService?

没有TextMateService是不会正确识别“注释区域”的, 你可能理解错了,如果你hover到变量上,系统会提升Hover信息,这个插件拦截了其他插件的Hover,并进行翻译输出了。你看到的翻译成功,应该是这个场景。

intellism commented 1 year ago

你可以再看看 Readme的 gif动画,看看使用方法。

Cherrs commented 1 year ago

@intellism 我尝试过每次触发Hover的时候查看加载的插件,确实是在vscode_server没有加载语法高亮 remote不是基于浏览器的vscode,是server+client的方式 我之前看的文档,我的理解是一部分插件在server 一部分插件在client,通过vscode_server进程来负责通信 语法高亮文件都是本地clinet里的,远程上vscode_server的文件夹我也翻找过了,没有高亮文件 我上面的例子,commentProvideHover 已经返回null了,是不会使用TextMateService,也没有语法文件 却正确显示并翻译了注释,所以我觉得TextMateService好像并没有起到效果,或者说在支持markdown注释的语言里不需要使用TextMateService?

没有TextMateService是不会正确识别“注释区域”的, 你可能理解错了,如果你hover到变量上,系统会提升Hover信息,这个插件拦截了其他插件的Hover,并进行翻译输出了。你看到的翻译成功,应该是这个场景。

非常非常感谢!我现在明白了! 你说的那种场景没有语法文件是没办法实现的,那解决方案应该只有内置基础语法了。 我修改下pull request,把vscode基础语法包含进来,使用内置的语法文件构造一个grammarExtensions应该就可以了

Cherrs commented 1 year ago

@intellism 我更新了pull request

140

看下这个方案是否可行? 我拆分成了两个commit

  1. 修复未注册语法会直接throw,导致整个插件无法使用
  2. 把语法文件包含在插件内部,判断环境为remote的时候将内置的语法添加到grammarExtensions

现在remote下已经可以正常工作了😄😄😄