flowr-analysis/vscode-flowr

GitHub: flowr-analysis/vscode-flowr

该扩展为 VS Code 和 Positron 提供了 R 脚本的静态分析能力,涵盖代码检查、程序切片、数据流可视化与依赖追踪,帮助用户理解和调试数据分析代码。

Stars: 8 | Forks: 2

[![vscode-flowR logo](https://static.pigsec.cn/wp-content/uploads/repos/cas/d1/d1f58882871ffba6fbf77863895671ec362ef2ccc6bd46176c6f94e487c7748d.png)](https://github.com/flowr-analysis/flowr)
[![Marketplace](https://badgen.net/vs-marketplace/v/code-inspect.vscode-flowr?color=green)](https://marketplace.visualstudio.com/items?itemName=code-inspect.vscode-flowr) [![Marketplace](https://badgen.net/open-vsx/version/code-inspect/vscode-flowr?label=Positron/Open%20VSX&color=18a066)](https://open-vsx.org/extension/code-inspect/vscode-flowr) [![flowR Badge](https://badgen.net/badge/icon/flowr/cyan?icon=github&label)](https://github.com/flowr-analysis/flowr) [![vscode.dev Badge](https://badgen.net/badge/icon/vscode.dev/blue?icon=visualstudio&label)](https://vscode.dev)
此扩展将 [_flowR_](https://github.com/flowr-analysis/flowr) 引入了 Visual Studio Code 和 Positron。请参阅[安装说明](#installing)开始使用! 借助此扩展,您可以访问以下功能(由于该扩展正处于积极开发中,许多更多功能已在[计划](https://github.com/flowr-analysis/vscode-flowr/issues?q=is%3Aissue%20state%3Aopen%20type%3AFeature)中): 1. 🐞 [**代码检查**](#linting):分析您的 R 脚本,查找常见问题和潜在 bug,并对可自动修复的问题应用快速修复。 2. 🍕 [**程序切片**](#slicing):将程序精简为仅与特定变量或图表相关的部分,或查看加载的数据集对程序产生的影响。 当您想在其他上下文中重用图表或统计分析的代码,或者只是想更好地理解代码时,这非常有用。
程序切片示例 ![Slicing with flowR](https://static.pigsec.cn/wp-content/uploads/repos/cas/dd/dd207b36c770f52d63edd61f49ed120d2d7ac46610a66a2a71106f8f13bb0c54.gif)
3. 📚 [**检查依赖项**](#dependency-view):查看给定脚本加载的库、读取和写入的文件以及 source 的脚本。 这有助于您了解运行脚本需要什么、从哪里读取数据以及将数据写入哪里。
依赖项视图示例 ![Dependency View with flowR](https://static.pigsec.cn/wp-content/uploads/repos/cas/3b/3b8d7f9b10d82abed7f84d2619c2a17978b0928634c5bea636766e264b57f8b4.gif)
4. 🔎 [**解析值**](#dataflow):获取有关 flowR 推断出的值的信息。
推断值示例 ![Inferring Values with flowR](https://static.pigsec.cn/wp-content/uploads/repos/cas/d9/d9fc609dcd8506ca6f6b18d9b5b5b4aaf39c3aea1c44019d2e4f6aa70ebb8def.gif)
5. 🕸️ [**数据流图**](#dataflow):可视化脚本中的数据流。 这有助于您了解数据在脚本中是如何转换以及在哪里使用的。
数据流图示例 ![Dataflow Graph with flowR](https://static.pigsec.cn/wp-content/uploads/repos/cas/98/983d07d20173cc5532f51109a96df3a951534b4a48878d24a3f56235509783ea.gif)
6. 🧑‍💻 [**flowR REPL 访问**](#repl):在 REPL 中探索 flowR 的功能(在浏览器中不可用)。 这允许您交互式地探索 flowR 的功能,并了解它如何为您提供日常工作的帮助。
flowR REPL 示例 ![The flowR REPL](https://static.pigsec.cn/wp-content/uploads/repos/cas/99/99ebfd8c1e275a13c17f46eaa6ee14bd75060c5e0fa918edcde035a3c91dad64.gif)
7. 📦 [**包信息**](#package-information):将鼠标悬停在调用上,即可查看它来自哪个包,以及从 flowR 的[签名数据库](#signature-database)中获取的版本信息,直接跳转到其真实的源码,并获得已声明库的[项目](#project-view)概览。 8. ✨ [**自动补全**](#autocompletion):获取通过 `library()` 加载的包的函数名和参数建议以及签名帮助,该功能由相同的签名数据库提供支持。 如果您发现任何可以改进的地方、有功能请求或发现 bug,请[提交 issue](#issues-and-feature-requests)!
报告问题 使用 bug 图标会在您的默认浏览器中打开 issue 表单: ![How to report an issue](https://static.pigsec.cn/wp-content/uploads/repos/cas/79/793f1c7451139b23c76994ab52a0286486f1d049d5d0f958f9f0abc1dba75158.gif)
到目前为止,该扩展已出现在以下出版物中: * [ASE '24 工具演示](https://doi.org/10.1145/3691620.3695359)
引用 @inproceedings{DBLP:conf/kbse/SihlerT24, author = {Florian Sihler and Matthias Tichy}, editor = {Vladimir Filkov and Baishakhi Ray and Minghui Zhou}, title = {flowR: {A} Static Program Slicer for {R}}, booktitle = {Proceedings of the 39th {IEEE/ACM} International Conference on Automated Software Engineering, {ASE} 2024, Sacramento, CA, USA, October 27 - November 1, 2024}, pages = {2390--2393}, publisher = {{ACM}}, year = {2024}, url = {https://doi.org/10.1145/3691620.3695359}, doi = {10.1145/3691620.3695359}, timestamp = {Mon, 03 Mar 2025 21:16:51 +0100}, biburl = {https://dblp.org/rec/conf/kbse/SihlerT24.bib}, bibsource = {dblp computer science bibliography, https://dblp.org} }
* [FSE '26 工具演示](https://doi.org/10.1145/3803437.3806402)
引用 @inproceedings{DBLP:conf/sigsoft/SihlerGPST26, author = {Florian Sihler and Oliver Gerstl and Lars Pfrenger and Julian Schubert and Matthias Tichy}, title = {Supporting the Comprehension of Data Analysis Scripts}, booktitle = {Companion Proceedings of the 34th {ACM} International Conference on the Foundations of Software Engineering, {FSE} 2026}, publisher = {{ACM}}, year = {2026}, url = {https://doi.org/10.1145/3803437.3806402}, doi = {10.1145/3803437.3806402}, eprint = {2604.15963}, eprinttype = {arXiv}, eprintclass = {cs.SE} }
有关 flowR 的一般出版物,请查看 [flowR 主仓库](https://github.com/flowr-analysis/flowr?tab=readme-ov-file#-publications-on-flowr)。 ## 使用 本部分简要概述了此扩展提供的功能及其使用方法。有关如何安装扩展的说明,请参阅[下文](#installing)。 ### 前置条件 安装此扩展即可使用所有功能! 然而,flowR 可能会受益于本地的 R 安装(必须在您的 `PATH` 中可用),以便它可以将其本地 R 设置纳入分析中。 此外,我们建议在此扩展旁边使用 Visual Studio Code 的 [R 扩展](https://marketplace.visualstudio.com/items?itemName=REditorSupport.r)或 Positron 的 [R 扩展](https://open-vsx.org/vscode/item/?itemName=REditorSupport.r)。有关 Visual Studio Code 中 R 开发的更多信息,您还可以查看[这篇有用的文章](https://code.visualstudio.com/docs/languages/r)。如果您是从 RStudio 迁移到 Positron,也可以查看[这篇文章](https://positron.posit.co/rstudio-keybindings.html)。 ### 代码检查 默认情况下,该扩展会启用 *flowR* 中除 `naming-convention` 和 `roxygen-arguments` 之外的所有可用 linting 规则;有关规则的详细信息,请访问[ wiki 页面](https://github.com/flowr-analysis/flowr/wiki/Linter)。包结构规则 `software-has-license` 和 `software-has-tests` 仅在文件是 R 包的一部分时(即在目录树中存在 `DESCRIPTION` 文件时)才会应用,因此它们不会对独立脚本产生干扰。您可以在 `vscode-flowr.linter.enabledRules` 下调整启用的规则。一些 linter 还提供了快速修复形式的代码操作,一旦调用,就会自动编辑或删除相关代码片段。 要手动调用 linter,您可以使用“Code Quality Analysis (Linter)”命令。此外,您还可以在扩展设置中修改 linter 自动刷新其结果的条件。 ![A screenshot of a deprecated function linting result](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad2df34d7456038f4ec3020b5cb32dad5dc8eafce6d2e45434f657b121a89592.png) 在代码中发现的代码检查结果将在其下方用波浪线高亮显示,并且还会出现在 VS Code 的“问题”视图中。将鼠标悬停在代码检查结果上还会提供指向相关 wiki 页面的链接,您可以在那里找到有关该规则和可能修复方法的更多信息。 ![A screenshot of a set of linting results in the Problems view](https://static.pigsec.cn/wp-content/uploads/repos/cas/68/68dfcbc737ed40bbc71d2f6984c92fca9b503690e8ee36ab11742740f9e270fd.png) 对于有快速修复可用的问题,您可以使用代码窗口中的灯泡图标,将鼠标悬停在 VS Code 的“问题”视图中的 ⚠️ 图标上,或者使用内置的“快速修复”命令。 ![A screenshot of a quick fix suggestion for a naming convention mismatch](https://static.pigsec.cn/wp-content/uploads/repos/cas/3e/3ee6edc59499e1fc173086cbe441d0e72d1002a8eecaee2e6213c564c72630b3.png) ### 程序切片 程序切片描述了将程序精简为仅与特定变量或图表相关的部分的过程。后向切片包含变量或图表所依赖的程序的所有部分(即*相关代码*),而前向切片包含变量对其有*影响*的程序的所有部分。 加载扩展后,选择一个您感兴趣的变量,然后按 Alt+S 为其高亮显示一次后向切片,或者按 Alt+P 标记该位置并在您编辑文件时持续更新后向切片。使用命令面板(Ctrl+Shift+P),您还可以高亮显示前向切片。 编辑器将把所有不属于生成切片的代码置灰。 默认情况下,编辑器还会在单独的视图中向您展示任何后向切片的重构(这可以在设置中更改)。 如果您想清除切片高亮,请按 Alt+C 或使用编辑器右上角的图标: ![Clear Slice](https://static.pigsec.cn/wp-content/uploads/repos/cas/82/8234c669a1faad9eb6f0db1984e66575c832a833f001dd8031b8fb0b5c02b0cf.png) 请注意,还有其他切片方法,例如使用[依赖项视图](#dependency-view)。 #### 详细说明 您可以通过使用“Show Relevant Code for Cursor Position Once (Backward Slice)”命令,在任何 R 代码中生成当前高亮变量的[后向切片](https://github.com/flowr-analysis/flowr/wiki/Terminology#program-slice)。然后,所有不属于生成切片的代码都将被置灰。要生成前向切片,请使用“Show Influence for Cursor Position Once (Forward Slice)”命令。 (可选)您也可以使用两个“Toggle Slice”选项之一,这将使得切片在发生代码更改或移动光标时自动更新。 您还可以查看基于当前后向切片对一段代码的重构。“Show Current Backward Slice in Editor (Reconstruct)”命令会在当前编辑器旁边打开一个视图,该视图将在您进行切片时自动更新重构。默认情况下,每当您创建后向切片时,这都会自动向您显示(但这可以在设置中更改)。 要清除切片高亮,请使用“Clear Current Slice Presentation”命令或编辑器右上角的带斜线的眼睛图标。 ![A screenshot of the extension being used to reconstruct a slice](https://static.pigsec.cn/wp-content/uploads/repos/cas/7a/7a4962ba37b85d7b5c9ec8033966bdfdd001f344b43e8dcbb3eb54b43f3a9deb.png) ### 依赖项视图 ![A screenshot of a dependency diagram for a piece of code](https://static.pigsec.cn/wp-content/uploads/repos/cas/05/05c15dd8c2b958f86c685f8a9ef8b7b88ff6ff963d803dcbc20adda1c0c2cd8b.png) 使用该扩展时,侧边栏应包含一个 flowR 图标,其**概览**视图包含有关当前文件的更多信息,列出了加载的库、读取和写入的文件以及 source 的脚本。如果您展开相应的部分,单击找到的条目应在编辑器中将其打开。上下文菜单(可通过右键单击使用)允许您对选定的条目进行[切片](#slicing)。 ### 包信息 将鼠标悬停在 R 文件中的调用上,可以告诉您它来自哪个包——例如,将鼠标悬停在 `library(purrr)` 之后的 `map` 上会显示 *`map` 是由 `purrr` 包提供的*,以及从 flowR 的[签名数据库](#signature-database)解析出的详细信息:其记录的版本、指向其真实源码和文档的链接,以及它是否已被弃用、是否可能抛出异常或是否是 S3 泛型函数。将鼠标悬停在 `library(pkg)`/`require(pkg)` 内的包名上,会显示该包的数据库版本、函数数量和 CRAN 链接。 按住 Ctrl>/Cmd + 单击(转到定义)可解析至:本地定义的函数或变量本身的定义;包函数在 GitHub 上的确切源码行(例如 `ggplot()` 会打开 `github.com/cran/ggplot2/blob//R/plot.R#L106`);或者 `library(pkg)`/`require(pkg)` 名称的 CRAN 页面。 ### 自动补全 一旦脚本 `library()` 加载了 [签名数据库](#signature-database)知道的包,该扩展就会在您键入时建议该包导出的函数,并且——一旦您位于调用的括号内——建议其文档记录的参数名(已提供的命名参数将被排除在外)。由 `(` 和 `,` 触发的签名帮助提示会在您填写调用时显示完整的参数列表。建议标有其原始包名,并在悬停时注明它们来自 flowR 的签名数据库。 如果安装并激活了 [R 扩展](https://marketplace.visualstudio.com/items?itemName=REditorSupport.r),则会自动跳过此功能,因为它已经提供了更丰富的、经过 R 求值的补全,否则此扩展会提供重复或冲突的建议。 ### 项目视图 当打开的工作区包含 R 项目清单——`renv.lock`、`DESCRIPTION` 或 `rv.lock`/`rproject.toml`——时,flowR 侧边栏中会出现一个**项目**选项卡。它列出了每个清单声明的库,并且对于每一个库,flowR 的[签名数据库](#signature-database)是否知道它:匹配(带有数据库版本)、与 R 捆绑的 base 包、不匹配或不可用。未检测到清单时,该选项卡会隐藏。[依赖项视图](#dependency-view)的**库**类别类似地会在知道解析出的数据库版本后,用它注释它找到的每个 `library()`/`require()` 调用。 ### 签名数据库 flowR 从预先计算的*签名数据库*中解析 R 包的导出、定义、版本和依赖项,因此[悬停、转到定义](#package-information)和[自动补全](#autocompletion)无需本地安装 R 即可开箱即用。它还为[项目视图](#project-view)的清单匹配和切片期间的依赖项解析提供支持。 flowR 侧边栏中的**签名数据库**选项卡显示了实际下载的内容,可浏览到单个包、版本和函数: * **Base R** —— 与 R 本身一起提供的包(`base`、`stats`、`utils` 等)。任何符号解析工作都必需它,一旦下载就无法删除(但仍然可以重新同步)。 * **Current CRAN** —— 每个当前 CRAN 包的最新版本。它的数据被拆分为您可以独立下载的分片:仅排名靠前(最常用)的包(用于快速/较小的下载),或者完整的集合。它还嵌入了它自己的 Base R 数据副本,因此它可以自行解析 base 符号。 * **Full CRAN History** —— 每个 CRAN 包的每个历史版本,适用于脚本固定使用较旧版本的情况。 使用视图标题栏上的下载图标同步所有缺失的内容,或使用单个范围行上的下载/删除图标仅获取或删除该内容——对于 **Current CRAN**,系统会询问您想要哪些分片。除非启用了 `vscode-flowr.config.solver.sigdb.autoSync`,否则不会自动下载任何内容。搜索图标(位于标题栏上,或特定范围的行上以仅在其中搜索)直接查找包或函数,并理解与 flowR 自身的 `:signature` REPL 查询相同的语法:纯包名、`pkg::fn`、`pkg@version`、`pkg@version::fn`,以及任何部分中的 `*`/`?` glob 通配符(例如 `ggplot2@3.*::ggp*`);搜索纯函数名会遍历每个已下载的包。您还可以通过 `vscode-flowr.config.solver.sigdb.customPath` 将扩展指向额外的本地数据库目录。 活动的数据库(已下载的范围)会在悬停于 flowR 状态栏项目和 REPL 横幅上时显示。 ### 值解析 您可以通过将鼠标悬停在 R 源文件中的变量上,来获取有关 flowR 推断出的值的信息。这将向您展示推断值的摘要,包括类型和可能的值。 ### 数据流 当文件在活动编辑器中打开时,您可以使用“Show Dataflow Graph”命令生成并查看任何 R 源文件的数据流图(使用 Ctrl+Shift+P 打开命令面板并搜索该命令)。然后,数据流图将显示在侧面的交互式选项卡中,您可以在其中平移和缩放以进行检查。还有一个包含较少细节的简化版本! 未来,我们计划增加在数据流图中选择节点并高亮显示相关代码部分的功能,反之亦然。 ![A screenshot of a dataflow diagram for a piece of code](https://static.pigsec.cn/wp-content/uploads/repos/cas/25/25fdde34d764df9716fb06533ec11cdfb37eea9145313d876a079e4568bbe6b5.png) ### REPL flowR 提供了一个 [REPL](https://github.com/flowr-analysis/flowr/wiki/Interface#using-the-repl),即“读取-求值-输出循环”,它允许您交互式地探索 flowR 的功能。您可以使用“Launch a new flowR REPL”命令(在可通过 Ctrl+Shift+P 打开的命令面板中)或通过单击 flowR 侧边栏上的 shell 图标来打开一个新的 REPL: ![How to open the flowR REPL](https://static.pigsec.cn/wp-content/uploads/repos/cas/2c/2ce10980a629952ead3bcc1810ab21a38e181072dc4848f16a81195798351114.png) 这将打开一个新的终端,您可以在其中与(本地)flowR 安装进行交互: ![A screenshot of the flowR REPL](https://static.pigsec.cn/wp-content/uploads/repos/cas/a5/a5fc739cdf0defc3a4fe1e5466fa8108226d4d66ee31a073a19e5a995ff53d2d.png) ## 安装 ### 从 Visual Studio Marketplace 您可以在此处获取该扩展:
安装示例 ![How to install the extension](https://static.pigsec.cn/wp-content/uploads/repos/cas/44/444c1c1c8c7b32b20806ab4ee011b3a9e795612e7821d52727b35faae261cdd2.gif)
### 从 Open VSX 您可以在此处获取该扩展:。 ### 从 GitHub Release 您可以在仓库的 [Releases](https://github.com/flowr-analysis/vscode-flowr/releases) 部分找到该扩展的官方发布版本。只需选择您想下载的版本,展开底部的资产部分,并下载其中包含的 `vscode-flowr-[version].vsix`。 在 Visual Studio Code 中,打开“扩展”选项卡,然后单击右上角的三个点以选择“从 VSIX 安装...”,或者您可以使用命令面板直接选择该选项。然后,您可以选择下载的 `vsix` 文件进行安装。 这在 Positron 中的工作方式相同。Visual Studio Code 和 Positron 的仓库是一样的,因此您可以使用相同的 `vsix` 文件。 ### 从构建产物 您可以通过前往 [Actions 选项卡](https://github.com/flowr-analysis/vscode-flowr/actions/workflows/package.yml)轻松下载该扩展的最新构建版本,您将在那里找到运行列表。选择最新运行将显示其摘要,在底部您可以找到 Artifacts 部分和 `Extension vsix` 产物。下载并解压它。 然后,您可以像安装[从 GitHub Releases 下载的](#from-github-release) `vsix` 一样安装它。 ## 问题与功能请求 如果您对该扩展有疑问,或者对新功能有好点子,您可以在扩展中创建一个新 issue,它会自动填充有关您设置的一些信息。 为此,只需按 [依赖项视图](#dependency-view) 中的 bug 形状按钮,或使用“Report Issue or Request Feature”命令。 ## 开发 ### 从源码构建并运行 克隆仓库后,可以使用 [npm](https://www.npmjs.com/) 安装必需的依赖项: ``` npm ci ``` 请注意,这不会安装 [R](https://www.r-project.org/),这对于开发来说也不是严格要求的,但(显然)非常鼓励安装。 在 Visual Studio Code 中打开克隆的仓库允许使用[现有的启动配置](https://github.com/flowr-analysis/vscode-flowr/blob/main/.vscode/launch.json),该配置可以启动启用该扩展的 Visual Studio Code。要使用它们,请打开“运行和调试”视图并按顶部的“运行”按钮,或使用 F5 快捷键开始调试。 然后,您可以打开此仓库中包含的[示例文件夹](https://github.com/flowr-analysis/vscode-flowr/tree/main/example)来亲自试用该扩展。 要将扩展构建为 `vsix` 文件,请参阅[此文档文章](https://code.visualstudio.com/api/working-with-extensions/publishing-extension)。 这也适用于 Positron,因为该扩展对于 Visual Studio Code 和 Positron 是相同的。 ### Git Hooks 该仓库包含一些 git hooks,以确保发生 linting 和其他操作。运行以下命令注册这些 hooks: ``` git config core.hooksPath .githooks ``` ### 贡献者 vscode-flowR Contributors _vscode-flowr_ 是 _flowr_ 的一部分,由 [Florian Sihler](https://eagleoutice.github.io/portfolio/) 在 [GPLv3 许可证](LICENSE)下积极开发。\ 它由德国研究基金会 (DFG) 在资助项目 [504226141](https://gepris.dfg.de/gepris/projekt/504226141) (“CodeInspector”) 下提供部分支持。
标签:R 语言, VS Code 扩展, 云安全监控, 代码切片, 代码审查, 数据科学, 自动化攻击, 资源验证, 重构工具, 静态分析