我发现VS Code确实很好的URL识别/提取-比互联网上找到的任何方法都要好。既然VS Code是开源的,我在哪里可以找到代码?可能是正则表达式规则。
我用关键字url或extract搜索源代码,但找不到任何线索。
url
extract
yqhsw0fo1#
虽然不能100%确定这就是它,但从我对源代码的搜索来看,我认为您可能正在寻找src/vs/editor/common/languages/linkComputer.ts,它使用基于状态机的方法。在src/vs/editor/browser/services/editorWorkerService.ts中,在EditorWorkerService的构造函数中,有一个注解说“register default link-provider and default completions-provider“,以及对client.computeLinks的调用,这是在EditorSimpleWorker类的computeLinks函数中在src/vs/editor/common/services/editorSimpleWorker.ts中定义的,该函数又从linkComputer.ts调用computeLinks。该注解与DocumentLinkProvider<T>的provideDocumentLinks函数的描述很好地结合在一起,该函数声明:请注意,编辑器附带了一个默认的提供程序,可以检测http(s)和file链接。有趣的事实:你可以找到它在https://github.com/search?q=repo%3Amicrosoft%2Fvscode%20computeLinks&type=code中的使用位置,包括src/vs/workbench/contrib/output/common/outputLinkComputer.ts和src/vs/workbench/contrib/terminalContrib/links/browser/terminalUriLinkDetector.ts。请注意,VS Code中的集成终端具有各种其他链路功能。集成使用xtermjs,它支持OSC 8超链接(另请参阅How to create links in xterm.js)。VS Code还有几个内置的链接检测器模式,专门用于识别流行的命令行工具的命令输出中的文件链接。请参见src/vs/workbench/contrib/terminalContrib/links/browser/terminalLinkParsing.ts。输出面板还有一些特殊的链接检测模式,您可以在src/vs/workbench/contrib/output/common/outputLinkComputer.ts中找到。
src/vs/editor/common/languages/linkComputer.ts
src/vs/editor/browser/services/editorWorkerService.ts
EditorWorkerService
register default link-provider and default completions-provider
client.computeLinks
EditorSimpleWorker
computeLinks
src/vs/editor/common/services/editorSimpleWorker.ts
linkComputer.ts
DocumentLinkProvider<T>
provideDocumentLinks
http(s)
file
src/vs/workbench/contrib/output/common/outputLinkComputer.ts
src/vs/workbench/contrib/terminalContrib/links/browser/terminalUriLinkDetector.ts
src/vs/workbench/contrib/terminalContrib/links/browser/terminalLinkParsing.ts
如上所述,有一个DocumentLinkProvider扩展API,该扩展可以用来提供指向文档的链接。如果你想知道一个特定的扩展是如何做到这一点的,你需要发布一个专门关于该扩展的问题。
DocumentLinkProvider
rlcwz9us2#
vscode在引擎盖下使用了ripgrep。您可以在这里找到有关实现的更多信息https://github.com/BurntSushi/ripgrep
2条答案
按热度按时间yqhsw0fo1#
内置链接检测
虽然不能100%确定这就是它,但从我对源代码的搜索来看,我认为您可能正在寻找
src/vs/editor/common/languages/linkComputer.ts
,它使用基于状态机的方法。在
src/vs/editor/browser/services/editorWorkerService.ts
中,在EditorWorkerService
的构造函数中,有一个注解说“register default link-provider and default completions-provider
“,以及对client.computeLinks
的调用,这是在EditorSimpleWorker
类的computeLinks
函数中在src/vs/editor/common/services/editorSimpleWorker.ts
中定义的,该函数又从linkComputer.ts
调用computeLinks
。该注解与DocumentLinkProvider<T>
的provideDocumentLinks
函数的描述很好地结合在一起,该函数声明:请注意,编辑器附带了一个默认的提供程序,可以检测
http(s)
和file
链接。有趣的事实:你可以找到它在https://github.com/search?q=repo%3Amicrosoft%2Fvscode%20computeLinks&type=code中的使用位置,包括
src/vs/workbench/contrib/output/common/outputLinkComputer.ts
和src/vs/workbench/contrib/terminalContrib/links/browser/terminalUriLinkDetector.ts
。请注意,VS Code中的集成终端具有各种其他链路功能。集成使用xtermjs,它支持OSC 8超链接(另请参阅How to create links in xterm.js)。VS Code还有几个内置的链接检测器模式,专门用于识别流行的命令行工具的命令输出中的文件链接。请参见
src/vs/workbench/contrib/terminalContrib/links/browser/terminalLinkParsing.ts
。输出面板还有一些特殊的链接检测模式,您可以在
src/vs/workbench/contrib/output/common/outputLinkComputer.ts
中找到。扩展贡献链接“检测”
如上所述,有一个
DocumentLinkProvider
扩展API,该扩展可以用来提供指向文档的链接。如果你想知道一个特定的扩展是如何做到这一点的,你需要发布一个专门关于该扩展的问题。rlcwz9us2#
vscode在引擎盖下使用了ripgrep。您可以在这里找到有关实现的更多信息https://github.com/BurntSushi/ripgrep