问题标签 [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.
c# - Roslyn:在父或祖先 SyntaxNode 中检索符号
我正在编写一个 Roslyn 分析器,以在某种类的某个方法中使用某个库方法时引发诊断,但我无法检索父或祖先语法节点中的符号。
例如,
这是分析的SyntaxNode
代码SyntaxKind.InvocationExpression
所以我的问题是,是否可以SymbolInfo
从祖先中检索SyntaxNode
。
我的方法是正确的还是应该尝试另一种方法?
c# - 是否可以实例化并调用我的 Analyzer 现在正在分析的类的方法?
我的分析器将匹配具有某些签名的方法。我想从我的分析器内部创建一个我正在分析的类的实例并调用导致分析器启动的方法。
假设源代码处于可编译状态,这可能吗?
获取类名和方法名非常简单,但 Type.GetType(...) 将始终返回 null。
这样做的目的是我希望我的分析器在我使用测试方法并运行它时启动,如果测试失败则失败。
如果代码还没有准备好编译,那么直接返回就可以了。
c# - 使用 Roslyn 查找特定方法的所有方法调用
我正在使用 Roslyn 开发代码分析器,我当前的任务是查找程序集中未使用的所有内部方法。
我从 a 开始MethodDeclarationSyntax
并从中获取符号。然后我使用 in 中的FindCallersAsync
方法SymbolFinder
,但即使我在程序集中的某处调用有问题的方法,它也会返回一个空集合。请参阅下面的代码。
我在这里看到了类似的代码,但在该示例中,方法符号是使用以下方法获得GetSymbolInfo
的InvocationExpressionSyntax
:
但是,就我而言,我需要从声明中找到调用(如果有的话)。如果我确实首先获得调用并从GetSymbolInfo
调用方法中传递符号,则正确返回 - 所以问题似乎出在symbol
参数上,而不是solution
。
由于我正在尝试获取声明的基础符号,因此我不能使用GetSymbolInfo
,而是使用GetDeclaredSymbol
(如此处建议的那样)。
我对这篇文章的理解是返回的符号GetDeclaredSymbol
应该GetSymbolInfo
是相同的。但是,使用Equals
返回的简单比较false
。
有谁知道返回的两个符号之间有什么区别以及如何获得“正确”的符号?或者也许完全有更好的方法?我所有的研究似乎都指向FindCallersAsync
,但我就是无法让它发挥作用。
c# - 检查解决方案中相对于文件夹的命名空间
我正在尝试创建一个DiagnosticAnalyzer
检测名称空间声明何时与 VS 项目中的目录位置不同的方法。
例子:
我现在面临的问题是从分析器中的当前 SymbolAnalysisContext 中找到源路径(相对于项目)。在 codefix 提供程序中,您将使用Document
该类,但我不确定是否可以从SymbolAnalysisContext
.
c# - 如何使用 Roslyn 获取编译时间常数值
我有一些示例代码可以简化我想要完成的任务。
选项属性.cs
选项.cs
SomeClass.cs
如何获取“SomeClass”类的“OptionAttribute”并获取“PickedOption”值?
更新
我不是在问如何使用反射。这是用于在保存保存代码的文件时生成代码。我此时没有更新的 dll,所以反射不起作用我正在尝试使用 Roslyn 来解析实际文件。以下是我尝试过的
我的解决方案
我让它工作了!
谢谢!
c# - 可以制作一个自动缩进预处理器指令的分析器吗?
我喜欢在我的#region
块中缩进代码以提高可读性(个人喜好)。然而,文本编辑器的默认行为是将代码与其周围区域内联,如下所示:
我找不到任何允许以下缩进行为的扩展:
roslyn 代码分析可以用来编写强制这种格式的分析器吗?
c# - 如何使用参数创建 AttributeSyntax
我正在尝试使用 Roslyn 创建一个看起来像这样的参数:
[MyAttribute("some_param")]
现在我可以轻松地创建AttributeSyntax
但不知道如何ArgumentList
使用该.AddArguments(ExpressionSyntax)
方法向属性添加参数。我只是不确定我需要做什么来创建适当的表达式。
c# - Roslyn CTP 到 RTM 升级 - 如何使用格式化程序
在 CTP 版本中,我曾经编写以下代码以将更改保存到具有格式的文件中。知道 RTM 发生了什么变化吗?
c# - 从 ObjectCreationExpressionSyntax 获取 ITypeSymbol
我想达到什么
我想编写一个代码分析器,可以处理以下任何内容 ObjectCreationExpression
:
并允许我找出该类型实现的接口,如果找到特定接口则执行操作。
我试过的
我通过以下方式注册 SyntaxNodeAction 拦截了分析:
为了获得接口 ITypeSymbol 似乎是我试图在注册方法中获得的方式:
如您所见,我已经尝试了所有可以在网上找到的方法,但均无济于事。也许我根本不应该寻找 INamedTypeSymbol - 如果是这样,我需要什么?
你能指出我正确的方向吗?