问题标签 [roslyn-code-analysis]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1130 浏览

c# - 使用 Roslyn 获取方法的实现

例如,如果我声明了一个接口类,其实际类类型将仅在运行时确定,并且当我右键单击方法调用并单击“转到实现”时使用 VisualStudio,我可以从继承该接口的类中找到 3 个实现。

如何使用 Roslyn 获取方法的实现语法节点/符号?

0 投票
1 回答
4867 浏览

c# - Roslyn 向现有类添加新方法

我正在研究在 Visual Studio 扩展 (VSIX) 中使用 Roslyn 编译器,该扩展使用 VisualStudioWorkspace 来更新现有代码。在过去的几天里阅读了这个,似乎有几种方法可以实现这一点......我只是不确定哪种方法对我来说是最好的。

好的,让我们假设用户在 Visual Studio 2015 中打开了他们的解决方案。他们单击我的扩展并(通过表单)告诉我他们想要将以下方法定义添加到接口:

他们还告诉我接口的名称,它是ITheInterface

该接口中已经有一些代码:

好的,所以我可以使用以下内容加载接口文档:

那么,现在将我的新方法添加到这个现有接口的最佳方法是什么,最好也写在 XML 注释(三斜杠注释)中?请记住,请求和响应类型(GetSomeDataRequest 和 GetSomeDataResponse)实际上可能还不存在。我对此很陌生,所以如果你能提供代码示例,那就太好了。

更新

我决定(可能)最好的方法是简单地注入一些文本,而不是尝试以编程方式构建方法声明。

我尝试了以下方法,但最终出现了我不理解的异常:

检查一下,一切都很好(我的真实代码添加了格式和 XML 注释,但为了清楚起见删除了)。

因此,知道这些是不可变的,我尝试将其保存如下:

但这产生了以下异常:

在 Microsoft.VisualStudio.Editor.Implementation.VsEditorAdaptersFactoryService.GetAdapter(IVsTextBuffer bufferAdapter) 在 Microsoft.VisualStudio.Editor.Implementation.VsEditorAdaptersFactoryService.GetDocumentBuffer(IVsTextBuffer bufferAdapter) 在 Microsoft.VisualStudio.LanguageServices.Implementation.ProjectSystem.InvisibleEditor..ctor(IServiceProvider serviceProvider , String filePath, Boolean needsSave, Boolean needsUndoDisabled) 在 Microsoft.VisualStudio.LanguageServices.RoslynVisualStudioWorkspace.OpenInvisibleEditor(IVisualStudioHostDocument hostDocument) 在 Microsoft.VisualStudio.LanguageServices.Implementation.ProjectSystem.DocumentProvider.StandardTextDocument.UpdateText(SourceText newText) 在 Microsoft.VisualStudio.LanguageServices .Implementation.ProjectSystem.VisualStudioWorkspaceImpl。ApplyDocumentTextChanged(DocumentId documentId, SourceText newText) 在 Microsoft.CodeAnalysis.Workspace.ApplyProjectChanges(ProjectChanges projectChanges) 在 Microsoft.CodeAnalysis.Workspace.TryApplyChanges(Solution newSolution) 在 Microsoft.VisualStudio.LanguageServices.Implementation.ProjectSystem.VisualStudioWorkspaceImpl.TryApplyChanges(Solution newSolution)

0 投票
1 回答
1201 浏览

c# - Roslyn 加载项目文件失败

在 Visual Studio 扩展 (VSIX) 解决方案中,我使用 Roslyn 从我当前的解决方案中加载特定项目:

项目 myProject 肯定已加载,但在检查时我看到:

然而,在 Visual Studio 中,我可以看到大量文档。

如果我关闭解决方案并从另一个 TFS 分支打开相同的解决方案,则返回相同的代码:

有任何想法吗?

0 投票
2 回答
428 浏览

typescript - 如何在 VSIX 中使用工作 GetSyntaxRoot 将 Typescript 作为 FileCodeModel 或(Roslyn)文档

