src\Analyzers\CSharp\Analyzers\RemoveConfusingSuppression\CSharpRemoveConfusingSuppressionDiagnosticAnalyzer.cs (1)
31var left = node switch
src\Analyzers\CSharp\Analyzers\UseCoalesceExpression\CSharpUseCoalesceExpressionForNullableTernaryConditionalCheckDiagnosticAnalyzer.cs (1)
18ExpressionSyntax,
src\Analyzers\CSharp\Analyzers\UseCoalesceExpression\CSharpUseCoalesceExpressionForTernaryConditionalCheckDiagnosticAnalyzer.cs (1)
18ExpressionSyntax,
src\Analyzers\CSharp\Analyzers\UseObjectInitializer\CSharpUseNamedMemberInitializerAnalyzer.cs (1)
14ExpressionSyntax,
src\Analyzers\CSharp\Analyzers\UseObjectInitializer\CSharpUseObjectInitializerDiagnosticAnalyzer.cs (1)
18ExpressionSyntax,
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Extensions\ExpressionSyntaxExtensions.cs (60)
20public static ExpressionSyntax? WalkUpParentheses(this ExpressionSyntax? expression)
28public static ExpressionSyntax WalkDownParentheses(this ExpressionSyntax expression)
36public static ExpressionSyntax WalkDownSuppressions(this ExpressionSyntax expression)
44public static bool IsQualifiedCrefName(this ExpressionSyntax expression)
47public static bool IsSimpleMemberAccessExpressionName([NotNullWhen(true)] this ExpressionSyntax? expression)
50public static bool IsAnyMemberAccessExpressionName([NotNullWhen(true)] this ExpressionSyntax? expression)
59public static bool IsMemberBindingExpressionName([NotNullWhen(true)] this ExpressionSyntax? expression)
63public static bool IsRightSideOfQualifiedName([NotNullWhen(true)] this ExpressionSyntax? expression)
66public static bool IsRightSideOfColonColon(this ExpressionSyntax expression)
69public static bool IsRightSideOfDot(this ExpressionSyntax name)
72public static bool IsRightSideOfDotOrArrow([NotNullWhen(true)] this ExpressionSyntax? name)
75public static bool IsRightSideOfDotOrColonColon(this ExpressionSyntax name)
78public static bool IsRightSideOfDotOrArrowOrColonColon([NotNullWhen(true)] this ExpressionSyntax name)
81public static bool IsRightOfCloseParen(this ExpressionSyntax expression)
88public static bool IsLeftSideOfDot([NotNullWhen(true)] this ExpressionSyntax? expression)
97public static bool IsLeftSideOfSimpleMemberAccessExpression(this ExpressionSyntax expression)
101public static bool IsLeftSideOfDotOrArrow(this ExpressionSyntax expression)
105public static bool IsLeftSideOfQualifiedName(this ExpressionSyntax expression)
111public static bool IsExpressionOfInvocation(this ExpressionSyntax expression)
115public static bool TryGetNameParts(this ExpressionSyntax expression, [NotNullWhen(true)] out IList<string>? parts)
128public static bool TryGetNameParts(this ExpressionSyntax expression, List<string> parts)
169public static bool IsInConstantContext([NotNullWhen(true)] this ExpressionSyntax? expression)
196public static bool IsInOutContext([NotNullWhen(true)] this ExpressionSyntax? expression)
200public static bool IsInRefContext([NotNullWhen(true)] this ExpressionSyntax? expression)
207public static bool IsInRefContext([NotNullWhen(true)] this ExpressionSyntax? expression, [NotNullWhen(true)] out SyntaxNode? refParent)
210expression = (ExpressionSyntax)expression.Parent;
223public static bool IsInInContext([NotNullWhen(true)] this ExpressionSyntax? expression)
227private static ExpressionSyntax? GetExpressionToAnalyzeForWrites(ExpressionSyntax? expression)
231expression = (ExpressionSyntax)expression.GetRequiredParent();
239public static bool IsOnlyWrittenTo([NotNullWhen(true)] this ExpressionSyntax? expression)
273private static bool IsExpressionOfArgumentInDeconstruction(ExpressionSyntax expr)
320[NotNullWhen(true)] this ExpressionSyntax? expression,
397public static bool IsAttributeNamedArgumentIdentifier([NotNullWhen(true)] this ExpressionSyntax? expression)
403public static bool IsOperandOfIncrementOrDecrementExpression(this ExpressionSyntax expression)
420public static bool IsNamedArgumentIdentifier(this ExpressionSyntax expression)
424[NotNullWhen(true)] this ExpressionSyntax? expression, SemanticModel semanticModel, CancellationToken cancellationToken)
454[NotNullWhen(true)] this ExpressionSyntax? expression, SemanticModel semanticModel, CancellationToken cancellationToken)
465this ExpressionSyntax expression, SemanticModel semanticModel, CancellationToken cancellationToken)
604var parentNonExpression = expression.GetAncestors().SkipWhile(n => n is ExpressionSyntax).FirstOrDefault();
605var topExpression = expression;
648public static bool IsNameOfArgumentExpression(this ExpressionSyntax expression)
658public static SimpleNameSyntax? GetRightmostName(this ExpressionSyntax node)
693public static OperatorPrecedence GetOperatorPrecedence(this ExpressionSyntax expression)
852this ExpressionSyntax expression,
872private static StatementSyntax ConvertToStatement(ExpressionSyntax expression, SyntaxToken semicolonToken, bool createReturnStatementForExpression)
900public static bool IsDirectChildOfMemberAccessExpression(this ExpressionSyntax expression)
903public static bool InsideCrefReference(this ExpressionSyntax expression)
907this ExpressionSyntax expression,
911var topExpression = expression.WalkUpParentheses();
936bool HasType(ExpressionSyntax expression, [NotNullWhen(true)] out ITypeSymbol? type)
998ITypeSymbol? GetTargetTypeForConditionalExpression(ConditionalExpressionSyntax conditionalExpression, ExpressionSyntax expression)
1008ITypeSymbol? GetTargetTypeForLambdaExpression(LambdaExpressionSyntax lambda, ExpressionSyntax expression)
1055ITypeSymbol? GetTargetTypeForInitializerExpression(InitializerExpressionSyntax initializerExpression, ExpressionSyntax expression)
1064foreach (var sibling in initializerExpression.Expressions)
1084ITypeSymbol? GetTargetTypeForAssignmentExpression(AssignmentExpressionSyntax assignmentExpression, ExpressionSyntax expression)
1089ITypeSymbol? GetTargetTypeForBinaryExpression(BinaryExpressionSyntax binaryExpression, ExpressionSyntax expression)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Extensions\SemanticModelExtensions.cs (12)
27if (name.Parent is ExpressionSyntax expression)
44if (name.Parent is ExpressionSyntax expression)
59private static void DecomposeName(ExpressionSyntax expression, out ExpressionSyntax qualifier, out string name, out int arity)
104ExpressionSyntax expression,
107var expr = SyntaxFactory.GetStandaloneExpression(expression);
108DecomposeName(expr, out var qualifier, out var name, out _);
137case ExpressionSyntax expression:
353this SemanticModel semanticModel, ExpressionSyntax expression,
359var current = expression;
430SemanticModel semanticModel, ExpressionSyntax expression, CancellationToken cancellationToken)
432var topExpression = expression.WalkUpParentheses();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Simplification\Simplifiers\CastSimplifier.cs (52)
46public static bool IsUnnecessaryCast(ExpressionSyntax cast, SemanticModel semanticModel, CancellationToken cancellationToken)
125var leftOrRightChild = castExpression.WalkUpParentheses();
143bool IsConstantZero(ExpressionSyntax child)
178ExpressionSyntax castNode, ExpressionSyntax castedExpressionNode,
222private static bool CastRemovalCouldCauseSignExtensionWarning(ExpressionSyntax castSyntax, IConversionOperation conversionOperation)
249ExpressionSyntax castNode, ExpressionSyntax castedExpressionNode,
289ExpressionSyntax castNode, ExpressionSyntax castedExpressionNode,
617ExpressionSyntax castNode,
682ExpressionSyntax castNode, ExpressionSyntax castedExpressionNode, SemanticModel semanticModel, CancellationToken cancellationToken)
768ExpressionSyntax castNode, IConversionOperation originalConversionOperation,
769ExpressionSyntax rewrittenExpression, SemanticModel rewrittenSemanticModel,
836ExpressionSyntax castNode, SemanticModel originalSemanticModel,
837ExpressionSyntax rewrittenExpression, SemanticModel rewrittenSemanticModel, CancellationToken cancellationToken)
861ExpressionSyntax castNode, SemanticModel originalSemanticModel,
862ExpressionSyntax rewrittenExpression, SemanticModel rewrittenSemanticModel, CancellationToken cancellationToken)
890ExpressionSyntax castNode,
892ExpressionSyntax rewrittenExpression,
894Func<ExpressionSyntax, TConditionalOrSwitchExpression?> getConditionalOrSwitchExpression,
895Func<TConditionalOrSwitchExpression, ImmutableArray<ExpressionSyntax>> getArmExpressions,
896Func<TConditionalOrSwitchExpression, ExpressionSyntax, ExpressionSyntax?> getAlternativeArm,
898where TConditionalOrSwitchExpression : ExpressionSyntax
903var parentExpression = castExpression.WalkUpParentheses();
928foreach (var armExpression in getArmExpressions(originalConditionalOrSwitchExpression))
984var otherSide = getAlternativeArm(originalConditionalOrSwitchExpression, parentExpression);
1040ExpressionSyntax expression,
1114=> node is ExpressionSyntax expression && expression.WalkDownParentheses().Kind() is SyntaxKind.CastExpression or SyntaxKind.AsExpression;
1118ExpressionSyntax castOrAsNode,
1142var parent = castOrAsNode.WalkUpParentheses();
1175ExpressionSyntax castNode, ExpressionSyntax castedExpressionNode,
1243private static bool IsFieldOrArrayElement(SemanticModel semanticModel, ExpressionSyntax expression, CancellationToken cancellationToken)
1250ExpressionSyntax expression, SemanticModel semanticModel, CancellationToken cancellationToken)
1263ExpressionSyntax castNode, ExpressionSyntax rewrittenExpression,
1316ExpressionSyntax castNode, ExpressionSyntax rewrittenExpression,
1350ExpressionSyntax castNode, ExpressionSyntax rewrittenExpression,
1381ExpressionSyntax rewrittenExpression,
1490ExpressionSyntax rewrittenExpression,
1532ExpressionSyntax expression,
1624ExpressionSyntax castNode, ExpressionSyntax rewrittenExpression,
1647private static (SemanticModel? rewrittenSemanticModel, ExpressionSyntax? rewrittenExpression) GetSemanticModelWithCastRemoved(
1648ExpressionSyntax castNode,
1649ExpressionSyntax castedExpressionNode,
1655var rewrittenExpression = analyzer.ReplacedExpression;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Utilities\SpeculationAnalyzer.cs (44)
31ExpressionSyntax,
56ExpressionSyntax expression,
57ExpressionSyntax newExpression,
68protected override bool CanAccessInstanceMemberThrough(ExpressionSyntax expression)
71protected override SyntaxNode GetSemanticRootForSpeculation(ExpressionSyntax expression)
107nodeToSpeculate is ExpressionSyntax ||
119var isInNamespaceOrTypeContext = SyntaxFacts.IsInNamespaceOrTypeContext(originalNode as ExpressionSyntax);
181Debug.Assert(nodeToSpeculate is ExpressionSyntax);
191public bool ReplacementChangesSemanticsOfUnchangedLambda(ExpressionSyntax originalLambda, ExpressionSyntax replacedLambda)
302var expression = (ExpressionSyntax)currentReplacedNode.ChildNodes().First();
368ExpressionSyntax originalOtherPartOfConditional, newOtherPartOfConditional;
418if (ReplacementBreaksBoxingInConditionalExpression(originalExpressionTypeInfo, newExpressionTypeInfo, (ExpressionSyntax)previousOriginalNode, (ExpressionSyntax)previousReplacedNode))
464var previousReplacedExpression = (ExpressionSyntax)previousReplacedNode;
518ReplacementBreaksCollectionInitializerAddMethod((ExpressionSyntax)previousOriginalNode, (ExpressionSyntax)previousReplacedNode);
522return !TypesAreCompatible((ExpressionSyntax)currentOriginalNode, (ExpressionSyntax)currentReplacedNode);
531return !TypesAreCompatible((ExpressionSyntax)currentOriginalNode, (ExpressionSyntax)currentReplacedNode);
542private bool ReplacementBreaksBoxingInConditionalExpression(TypeInfo originalExpressionTypeInfo, TypeInfo newExpressionTypeInfo, ExpressionSyntax previousOriginalNode, ExpressionSyntax previousReplacedNode)
573private bool ReplacementBreaksCollectionInitializerAddMethod(ExpressionSyntax originalInitializer, ExpressionSyntax newInitializer)
588protected override ImmutableArray<ArgumentSyntax> GetArguments(ExpressionSyntax expression)
596private static BaseArgumentListSyntax GetArgumentList(ExpressionSyntax expression)
609protected override ExpressionSyntax GetReceiver(ExpressionSyntax expression)
620var result = ((InvocationExpressionSyntax)expression).Expression;
631var result = ((ElementAccessExpressionSyntax)expression).Expression;
645protected override bool IsInNamespaceOrTypeContext(ExpressionSyntax node)
648protected override ExpressionSyntax GetForEachStatementExpression(CommonForEachStatementSyntax forEachStatement)
651protected override ExpressionSyntax GetThrowStatementExpression(ThrowStatementSyntax throwStatement)
743ExpressionSyntax originalExpression,
744ExpressionSyntax newExpression,
813protected override bool ConversionsAreCompatible(SemanticModel originalModel, ExpressionSyntax originalExpression, SemanticModel newModel, ExpressionSyntax newExpression)
838private static bool ConditionalExpressionConversionsAreAllowed(ExpressionSyntax originalExpression)
841protected override bool ConversionsAreCompatible(ExpressionSyntax originalExpression, ITypeSymbol originalTargetType, ExpressionSyntax newExpression, ITypeSymbol newTargetType)
934protected override Conversion ClassifyConversion(SemanticModel model, ExpressionSyntax expression, ITypeSymbol targetType)
src\Analyzers\CSharp\CodeFixes\GenerateParameterizedMember\CSharpGenerateConversionService.cs (5)
25AbstractGenerateConversionService<CSharpGenerateConversionService, SimpleNameSyntax, ExpressionSyntax, InvocationExpressionSyntax>
29return node is ExpressionSyntax &&
42SemanticDocument document, AbstractGenerateParameterizedMemberService<CSharpGenerateConversionService, SimpleNameSyntax, ExpressionSyntax, InvocationExpressionSyntax>.State state)
217protected override string GetImplicitConversionDisplayText(AbstractGenerateParameterizedMemberService<CSharpGenerateConversionService, SimpleNameSyntax, ExpressionSyntax, InvocationExpressionSyntax>.State state)
220protected override string GetExplicitConversionDisplayText(AbstractGenerateParameterizedMemberService<CSharpGenerateConversionService, SimpleNameSyntax, ExpressionSyntax, InvocationExpressionSyntax>.State state)
src\Analyzers\CSharp\CodeFixes\PopulateSwitch\CSharpPopulateSwitchExpressionCodeFixProvider.cs (1)
25ExpressionSyntax,
src\Analyzers\CSharp\CodeFixes\UseCollectionExpression\CSharpCollectionExpressionRewriter.cs (31)
41where TParentExpression : ExpressionSyntax
84if (preMatches is [{ Node: ExpressionSyntax } preMatch] && postMatches.IsEmpty)
88else if (preMatches.IsEmpty && postMatches is [{ Node: ExpressionSyntax } postMatch])
205var expression = (ExpressionSyntax)(object)match.Node;
446bool useSpread, ExpressionSyntax expression)
489foreach (var expression in expressions)
502var condition = IndentExpression(ifStatement, ifStatement.Condition, preferredIndentation).Parenthesize(includeElasticTrivia: false);
526else if (node is ExpressionSyntax expression)
536ExpressionSyntax IndentExpression(
538ExpressionSyntax expression,
551var updatedExpression = expression.ReplaceTokens(
647static ExpressionSyntax TransferParentStatementComments(
649ExpressionSyntax expression,
732foreach (var expression in initializer.Expressions)
787else if (node is ExpressionSyntax expression)
796static ExpressionSyntax ConvertExpression(
797ExpressionSyntax expression, Func<ExpressionSyntax, ExpressionSyntax>? indent)
803static ImmutableArray<ExpressionSyntax> ConvertExpressions(
804ExpressionSyntax expression, Func<ExpressionSyntax, ExpressionSyntax>? indent)
819static ImmutableArray<ExpressionSyntax> ConvertAssignment(
820AssignmentExpressionSyntax assignment, Func<ExpressionSyntax, ExpressionSyntax> indent)
825static ImmutableArray<ExpressionSyntax> ConvertInvocation(
826InvocationExpressionSyntax invocation, Func<ExpressionSyntax, ExpressionSyntax> indent)
838ParsedDocument document, TParentExpression expressionToReplace, SyntaxFormattingOptions formattingOptions) where TParentExpression : ExpressionSyntax
src\Analyzers\CSharp\CodeFixes\UseIndexOrRangeOperator\CSharpUseRangeOperatorCodeFixProvider.cs (19)
73var updatedNode = FixOne(result, generator);
84private static ExpressionSyntax FixOne(Result result, SyntaxGenerator generator)
111var expression = invocation.Expression is MemberAccessExpressionSyntax memberAccess
150(ExpressionSyntax? startExpr, bool startFromEnd, ExpressionSyntax? endExpr, bool endFromEnd) GetComputedRangeData()
160return (startExpr: null, startFromEnd: false, (ExpressionSyntax)subtraction.RightOperand.Syntax, endFromEnd: true);
165return (startExpr: null, startFromEnd: false, (ExpressionSyntax)result.InvocationOperation.Arguments[0].Value.Syntax, endFromEnd: false);
174return ((ExpressionSyntax)subtraction.RightOperand.Syntax, startFromEnd: true, endExpr: null, endFromEnd: false);
179return ((ExpressionSyntax)result.InvocationOperation.Arguments[1].Value.Syntax, startFromEnd: false, endExpr: null, endFromEnd: false);
195var startExpr = (ExpressionSyntax)startOperation.Syntax;
198ExpressionSyntax? endExpr = null;
210endExpr = (ExpressionSyntax)endOperation.Syntax;
226private static ExpressionSyntax? WalkUpCheckedExpressions(ExpressionSyntax? expr)
241return RangeExpression(leftOperand: null, WalkUpCheckedExpressions((ExpressionSyntax)result.Op1.Syntax));
246return RangeExpression(leftOperand: null, IndexExpression(WalkUpCheckedExpressions((ExpressionSyntax)result.Op1.Syntax)));
260constant1 == 0 ? null : WalkUpCheckedExpressions((ExpressionSyntax)result.Op1.Syntax),
261IndexExpression((ExpressionSyntax)generator.LiteralExpression(constant2 - constant1)));
src\Analyzers\CSharp\CodeFixes\UseNullPropagation\CSharpUseNullPropagationCodeFixProvider.cs (1)
22ExpressionSyntax,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\CSharp\CodeGeneration\ExpressionGenerator.cs (18)
24public static ExpressionSyntax GenerateExpression(
50private static ExpressionSyntax GenerateNullLiteral()
53internal static ExpressionSyntax GenerateExpression(
61return (ExpressionSyntax)CSharpFlagsEnumGenerator.Instance.CreateEnumConstantValue(enumType, value);
75internal static ExpressionSyntax GenerateNonEnumValueExpression(ITypeSymbol? type, object? value, bool canUseFieldReference)
94: (ExpressionSyntax)CSharpSyntaxGeneratorInternal.Instance.DefaultExpression(type),
97private static ExpressionSyntax GenerateBooleanLiteralExpression(bool val)
104private static ExpressionSyntax GenerateStringLiteralExpression(string val)
111private static ExpressionSyntax GenerateCharLiteralExpression(char val)
172private static ExpressionSyntax GenerateDoubleLiteralExpression(ITypeSymbol? type, double value, bool canUseFieldReference)
201private static ExpressionSyntax GenerateSingleLiteralExpression(ITypeSymbol? type, float value, bool canUseFieldReference)
230private static ExpressionSyntax GenerateNonNegativeLiteralExpression<T>(
241private static ExpressionSyntax GenerateLiteralExpression<T>(
251var result = GenerateFieldReference(type, value, constants);
278private static ExpressionSyntax? GenerateFieldReference<T>(ITypeSymbol? type, T value, IEnumerable<KeyValuePair<T, string>> constants)
285var memberAccess = GenerateMemberAccess("System", typeof(T).Name);
299private static ExpressionSyntax GenerateMemberAccess(params ReadOnlySpan<string> names)
301ExpressionSyntax result = IdentifierName(GlobalKeyword);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\CSharp\LanguageServices\CSharpSyntaxGeneratorInternal.cs (23)
63=> SyntaxFactory.EqualsValueClause(operatorToken, (ExpressionSyntax)value);
71expression == null ? null : SyntaxFactory.EqualsValueClause((ExpressionSyntax)expression))]);
78=> SyntaxFactory.ConditionalAccessExpression((ExpressionSyntax)expression, (ExpressionSyntax)whenNotNull);
84=> SyntaxFactory.RefExpression((ExpressionSyntax)expression);
92ExpressionSyntax expression => expression.Parenthesize(includeElasticTrivia, addSimplifierAnnotation),
98=> SyntaxFactory.YieldStatement(SyntaxKind.YieldReturnStatement, (ExpressionSyntax)expression);
120=> SyntaxFactory.Interpolation((ExpressionSyntax)syntaxNode);
123=> SyntaxFactory.InterpolationAlignmentClause(CommaToken, (ExpressionSyntax)alignment);
200(ExpressionSyntax)expression,
208=> SyntaxFactory.ConstantPattern((ExpressionSyntax)expression);
216=> SyntaxFactory.RelationalPattern(LessThanToken, (ExpressionSyntax)expression);
219=> SyntaxFactory.RelationalPattern(LessThanEqualsToken, (ExpressionSyntax)expression);
222=> SyntaxFactory.RelationalPattern(GreaterThanToken, (ExpressionSyntax)expression);
225=> SyntaxFactory.RelationalPattern(GreaterThanEqualsToken, (ExpressionSyntax)expression);
245=> SyntaxFactory.CastExpression((TypeSyntax)type, (ExpressionSyntax)Parenthesize(expression)).WithAdditionalAnnotations(Simplifier.Annotation);
303ParenthesizeLeft((ExpressionSyntax)expression),
310internal static ExpressionSyntax ParenthesizeLeft(ExpressionSyntax expression)
325return (ExpressionSyntax)Parenthesize(expression);
332=> SyntaxFactory.BinaryExpression(syntaxKind, (ExpressionSyntax)Parenthesize(left), (ExpressionSyntax)Parenthesize(right));
338=> SyntaxFactory.CastExpression((TypeSyntax)type, (ExpressionSyntax)Parenthesize(expression)).WithAdditionalAnnotations(Simplifier.Annotation);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\CSharp\LanguageServices\CSharpTypeInferenceService.TypeInferrer.cs (26)
52private static bool DecomposeBinaryOrAssignmentExpression(SyntaxNode node, out SyntaxToken operatorToken, out ExpressionSyntax left, out ExpressionSyntax right)
78out var operatorToken, out var left, out var right))
80var types = InferTypeInBinaryOrAssignmentExpression((ExpressionSyntax)node, operatorToken, left, right, left).Where(IsUsableTypeFunc);
83types = InferTypeInBinaryOrAssignmentExpression((ExpressionSyntax)node, operatorToken, left, right, right).Where(IsUsableTypeFunc);
127var expression = node as ExpressionSyntax;
944private IEnumerable<TypeInferenceInfo> InferTypeInBinaryOrAssignmentExpression(ExpressionSyntax binop, SyntaxToken operatorToken, ExpressionSyntax left, ExpressionSyntax right, ExpressionSyntax expressionOpt = null, SyntaxToken? previousToken = null)
992var otherSide = onRightOfToken ? left : right;
1079private IEnumerable<TypeInferenceInfo> InferTypeInCastExpression(CastExpressionSyntax castExpression, ExpressionSyntax expressionOpt = null, SyntaxToken? previousToken = null)
1111ExpressionSyntax expressionOpt = null,
1166private IEnumerable<TypeInferenceInfo> InferTypeInConditionalExpression(ConditionalExpressionSyntax conditional, ExpressionSyntax expressionOpt = null, SyntaxToken? previousToken = null)
1247private IEnumerable<TypeInferenceInfo> InferTypeInForEachStatement(ForEachStatementSyntax forEachStatementSyntax, ExpressionSyntax expressionOpt = null, SyntaxToken? previousToken = null)
1274private IEnumerable<TypeInferenceInfo> InferTypeInForStatement(ForStatementSyntax forStatement, ExpressionSyntax expressionOpt = null, SyntaxToken? previousToken = null)
1300ExpressionSyntax expressionOpt = null,
1345foreach (var sibling in initializerExpression.Expressions.Where(e => e.Kind() != SyntaxKind.ComplexElementInitializerExpression))
1372foreach (var sibling in initializerExpression.Expressions)
1685ExpressionSyntax expressionOpt = null,
1757var argumentExpression = invocation.ArgumentList.Arguments[0].Expression;
1880var argumentExpression = attributeArgumentSyntax.Expression;
2238private IEnumerable<TypeInferenceInfo> InferTypeInVariableComponentAssignment(ExpressionSyntax left)
2305var expr = arg.Expression;
CodeRefactorings\UseRecursivePatterns\UseRecursivePatternsCodeRefactoringProvider.cs (25)
151static SyntaxNode AdjustBinaryExpressionOperands(BinaryExpressionSyntax logicalAnd, ExpressionSyntax replacement)
162private static Func<SyntaxNode, SyntaxNode>? CombineWhenClauseCondition(PatternSyntax switchPattern, ExpressionSyntax condition, SemanticModel model)
268private static PatternSyntax CreatePattern(ExpressionSyntax originalReceiver, ExpressionOrPatternSyntax target, bool flipped)
276ExpressionSyntax constant => originalReceiver.Parent switch
305ExpressionSyntax rightReceiver,
328private static (ExpressionSyntax Receiver, ExpressionOrPatternSyntax Target, bool Flipped)? TryDetermineReceiver(
329ExpressionSyntax node,
369static (ExpressionSyntax Expression, ExpressionSyntax Constant, bool Flipped)? TryDetermineConstant(BinaryExpressionSyntax node, SemanticModel model)
386ExpressionSyntax expression = names[^1];
416private static (ExpressionSyntax CommonReceiver, ImmutableArray<IdentifierNameSyntax> LeftNames, ImmutableArray<IdentifierNameSyntax> RightNames)? TryGetCommonReceiver(
417ExpressionSyntax left,
418ExpressionSyntax right,
426if (!TryGetInnermostReceiver(left, leftNames, out var leftReceiver, model) ||
427!TryGetInnermostReceiver(right, rightNames, out var rightReceiver, model) ||
433var commonReceiver = leftReceiver;
478static bool TryGetInnermostReceiver(ExpressionSyntax node, ArrayBuilder<IdentifierNameSyntax> builder, [NotNullWhen(true)] out ExpressionSyntax? receiver, SemanticModel model)
515private static ExpressionSyntax? GetInnermostReceiver(ExpressionSyntax node, ArrayBuilder<IdentifierNameSyntax> builder, SemanticModel model)
530private static ExpressionSyntax? GetInnermostReceiver<TArg>(
531ExpressionSyntax node, TArg arg,
537ExpressionSyntax? GetInnermostReceiver(ExpressionSyntax node)
565var right = GetInnermostReceiver(conditionalAccess.WhenNotNull);
ConvertAnonymousType\CSharpConvertAnonymousTypeToClassCodeRefactoringProvider.cs (1)
21ExpressionSyntax,
ConvertAnonymousType\CSharpConvertAnonymousTypeToTupleCodeRefactoringProvider.cs (1)
25ExpressionSyntax,
ConvertLinq\ConvertForEachToLinqQuery\AbstractConverter.cs (12)
37protected ExpressionSyntax CreateQueryExpressionOrLinqInvocation(
38ExpressionSyntax selectExpression,
55ExpressionSyntax selectExpression,
122private ExpressionSyntax CreateLinqInvocationOrSimpleExpression(
123ExpressionSyntax selectExpression,
141private ExpressionSyntax CreateLinqInvocationOrSimpleExpression(
143ExpressionSyntax receiverForInvocation,
146ExpressionSyntax selectExpression,
164var lambdaBody = CreateLinqInvocationForExtendedNode(selectExpression, ref currentExtendedNodeIndex, ref receiverForInvocation, ref hasForEachChild);
220private ExpressionSyntax CreateLinqInvocationForExtendedNode(
221ExpressionSyntax selectExpression,
223ref ExpressionSyntax receiver,
ConvertLinq\CSharpConvertLinqQueryToForEachProvider.cs (17)
126ExpressionSyntax expression1;
160ExpressionSyntax expression2;
256if (currentNode is ExpressionSyntax or
377Func<ExpressionSyntax, ExpressionSyntax, StatementSyntax> leafExpressionCreationMethod,
378ExpressionSyntax initializer,
391out var variable,
413ExpressionSyntax initializer,
415out ExpressionSyntax variable,
423ExpressionSyntax variableExpression,
424ExpressionSyntax expressionToVerifyType,
426out ExpressionSyntax variableLocal,
517ExpressionSyntax expression,
571static StatementSyntax internalNodeMethod(ExpressionSyntax expression)
659var lastSelectExpression = ((SelectClauseSyntax)queryExpressionProcessingInfo.Stack.Peek()).Expression;
789Func<ExpressionSyntax, StatementSyntax> leafExpressionCreationMethod,
904private bool IsLocalOrParameterSymbol(ExpressionSyntax expression)
ConvertToRawString\ConvertStringToRawStringCodeRefactoringProvider.cs (10)
50ExpressionSyntax expression,
79if (token.Parent is not ExpressionSyntax parentExpression)
129ExpressionSyntax expression,
138var replacement = provider.Convert(parsedDocument, expression, kind, options, cancellationToken);
156using var _ = PooledDictionary<ExpressionSyntax, IConvertStringProvider>.GetInstance(out var expressionToProvider);
161foreach (var expression in node.DepthFirstTraversalNodes().OfType<ExpressionSyntax>())
198if (expression.Ancestors().OfType<ExpressionSyntax>().Any(static (e, expressionToProvider) => expressionToProvider.ContainsKey(e), expressionToProvider))
205if (current is not ExpressionSyntax currentExpression)
210var replacement = provider.Convert(currentParsedDocument, currentExpression, kind, formattingOptions, cancellationToken);
ConvertToRawString\IConvertStringProvider.cs (7)
15ExpressionSyntax expression,
20ExpressionSyntax Convert(
22ExpressionSyntax expression,
29where TStringExpression : ExpressionSyntax
33public bool CanConvert(ParsedDocument document, ExpressionSyntax expression, SyntaxFormattingOptions formattingOptions, out CanConvertParams convertParams, CancellationToken cancellationToken)
41public ExpressionSyntax Convert(ParsedDocument document, ExpressionSyntax expression, ConvertToRawKind kind, SyntaxFormattingOptions formattingOptions, CancellationToken cancellationToken)
ConvertTupleToStruct\CSharpConvertTupleToStructCodeRefactoringProvider.cs (1)
18ExpressionSyntax,
GenerateType\CSharpGenerateTypeService.cs (19)
35AbstractGenerateTypeService<CSharpGenerateTypeService, SimpleNameSyntax, ObjectCreationExpressionSyntax, ExpressionSyntax, TypeDeclarationSyntax, ArgumentSyntax>
39protected override ExpressionSyntax GetLeftSideOfDot(SimpleNameSyntax simpleName)
42protected override bool IsInCatchDeclaration(ExpressionSyntax expression)
45protected override bool IsArrayElementType(ExpressionSyntax expression)
53ExpressionSyntax expression,
84protected override bool IsInInterfaceList(ExpressionSyntax expression)
112protected override bool TryGetNameParts(ExpressionSyntax expression, out IList<string> nameParts)
137ExpressionSyntax nameOrMemberAccessExpression = null;
144nameOrMemberAccessExpression = generateTypeServiceStateOptions.NameOrMemberAccessExpression = (ExpressionSyntax)simpleName.Parent;
148var leftSideExpression = simpleName.GetLeftSideOfDot();
314ExpressionSyntax outerMostMemberAccessExpression = null;
322outerMostMemberAccessExpression = (ExpressionSyntax)nameOrMemberAccessExpression.Parent;
325outerMostMemberAccessExpression = outerMostMemberAccessExpression.GetAncestorsOrThis<ExpressionSyntax>().SkipWhile(n => n != null && n.IsKind(SyntaxKind.SimpleMemberAccessExpression)).FirstOrDefault();
408foreach (var expression in initializer.Expressions)
421private static IMethodSymbol GetMethodSymbolIfPresent(SemanticModel semanticModel, ExpressionSyntax expression, CancellationToken cancellationToken)
505protected override bool IsInVariableTypeContext(ExpressionSyntax expression)
633internal override bool TryGetBaseList(ExpressionSyntax expression, out TypeKindOptions typeKindValue)
657internal override bool IsPublicOnlyAccessibility(ExpressionSyntax expression, Project project)
710internal override bool IsSimpleName(ExpressionSyntax expression)
InitializeParameter\CSharpInitializeMemberFromParameterCodeRefactoringProvider.cs (1)
23ExpressionSyntax>
IntroduceVariable\CSharpIntroduceVariableService_IntroduceLocal.cs (16)
32ExpressionSyntax expression,
51var updatedExpression = expression.WithoutTrivia();
112ExpressionSyntax expression,
118var oldBody = (ExpressionSyntax)oldLambda.Body;
121var rewrittenBody = Rewrite(
178ExpressionSyntax rewrittenBody,
228private static TypeSyntax GetTypeSyntax(SemanticDocument document, ExpressionSyntax expression, CancellationToken cancellationToken)
234ExpressionSyntax expression,
246var newExpression = Rewrite(document, expression, newLocalName, document, oldBody.Expression, allOccurrences, cancellationToken);
290ExpressionSyntax expression,
314var firstAffectedExpression = matches.OrderBy(m => m.SpanStart).First();
322foreach (var match in matches)
360ExpressionSyntax expression,
426private static IEnumerable<StatementSyntax> GetApplicableStatementAncestors(ExpressionSyntax expr)
439private static int GetFirstStatementAffectedIndex(SyntaxNode innermostCommonBlock, ISet<ExpressionSyntax> matches, int firstStatementAffectedIndex)
ReplaceConditionalWithStatements\CSharpReplaceConditionalWithStatementsCodeRefactoringProvider.cs (1)
20ExpressionSyntax,
ReverseForStatement\CSharpReverseForStatementCodeRefactoringProvider.cs (31)
60var after = forStatement.Incrementors[0];
66if (MatchesIncrementPattern(variable, condition, after, out var start, out var equals, out var end) ||
88ExpressionSyntax start, ExpressionSyntax end, CancellationToken cancellationToken)
111VariableDeclaratorSyntax variable, BinaryExpressionSyntax condition, ExpressionSyntax after,
112[NotNullWhen(true)] out ExpressionSyntax? start, out bool equals, [NotNullWhen(true)] out ExpressionSyntax? end)
122VariableDeclaratorSyntax variable, BinaryExpressionSyntax condition, ExpressionSyntax after,
123[NotNullWhen(true)] out ExpressionSyntax? end, [NotNullWhen(true)] out ExpressionSyntax? start)
131private static bool IsIncrementInitializer(VariableDeclaratorSyntax variable, [NotNullWhen(true)] out ExpressionSyntax? start)
139out bool equals, [NotNullWhen(true)] out ExpressionSyntax? end)
165VariableDeclaratorSyntax variable, ExpressionSyntax after)
195private static bool IsLiteralOne(ExpressionSyntax expression)
199VariableDeclaratorSyntax variable, [NotNullWhen(true)] out ExpressionSyntax? end)
207[NotNullWhen(true)] out ExpressionSyntax? start)
228VariableDeclaratorSyntax variable, ExpressionSyntax after)
258private static bool IsVariableReference(VariableDeclaratorSyntax variable, ExpressionSyntax expr)
267var after = forStatement.Incrementors[0];
275out var start, out var equals, out var end))
283var newStart = equals
285: (ExpressionSyntax)generator.SubtractExpression(end, generator.LiteralExpression(1));
306private static ExpressionSyntax Reduce(ExpressionSyntax expr)
312var reducedLeft = Reduce(outerBinary.Left);
313var reducedRight = Reduce(outerBinary.Right);
359VariableDeclaratorSyntax variable, BinaryExpressionSyntax condition, ExpressionSyntax operand)
377private static ExpressionSyntax InvertAfter(ExpressionSyntax after)
SignatureHelp\ElementAccessExpressionSignatureHelpProvider.cs (9)
43private static bool TryGetElementAccessExpression(SyntaxNode root, int position, ISyntaxFactsService syntaxFacts, SignatureHelpTriggerReason triggerReason, CancellationToken cancellationToken, [NotNullWhen(true)] out ExpressionSyntax? identifier, out SyntaxToken openBrace)
53if (!TryGetElementAccessExpression(root, position, document.GetRequiredLanguageService<ISyntaxFactsService>(), triggerInfo.TriggerReason, cancellationToken, out var expression, out var openBrace))
112private static TextSpan GetTextSpan(ExpressionSyntax expression, SyntaxToken openBracket)
141out var expression,
179SemanticModel semanticModel, ExpressionSyntax expression, CancellationToken cancellationToken,
195int position, SemanticModel semanticModel, ExpressionSyntax expression, CancellationToken cancellationToken,
299internal static bool TryGetSyntax(SyntaxNode root, int position, ISyntaxFactsService syntaxFacts, SignatureHelpTriggerReason triggerReason, CancellationToken cancellationToken, [NotNullWhen(true)] out ExpressionSyntax? identifier, out SyntaxToken openBrace)
340internal static bool TryGetSyntax(SyntaxNode root, int position, ISyntaxFactsService syntaxFacts, SignatureHelpTriggerReason triggerReason, CancellationToken cancellationToken, [NotNullWhen(true)] out ExpressionSyntax? identifier, out SyntaxToken openBrace)
377internal static bool TryGetSyntax(SyntaxNode root, int position, ISyntaxFactsService syntaxFacts, SignatureHelpTriggerReason triggerReason, CancellationToken cancellationToken, [NotNullWhen(true)] out ExpressionSyntax? identifier, out SyntaxToken openBrace)
src\Analyzers\CSharp\Analyzers\RemoveConfusingSuppression\CSharpRemoveConfusingSuppressionDiagnosticAnalyzer.cs (1)
31var left = node switch
src\Analyzers\CSharp\Analyzers\UseCoalesceExpression\CSharpUseCoalesceExpressionForNullableTernaryConditionalCheckDiagnosticAnalyzer.cs (1)
18ExpressionSyntax,
src\Analyzers\CSharp\Analyzers\UseCoalesceExpression\CSharpUseCoalesceExpressionForTernaryConditionalCheckDiagnosticAnalyzer.cs (1)
18ExpressionSyntax,
src\Analyzers\CSharp\Analyzers\UseObjectInitializer\CSharpUseNamedMemberInitializerAnalyzer.cs (1)
14ExpressionSyntax,
src\Analyzers\CSharp\Analyzers\UseObjectInitializer\CSharpUseObjectInitializerDiagnosticAnalyzer.cs (1)
18ExpressionSyntax,
src\Analyzers\CSharp\CodeFixes\GenerateParameterizedMember\CSharpGenerateConversionService.cs (5)
25AbstractGenerateConversionService<CSharpGenerateConversionService, SimpleNameSyntax, ExpressionSyntax, InvocationExpressionSyntax>
29return node is ExpressionSyntax &&
42SemanticDocument document, AbstractGenerateParameterizedMemberService<CSharpGenerateConversionService, SimpleNameSyntax, ExpressionSyntax, InvocationExpressionSyntax>.State state)
217protected override string GetImplicitConversionDisplayText(AbstractGenerateParameterizedMemberService<CSharpGenerateConversionService, SimpleNameSyntax, ExpressionSyntax, InvocationExpressionSyntax>.State state)
220protected override string GetExplicitConversionDisplayText(AbstractGenerateParameterizedMemberService<CSharpGenerateConversionService, SimpleNameSyntax, ExpressionSyntax, InvocationExpressionSyntax>.State state)
src\Analyzers\CSharp\CodeFixes\PopulateSwitch\CSharpPopulateSwitchExpressionCodeFixProvider.cs (1)
25ExpressionSyntax,
src\Analyzers\CSharp\CodeFixes\UseCollectionExpression\CSharpCollectionExpressionRewriter.cs (31)
41where TParentExpression : ExpressionSyntax
84if (preMatches is [{ Node: ExpressionSyntax } preMatch] && postMatches.IsEmpty)
88else if (preMatches.IsEmpty && postMatches is [{ Node: ExpressionSyntax } postMatch])
205var expression = (ExpressionSyntax)(object)match.Node;
446bool useSpread, ExpressionSyntax expression)
489foreach (var expression in expressions)
502var condition = IndentExpression(ifStatement, ifStatement.Condition, preferredIndentation).Parenthesize(includeElasticTrivia: false);
526else if (node is ExpressionSyntax expression)
536ExpressionSyntax IndentExpression(
538ExpressionSyntax expression,
551var updatedExpression = expression.ReplaceTokens(
647static ExpressionSyntax TransferParentStatementComments(
649ExpressionSyntax expression,
732foreach (var expression in initializer.Expressions)
787else if (node is ExpressionSyntax expression)
796static ExpressionSyntax ConvertExpression(
797ExpressionSyntax expression, Func<ExpressionSyntax, ExpressionSyntax>? indent)
803static ImmutableArray<ExpressionSyntax> ConvertExpressions(
804ExpressionSyntax expression, Func<ExpressionSyntax, ExpressionSyntax>? indent)
819static ImmutableArray<ExpressionSyntax> ConvertAssignment(
820AssignmentExpressionSyntax assignment, Func<ExpressionSyntax, ExpressionSyntax> indent)
825static ImmutableArray<ExpressionSyntax> ConvertInvocation(
826InvocationExpressionSyntax invocation, Func<ExpressionSyntax, ExpressionSyntax> indent)
838ParsedDocument document, TParentExpression expressionToReplace, SyntaxFormattingOptions formattingOptions) where TParentExpression : ExpressionSyntax
src\Analyzers\CSharp\CodeFixes\UseIndexOrRangeOperator\CSharpUseRangeOperatorCodeFixProvider.cs (19)
73var updatedNode = FixOne(result, generator);
84private static ExpressionSyntax FixOne(Result result, SyntaxGenerator generator)
111var expression = invocation.Expression is MemberAccessExpressionSyntax memberAccess
150(ExpressionSyntax? startExpr, bool startFromEnd, ExpressionSyntax? endExpr, bool endFromEnd) GetComputedRangeData()
160return (startExpr: null, startFromEnd: false, (ExpressionSyntax)subtraction.RightOperand.Syntax, endFromEnd: true);
165return (startExpr: null, startFromEnd: false, (ExpressionSyntax)result.InvocationOperation.Arguments[0].Value.Syntax, endFromEnd: false);
174return ((ExpressionSyntax)subtraction.RightOperand.Syntax, startFromEnd: true, endExpr: null, endFromEnd: false);
179return ((ExpressionSyntax)result.InvocationOperation.Arguments[1].Value.Syntax, startFromEnd: false, endExpr: null, endFromEnd: false);
195var startExpr = (ExpressionSyntax)startOperation.Syntax;
198ExpressionSyntax? endExpr = null;
210endExpr = (ExpressionSyntax)endOperation.Syntax;
226private static ExpressionSyntax? WalkUpCheckedExpressions(ExpressionSyntax? expr)
241return RangeExpression(leftOperand: null, WalkUpCheckedExpressions((ExpressionSyntax)result.Op1.Syntax));
246return RangeExpression(leftOperand: null, IndexExpression(WalkUpCheckedExpressions((ExpressionSyntax)result.Op1.Syntax)));
260constant1 == 0 ? null : WalkUpCheckedExpressions((ExpressionSyntax)result.Op1.Syntax),
261IndexExpression((ExpressionSyntax)generator.LiteralExpression(constant2 - constant1)));
src\Analyzers\CSharp\CodeFixes\UseNullPropagation\CSharpUseNullPropagationCodeFixProvider.cs (1)
22ExpressionSyntax,