官术网_书友最值得收藏!

  • Roslyn Cookbook
  • Manish Vasani
  • 230字
  • 2021-07-15 17:07:32

How it works...

Syntax node analyzers register one or more syntax node action callbacks to analyse syntax kinds of interest. We specified interest in analyzing VariableDeclaration syntax kind in the RegisterSyntaxNodeAction invocation.

 

context.RegisterSyntaxNodeAction(syntaxNodeContext =>
{
...
}, SyntaxKind.VariableDeclaration);

Analysis works by operating on the syntax node and semantic model exposed off the syntax node analysis context in the callback. We first do syntactic checks to verify that we are operating on a valid implicitly typed declaration:

 

// Do not flag implicitly typed declarations that declare more than one variables,
// as the compiler already generates error CS0819 for those cases.
var declaration = (VariableDeclarationSyntax)syntaxNodeContext.Node;
if (!declaration.Type.IsVar || declaration.Variables.Count != 1)
{
return;
}

We then perform semantic checks using the semantic model APIs to get semantic type information about the type declaration syntax node and verify it is not an error type or primitive system type:

// Do not flag variable declarations with error type or special System types, such as int, char, string, and so on.
var typeInfo = syntaxNodeContext.SemanticModel.GetTypeInfo(declaration.Type, syntaxNodeContext.CancellationToken);
if (typeInfo.Type.TypeKind == TypeKind.Error || typeInfo.Type.SpecialType != SpecialType.None)
{
return;
}
You can perform many powerful semantic operations on the syntax node exposed from the SyntaxNodeAnalysisContext using the public semantic model APIs, for reference see https://github.com/dotnet/roslyn/blob/master/src/Compilers/Core/Portable/Compilation/SemanticModel.cs.

If both the syntactic and semantics check succeed, then we report a diagnostic about recommending explicit type instead of var.

主站蜘蛛池模板: 台州市| 博湖县| 探索| 竹溪县| 贡觉县| 景德镇市| 大足县| 富阳市| 台北县| 安福县| 凉山| 申扎县| 海林市| 九台市| 宜丰县| 平邑县| 五华县| 三穗县| 上思县| 隆尧县| 罗江县| 平遥县| 邢台市| 闽侯县| 长寿区| 德阳市| 宾阳县| 镇江市| 澳门| 图们市| 绿春县| 长沙县| 铜山县| 沧源| 永泰县| 双牌县| 肥东县| 南充市| 昆山市| 衡阳县| 项城市|