# Lines starting with '#' are comments.
# A single name is a member of Microsoft.CodeAnalysis.CSharp.SyntaxKind.
GotoStatement; Use structured control flow instead

# The other queries are XPath 1.0 queries evaluated on the syntax tree of each file.
//ClassDeclaration/ParameterList; Do not use primary constructors on classes
//ConditionalExpression//ConditionalExpression; Do not nest conditional expressions
//MethodDeclaration[count(ParameterList/Parameter) > 5]/@Identifier; Use a parameter object instead of more than 5 parameters
//ReturnStatement[ancestor::ConstructorDeclaration]; Do not return from a constructor

# The attributes of the 'semantic' namespace expose the semantic model.
//InvocationExpression[@semantic:Symbol='System.Console.WriteLine']; Use the logger instead of the console
//*[@semantic:TypeIsValueType='true' and @semantic:ConvertedTypeMetadataName='System.Object']; Do not box values
//MethodDeclaration/*[@semantic:TypeMetadataName='System.Collections.Generic.List`1']; Return an IReadOnlyList<T> instead of a List<T>

# The elements of the 'operation' namespace expose the operation tree.
//operation:PropertyReference[@PropertyDocumentationId='P:System.DateTime.Now']; Use a clock abstraction instead of DateTime.Now
//operation:Loop//operation:Invocation[@TargetMethodName='Load']; Do not call Load in a loop
syntax(//operation:Invocation[@TargetMethodName='Write'])//InterpolatedStringExpression; Do not interpolate the arguments of the logger
