本文整理汇总了C#中AnalysisContext.RegisterSyntaxTreeActionInNonGenerated方法的典型用法代码示例。如果您正苦于以下问题:C# AnalysisContext.RegisterSyntaxTreeActionInNonGenerated方法的具体用法?C# AnalysisContext.RegisterSyntaxTreeActionInNonGenerated怎么用?C# AnalysisContext.RegisterSyntaxTreeActionInNonGenerated使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类AnalysisContext
的用法示例。
在下文中一共展示了AnalysisContext.RegisterSyntaxTreeActionInNonGenerated方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Initialize
public override void Initialize(AnalysisContext context)
{
context.RegisterSyntaxTreeActionInNonGenerated(
c => {
foreach (var asyncOrAwaitToken in GetAsyncOrAwaitTokens(c.Tree.GetRoot())
.Where(token => !token.Parent.AncestorsAndSelf().OfType<IdentifierNameSyntax>().Any()))
{
c.ReportDiagnostic(Diagnostic.Create(Rule, asyncOrAwaitToken.GetLocation(), asyncOrAwaitToken.ToString()));
}
});
}
示例2: Initialize
public override void Initialize(AnalysisContext context)
{
context.RegisterSyntaxTreeActionInNonGenerated(
c =>
{
foreach (var line in c.Tree.GetText().Lines
.Where(line => line.Span.Length > Maximum))
{
c.ReportDiagnostic(Diagnostic.Create(Rule, c.Tree.GetLocation(line.Span), Maximum, line.Span.Length));
}
});
}
示例3: Initialize
public override void Initialize(AnalysisContext context)
{
context.RegisterSyntaxTreeActionInNonGenerated(
c =>
{
var root = c.Tree.GetRoot();
var lines = root.GetLocation().GetLineSpan().EndLinePosition.Line + 1;
if (lines > Maximum)
{
c.ReportDiagnostic(Diagnostic.Create(Rule, Location.None, Maximum, lines));
}
});
}
示例4: Initialize
public override void Initialize(AnalysisContext context)
{
context.RegisterSyntaxTreeActionInNonGenerated(
c =>
{
var offset = c.Tree.GetText().ToString().IndexOf('\t');
if (offset < 0)
{
return;
}
var location = c.Tree.GetLocation(TextSpan.FromBounds(offset, offset));
c.ReportDiagnostic(Diagnostic.Create(Rule, location));
});
}
示例5: Initialize
public override void Initialize(AnalysisContext context)
{
context.RegisterSyntaxTreeActionInNonGenerated(
c =>
{
var lineContinuations = c.Tree.GetRoot().DescendantTokens()
.SelectMany(token => token.TrailingTrivia)
.Where(trivia => trivia.IsKind(SyntaxKind.LineContinuationTrivia));
foreach (var lineContinuation in lineContinuations)
{
c.ReportDiagnostic(Diagnostic.Create(Rule, lineContinuation.GetLocation()));
}
});
}
示例6: Initialize
public override void Initialize(AnalysisContext context)
{
context.RegisterSyntaxTreeActionInNonGenerated(
c =>
{
var root = c.Tree.GetRoot();
foreach (var closeBraceToken in GetDescendantCloseBraceTokens(root)
.Where(closeBraceToken =>
!StartsLine(closeBraceToken) &&
!IsOnSameLineAsOpenBrace(closeBraceToken) &&
!IsInitializer(closeBraceToken.Parent)))
{
c.ReportDiagnostic(Diagnostic.Create(Rule, closeBraceToken.GetLocation()));
}
});
}
示例7: Initialize
public override void Initialize(AnalysisContext context)
{
context.RegisterSyntaxTreeActionInNonGenerated(
c =>
{
var comments = c.Tree.GetCompilationUnitRoot().DescendantTrivia()
.Where(trivia => IsComment(trivia));
foreach (var comment in comments)
{
var text = comment.ToString();
foreach (var i in AllCaseInsensitiveIndexesOf(text, Word).Where(i => IsWordAt(text, i, Word.Length)))
{
var startLocation = comment.SpanStart + i;
var location = Location.Create(
c.Tree,
TextSpan.FromBounds(startLocation, startLocation + Word.Length));
c.ReportDiagnostic(Diagnostic.Create(Rule, location));
}
}
});
}
示例8: Initialize
public override void Initialize(AnalysisContext context)
{
context.RegisterSyntaxTreeActionInNonGenerated(
c =>
{
foreach (var token in c.Tree.GetRoot().DescendantTokens())
{
Action<IEnumerable<SyntaxTrivia>> check =
trivias =>
{
var lastCommentedCodeLine = int.MinValue;
foreach (var trivia in trivias)
{
if (!trivia.IsKind(SyntaxKind.SingleLineCommentTrivia) &&
!trivia.IsKind(SyntaxKind.MultiLineCommentTrivia))
{
continue;
}
var triviaContent = GetTriviaContent(trivia);
var triviaStartingLineNumber = trivia.GetLocation().GetLineSpan().StartLinePosition.Line;
var triviaLines = triviaContent.Split(LineTerminators, StringSplitOptions.None);
for (var triviaLineNumber = 0; triviaLineNumber < triviaLines.Length; triviaLineNumber++)
{
if (!IsCode(triviaLines[triviaLineNumber]))
{
continue;
}
var lineNumber = triviaStartingLineNumber + triviaLineNumber;
var previousLastCommentedCodeLine = lastCommentedCodeLine;
lastCommentedCodeLine = lineNumber;
if (lineNumber == previousLastCommentedCodeLine + 1)
{
continue;
}
var lineSpan = c.Tree.GetText().Lines[lineNumber].Span;
var commentLineSpan = lineSpan.Intersection(trivia.GetLocation().SourceSpan);
var location = Location.Create(c.Tree, commentLineSpan ?? lineSpan);
c.ReportDiagnostic(Diagnostic.Create(Rule, location));
break;
}
}
};
check(token.LeadingTrivia);
check(token.TrailingTrivia);
}
});
}
示例9: Initialize
public override void Initialize(AnalysisContext context)
{
context.RegisterSyntaxTreeActionInNonGenerated(
c =>
{
var root = c.Tree.GetRoot();
var rootExpressions =
root
.DescendantNodes(e2 => !(e2 is ExpressionSyntax))
.Where(
e =>
e is ExpressionSyntax &&
!IsCompoundExpression(e));
var compoundExpressionsDescendants =
root
.DescendantNodes()
.Where(IsCompoundExpression)
.SelectMany(
e =>
e
.DescendantNodes(
e2 =>
e == e2 ||
!(e2 is ExpressionSyntax))
.Where(
e2 =>
e2 is ExpressionSyntax &&
!IsCompoundExpression(e2)));
var expressionsToCheck = rootExpressions.Concat(compoundExpressionsDescendants);
var complexExpressions =
expressionsToCheck
.Select(
e =>
new
{
Expression = e,
Complexity =
e
.DescendantNodesAndSelf(e2 => !IsCompoundExpression(e2))
.Count(
e2 =>
e2.IsKind(SyntaxKind.ConditionalExpression) ||
e2.IsKind(SyntaxKind.LogicalAndExpression) ||
e2.IsKind(SyntaxKind.LogicalOrExpression))
})
.Where(e => e.Complexity > Maximum);
foreach (var complexExpression in complexExpressions)
{
c.ReportDiagnostic(Diagnostic.Create(Rule, complexExpression.Expression.GetLocation(), Maximum, complexExpression.Complexity));
}
});
}
示例10: Initialize
public override void Initialize(AnalysisContext context)
{
context.RegisterSyntaxTreeActionInNonGenerated(
c =>
{
foreach (var token in c.Tree.GetRoot().DescendantTokens())
{
Action<IEnumerable<SyntaxTrivia>> check =
trivias =>
{
var shouldReport = true;
foreach (var trivia in trivias)
{
if (trivia.IsKind(SyntaxKind.MultiLineCommentTrivia))
{
CheckMultilineComment(c, trivia);
shouldReport = true;
continue;
}
if (trivia.IsKind(SyntaxKind.SingleLineCommentTrivia) && shouldReport)
{
var triviaContent = GetTriviaContent(trivia);
if (!IsCode(triviaContent))
{
continue;
}
c.ReportDiagnostic(Diagnostic.Create(Rule, trivia.GetLocation()));
shouldReport = false;
continue;
}
}
};
check(token.LeadingTrivia);
check(token.TrailingTrivia);
}
});
}