标题就差不多了。我需要能够解析文档的语法以找出用户右键单击的内容以执行我的操作。我不是在操作文档,所以我真的只需要一些可以让我获得语法节点或等效的东西。我已经使用 C# 和 VB 进行了这项工作,但无法弄清楚 VSSDK 或 Roslyn SDK 的任何部分可以为我提供任何类型的打字稿语法树。

我如何使用 Roslyn 使用其他语言的示例,我有其他代码可以与 FileCodeModels 一起使用,所以如果我能得到它,我也可以使用它。

我实际上在想我需要利用安装到 VS 中的 TypeScript 扩展(创建扩展依赖),但我不太确定。

0 投票
1 回答
385 浏览

c# - Roslyn:如何异步更新多个项目?

我正在调查在 Visual Studio 扩展 (VSIX) 中使用 Roslyn 编译器VisualStudioWorkspace来更新现有代码。

想象一下,我当前的解决方案有 12 个项目。对于每个我想要的项目:

  1. 添加新的代码文件
  2. 更新现有代码文件

我了解这些对象的不变性,并且作为概念验证,我编写了一个示例,对第一个项目进行更改,然后对第二个项目进行更改,依此类推。

然后我想知道是否可以使用异步任务对每个项目进行更改,并在所有任务完成后(所有项目都已更新)更新解决方案。

为此,我改变了我的概念验证,我现在有 12 个更新的项目。我不清楚的是如何将所有更改合并回我当前的解决方案,以便我可以myWorkspace.TryApplyChanges(sln)一步调用。

0 投票
4 回答
600 浏览

c# - 了解/获取符号类型?

是否可以确定特定符号是局部变量、类字段还是方法的参数?例如,如果我在sampleString 上调用FindSymbolAtPosition,我能知道sampleString 符号是方法的参数还是变量?

编辑:要求它必须从编码时间开始工作,对于我使用 roslyn 构建的静态代码分析工具

0 投票
1 回答
1732 浏览

c# - Roslyn:分析调用方法的对象

例如:

这里的调用节点是command.ExecuteReader()。如何使用 roslyncommand从调用节点获取变量标识符令牌/节点?假设该调用节点之前可以有许多其他方法调用,例如classA.methodA().methodB().classB.methodC(command.ExecuteReader()),因此获取标识符node.DescendantNodes可能没有用。我想到的解决方案是首先获取 SpanStart ExecuteReader,然后command通过调用SymbolFinder.FindSymbolAtPosition的位置来获取符号ExecuteReader.SpanStart - 2。但是我不确定这个解决方案是否可以处理每一种情况。我正在开发的应用程序是一个静态代码分析器。

0 投票
0 回答
88 浏览

visual-studio - Roslyn CodeAnalysis 执行时间详情

我目前正在进行一个构建时间很长的项目。
最耗时的任务是代码分析部分。我想知道哪些 CA 规则需要花费太多时间来执行,仅将它们放在提交时,而不是在每次构建时。
这是一种知道的方法吗?
(例如,是否可以在构建“任务性能摘要”中获取每个规则的执行时间?)

0 投票
1 回答
998 浏览

c# - 如何使用 Roslyn 的 AdhocWorkspace 持久化包含项目和文档的解决方案?

我一直在尝试使用以下代码保留一个新的解决方案,其中包含一个项目和一个简单的 cs 文件,但没有任何内容保存到磁盘上。我做错了什么还是 Roslyn 不是用于生成解决方案项目和文件的工具?

0 投票
1 回答
1536 浏览

c# - 如何查看一个类是否实现了与 Roslyn 的接口

我还是新手Roslyn,所以希望这不是一个太愚蠢的问题。

我正在寻找一种方法来查看一个类是否实现了接口的所有方法,如果没有,则突出显示接口,就像内置的“实现接口”一样。

到目前为止,我可以看到方法名称是否实现,但我还没有找到方法来查看方法上是否设置了正确的返回类型。