private void DoTestAddInsertRemoveReplaceOnEmptyList(SyntaxNodeOrTokenList list) { Assert.Equal(0, list.Count); SyntaxNodeOrToken tokenD = SyntaxFactory.ParseToken("D "); SyntaxNodeOrToken nodeE = SyntaxFactory.ParseExpression("E "); var newList = list.Add(tokenD); Assert.Equal(1, newList.Count); Assert.Equal("D ", newList.ToFullString()); newList = list.AddRange(new[] { tokenD, nodeE }); Assert.Equal(2, newList.Count); Assert.Equal("D E ", newList.ToFullString()); newList = list.Insert(0, tokenD); Assert.Equal(1, newList.Count); Assert.Equal("D ", newList.ToFullString()); newList = list.InsertRange(0, new[] { tokenD, nodeE }); Assert.Equal(2, newList.Count); Assert.Equal("D E ", newList.ToFullString()); newList = list.Remove(tokenD); Assert.Equal(0, newList.Count); Assert.Equal(-1, list.IndexOf(tokenD)); Assert.Throws <ArgumentOutOfRangeException>(() => list.RemoveAt(0)); Assert.Throws <ArgumentOutOfRangeException>(() => list.Insert(1, tokenD)); Assert.Throws <ArgumentOutOfRangeException>(() => list.Insert(-1, tokenD)); Assert.Throws <ArgumentOutOfRangeException>(() => list.InsertRange(1, new[] { tokenD })); Assert.Throws <ArgumentOutOfRangeException>( () => list.InsertRange(-1, new[] { tokenD }) ); Assert.Throws <ArgumentOutOfRangeException>(() => list.Add(default(SyntaxNodeOrToken))); Assert.Throws <ArgumentOutOfRangeException>( () => list.Insert(0, default(SyntaxNodeOrToken)) ); Assert.Throws <ArgumentNullException>( () => list.AddRange((IEnumerable <SyntaxNodeOrToken>)null) ); Assert.Throws <ArgumentNullException>( () => list.InsertRange(0, (IEnumerable <SyntaxNodeOrToken>)null) ); }
public static TypeArgumentListSyntax AsList(params TypeSyntax[] types) { SyntaxNodeOrTokenList list = new SyntaxNodeOrTokenList(); var last = types.Length > 0 ? types.Last() : null; foreach (var type in types) { list = list.Add(type); if (!type.Equals(last)) { list = list.Add(Token.Comma); } } return SyntaxFactory.TypeArgumentList(SyntaxFactory.SeparatedList<TypeSyntax>(list)) .WithLessThanToken(Token.LessThan) .WithGreaterThanToken(Token.GreaterThan); }
public static ArgumentListSyntax AsList(params ArgumentSyntax[] arguments) { SyntaxNodeOrTokenList list = new SyntaxNodeOrTokenList(); var last = arguments.Length > 0 ? arguments.Last() : null; foreach (var argument in arguments) { list = list.Add(argument); if (!argument.Equals(last)) { list = list.Add(Token.Comma); } } return SyntaxFactory.ArgumentList(SyntaxFactory.SeparatedList<ArgumentSyntax>(list)) .WithOpenParenToken(Token.OpenParen) .WithCloseParenToken(Token.CloseParen); }
/** * start a new procedure/function */ private static MethodDeclarationSyntax StartFunction([NotNull] FunctionDeclaration functionDeclaration) { var method = SyntaxFactory.MethodDeclaration(GetTypeName(functionDeclaration.ReturnType), functionDeclaration.Name); if (!functionDeclaration.Block.Declarations.Any(x => x is ProcedureParameterDeclaration)) { return(method); } var list = new SyntaxNodeOrTokenList(); bool first = true; foreach (var declaration in functionDeclaration.Block.Declarations.OfType <ProcedureParameterDeclaration>()) { if (!first) { list = list.Add(SyntaxFactory.Token(SyntaxKind.CommaToken)); } first = false; var param = SyntaxFactory.Parameter(MapIdentifier(declaration.Name)) .WithType(AddTypeSyntaxSpecification(declaration)); if (declaration.IsVar) { param = param.WithModifiers(SyntaxFactory.TokenList( SyntaxFactory.Token(SyntaxKind.RefKeyword))); } list = list.Add(param); } if (list.Any()) { method = method.WithParameterList(SyntaxFactory.ParameterList( SyntaxFactory.SeparatedList <ParameterSyntax>(list))); } return(method); }
private static async Task <Document> SortEnumMembersAsync( Document document, EnumDeclarationSyntax enumDeclaration, CancellationToken cancellationToken) { SemanticModel semanticModel = await document.GetSemanticModelAsync(cancellationToken).ConfigureAwait(false); SpecialType enumSpecialType = semanticModel.GetDeclaredSymbol(enumDeclaration).EnumUnderlyingType.SpecialType; SeparatedSyntaxList <EnumMemberDeclarationSyntax> members = enumDeclaration.Members; SeparatedSyntaxList <EnumMemberDeclarationSyntax> newMembers = members .OrderBy(f => GetConstantValue(f, semanticModel, cancellationToken), EnumValueComparer.GetInstance(enumSpecialType)) .ToSeparatedSyntaxList(); if (AreSeparatedWithEmptyLine(members)) { for (int i = 0; i < newMembers.Count; i++) { newMembers = newMembers.ReplaceAt(i, newMembers[i].TrimLeadingTrivia()); } for (int i = 0; i < newMembers.Count - 1; i++) { SyntaxToken separator = newMembers.GetSeparator(i); newMembers = newMembers.ReplaceSeparator( separator, separator.TrimTrailingTrivia().AppendToTrailingTrivia(new SyntaxTrivia[] { NewLine(), NewLine() })); } } if (newMembers.SeparatorCount == members.SeparatorCount - 1) { SyntaxNodeOrTokenList newMembersWithSeparators = newMembers.GetWithSeparators(); newMembersWithSeparators = newMembersWithSeparators.Add(CommaToken()); newMembers = newMembersWithSeparators.ToSeparatedSyntaxList <EnumMemberDeclarationSyntax>(); } MemberDeclarationSyntax newNode = enumDeclaration .WithMembers(newMembers) .WithFormatterAnnotation(); return(await document.ReplaceNodeAsync(enumDeclaration, newNode, cancellationToken).ConfigureAwait(false)); }
private void DoTestAddInsertRemoveReplaceOnEmptyList(SyntaxNodeOrTokenList list) { Assert.Equal(0, list.Count); SyntaxNodeOrToken tokenD = SyntaxFactory.ParseToken("D "); SyntaxNodeOrToken nodeE = SyntaxFactory.ParseExpression("E "); var newList = list.Add(tokenD); Assert.Equal(1, newList.Count); Assert.Equal("D ", newList.ToFullString()); newList = list.AddRange(new[] { tokenD, nodeE }); Assert.Equal(2, newList.Count); Assert.Equal("D E ", newList.ToFullString()); newList = list.Insert(0, tokenD); Assert.Equal(1, newList.Count); Assert.Equal("D ", newList.ToFullString()); newList = list.InsertRange(0, new[] { tokenD, nodeE }); Assert.Equal(2, newList.Count); Assert.Equal("D E ", newList.ToFullString()); newList = list.Remove(tokenD); Assert.Equal(0, newList.Count); Assert.Equal(-1, list.IndexOf(tokenD)); Assert.Throws<ArgumentOutOfRangeException>(() => list.RemoveAt(0)); Assert.Throws<ArgumentOutOfRangeException>(() => list.Insert(1, tokenD)); Assert.Throws<ArgumentOutOfRangeException>(() => list.Insert(-1, tokenD)); Assert.Throws<ArgumentOutOfRangeException>(() => list.InsertRange(1, new[] { tokenD })); Assert.Throws<ArgumentOutOfRangeException>(() => list.InsertRange(-1, new[] { tokenD })); Assert.Throws<ArgumentException>(() => list.Add(default(SyntaxNodeOrToken))); Assert.Throws<ArgumentException>(() => list.Insert(0, default(SyntaxNodeOrToken))); Assert.Throws<ArgumentNullException>(() => list.AddRange((IEnumerable<SyntaxNodeOrToken>)null)); Assert.Throws<ArgumentNullException>(() => list.InsertRange(0, (IEnumerable<SyntaxNodeOrToken>)null)); }