Skip to content

Commit 26858c3

Browse files
authored
Merge pull request #2370 from sharwell/lightup
Support C# 7 via light-up
2 parents 5b9ca04 + 1147f65 commit 26858c3

77 files changed

Lines changed: 5733 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

StyleCop.Analyzers/StyleCop.Analyzers.CodeFixes/Properties/AssemblyInfo.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,5 @@
4040
[assembly: AssemblyInformationalVersion("1.1.0-dev")]
4141

4242
[assembly: InternalsVisibleTo("StyleCop.Analyzers.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c36d40d996fcc95fb6a89754728616758f459026e31478ce93633b3e27a4af416f103aa3d7a9e7998f829f8715cc1240d30724fd662042550fa71357b19562622424267e9e4640c403edbe64709a9ca5918128a9b9020b0db6e770d0dd1eac888869c23a835b74bde00e171984b1d1c24636cf030f0b23106e73035a2be145a6")]
43+
[assembly: InternalsVisibleTo("StyleCop.Analyzers.Test.CSharp7, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c36d40d996fcc95fb6a89754728616758f459026e31478ce93633b3e27a4af416f103aa3d7a9e7998f829f8715cc1240d30724fd662042550fa71357b19562622424267e9e4640c403edbe64709a9ca5918128a9b9020b0db6e770d0dd1eac888869c23a835b74bde00e171984b1d1c24636cf030f0b23106e73035a2be145a6")]
4344
[assembly: InternalsVisibleTo("StyleCopTester, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c36d40d996fcc95fb6a89754728616758f459026e31478ce93633b3e27a4af416f103aa3d7a9e7998f829f8715cc1240d30724fd662042550fa71357b19562622424267e9e4640c403edbe64709a9ca5918128a9b9020b0db6e770d0dd1eac888869c23a835b74bde00e171984b1d1c24636cf030f0b23106e73035a2be145a6")]
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// Copyright (c) Tunnel Vision Laboratories, LLC. All Rights Reserved.
2+
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
3+
4+
namespace StyleCop.Analyzers.Test.CSharp7.Lightup
5+
{
6+
using Microsoft.CodeAnalysis.CSharp;
7+
using StyleCop.Analyzers.Lightup;
8+
using Xunit;
9+
10+
public class AccessorDeclarationSyntaxExtensionsTests
11+
{
12+
[Fact]
13+
public void TestExpressionBody()
14+
{
15+
var accessorDeclarationSyntax = SyntaxFactory.AccessorDeclaration(SyntaxKind.GetAccessorDeclaration)
16+
.WithExpressionBody(SyntaxFactory.ArrowExpressionClause(SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression)));
17+
Assert.Same(accessorDeclarationSyntax.ExpressionBody, AccessorDeclarationSyntaxExtensions.ExpressionBody(accessorDeclarationSyntax));
18+
}
19+
20+
[Fact]
21+
public void TestWithExpressionBody()
22+
{
23+
var accessorDeclarationSyntax = SyntaxFactory.AccessorDeclaration(SyntaxKind.GetAccessorDeclaration);
24+
var expressionBody = SyntaxFactory.ArrowExpressionClause(SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression));
25+
var accessorWithBody = AccessorDeclarationSyntaxExtensions.WithExpressionBody(accessorDeclarationSyntax, expressionBody);
26+
Assert.Null(accessorDeclarationSyntax.ExpressionBody);
27+
Assert.NotNull(accessorWithBody.ExpressionBody);
28+
Assert.Equal(SyntaxKind.NullLiteralExpression, accessorWithBody.ExpressionBody.Expression.Kind());
29+
}
30+
}
31+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Copyright (c) Tunnel Vision Laboratories, LLC. All Rights Reserved.
2+
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
3+
4+
namespace StyleCop.Analyzers.Test.CSharp7.Lightup
5+
{
6+
using Microsoft.CodeAnalysis.CSharp;
7+
using StyleCop.Analyzers.Lightup;
8+
using Xunit;
9+
10+
public class BaseMethodDeclarationSyntaxExtensionsTests
11+
{
12+
[Fact]
13+
public void TestExpressionBody()
14+
{
15+
var syntax = SyntaxFactory.ConstructorDeclaration(SyntaxFactory.Identifier("Anything"))
16+
.WithExpressionBody(SyntaxFactory.ArrowExpressionClause(SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression)));
17+
Assert.Same(syntax.ExpressionBody, BaseMethodDeclarationSyntaxExtensions.ExpressionBody(syntax));
18+
}
19+
}
20+
}
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
// Copyright (c) Tunnel Vision Laboratories, LLC. All Rights Reserved.
2+
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
3+
4+
namespace StyleCop.Analyzers.Test.CSharp7.Lightup
5+
{
6+
using System;
7+
using Microsoft.CodeAnalysis;
8+
using Microsoft.CodeAnalysis.CSharp;
9+
using StyleCop.Analyzers.Helpers;
10+
using StyleCop.Analyzers.Lightup;
11+
using Xunit;
12+
13+
public class ConstantPatternSyntaxWrapperTests
14+
{
15+
[Fact]
16+
public void TestNull()
17+
{
18+
var syntaxNode = default(SyntaxNode);
19+
var constantPatternSyntax = (ConstantPatternSyntaxWrapper)syntaxNode;
20+
Assert.Null(constantPatternSyntax.SyntaxNode);
21+
Assert.Throws<NullReferenceException>(() => constantPatternSyntax.Expression);
22+
Assert.Throws<NullReferenceException>(() => constantPatternSyntax.WithExpression(SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression)));
23+
}
24+
25+
[Fact]
26+
public void TestExpression()
27+
{
28+
var syntaxNode = SyntaxFactory.ConstantPattern(SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression));
29+
Assert.True(syntaxNode.IsKind(SyntaxKind.ConstantPattern));
30+
Assert.True(syntaxNode.IsKind(SyntaxKindEx.ConstantPattern));
31+
32+
var constantPatternSyntax = (ConstantPatternSyntaxWrapper)syntaxNode;
33+
Assert.Same(syntaxNode, constantPatternSyntax.SyntaxNode);
34+
Assert.Same(syntaxNode.Expression, constantPatternSyntax.Expression);
35+
36+
constantPatternSyntax = constantPatternSyntax.WithExpression(SyntaxFactory.LiteralExpression(SyntaxKind.NumericLiteralExpression, SyntaxFactory.Literal(1)));
37+
Assert.NotNull(constantPatternSyntax.SyntaxNode);
38+
Assert.NotSame(syntaxNode, constantPatternSyntax.SyntaxNode);
39+
Assert.Equal(SyntaxKind.NumericLiteralExpression, constantPatternSyntax.Expression.Kind());
40+
}
41+
42+
[Fact]
43+
public void TestIsInstance()
44+
{
45+
Assert.False(ConstantPatternSyntaxWrapper.IsInstance(null));
46+
Assert.False(ConstantPatternSyntaxWrapper.IsInstance(SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression)));
47+
48+
var syntaxNode = SyntaxFactory.ConstantPattern(SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression));
49+
Assert.True(ConstantPatternSyntaxWrapper.IsInstance(syntaxNode));
50+
}
51+
52+
[Fact]
53+
public void TestConversionsNull()
54+
{
55+
var syntaxNode = default(SyntaxNode);
56+
var constantPatternSyntax = (ConstantPatternSyntaxWrapper)syntaxNode;
57+
58+
PatternSyntaxWrapper patternSyntax = constantPatternSyntax;
59+
Assert.Null(patternSyntax.SyntaxNode);
60+
61+
constantPatternSyntax = (ConstantPatternSyntaxWrapper)patternSyntax;
62+
Assert.Null(constantPatternSyntax.SyntaxNode);
63+
64+
SyntaxNode syntax = constantPatternSyntax;
65+
Assert.Null(syntax);
66+
}
67+
68+
[Fact]
69+
public void TestConversions()
70+
{
71+
var syntaxNode = SyntaxFactory.ConstantPattern(SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression));
72+
var constantPatternSyntax = (ConstantPatternSyntaxWrapper)syntaxNode;
73+
74+
PatternSyntaxWrapper patternSyntax = constantPatternSyntax;
75+
Assert.Same(syntaxNode, patternSyntax.SyntaxNode);
76+
77+
constantPatternSyntax = (ConstantPatternSyntaxWrapper)patternSyntax;
78+
Assert.Same(syntaxNode, constantPatternSyntax.SyntaxNode);
79+
80+
SyntaxNode syntax = constantPatternSyntax;
81+
Assert.Same(syntaxNode, syntax);
82+
}
83+
84+
[Fact]
85+
public void TestInvalidConversion()
86+
{
87+
var syntaxNode = SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression);
88+
Assert.Throws<InvalidCastException>(() => (ConstantPatternSyntaxWrapper)syntaxNode);
89+
}
90+
}
91+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// Copyright (c) Tunnel Vision Laboratories, LLC. All Rights Reserved.
2+
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
3+
4+
namespace StyleCop.Analyzers.Test.CSharp7.Lightup
5+
{
6+
using Microsoft.CodeAnalysis.CSharp;
7+
using StyleCop.Analyzers.Lightup;
8+
using Xunit;
9+
10+
public class ConstructorDeclarationSyntaxExtensionsTests
11+
{
12+
[Fact]
13+
public void TestWithExpressionBody()
14+
{
15+
var syntax = SyntaxFactory.ConstructorDeclaration(SyntaxFactory.Identifier("Anything"));
16+
var expressionBody = SyntaxFactory.ArrowExpressionClause(SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression));
17+
var syntaxWithBody = ConstructorDeclarationSyntaxExtensions.WithExpressionBody(syntax, expressionBody);
18+
Assert.Null(syntax.ExpressionBody);
19+
Assert.NotNull(syntaxWithBody.ExpressionBody);
20+
Assert.Equal(SyntaxKind.NullLiteralExpression, syntaxWithBody.ExpressionBody.Expression.Kind());
21+
}
22+
}
23+
}
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
// Copyright (c) Tunnel Vision Laboratories, LLC. All Rights Reserved.
2+
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
3+
4+
namespace StyleCop.Analyzers.Test.CSharp7.Lightup
5+
{
6+
using System;
7+
using Microsoft.CodeAnalysis;
8+
using Microsoft.CodeAnalysis.CSharp;
9+
using Microsoft.CodeAnalysis.CSharp.Syntax;
10+
using StyleCop.Analyzers.Helpers;
11+
using StyleCop.Analyzers.Lightup;
12+
using Xunit;
13+
14+
public class DeclarationPatternSyntaxWrapperTests
15+
{
16+
[Fact]
17+
public void TestNull()
18+
{
19+
var syntaxNode = default(SyntaxNode);
20+
var declarationPatternSyntax = (DeclarationPatternSyntaxWrapper)syntaxNode;
21+
Assert.Null(declarationPatternSyntax.SyntaxNode);
22+
Assert.Throws<NullReferenceException>(() => declarationPatternSyntax.Type);
23+
Assert.Throws<NullReferenceException>(() => declarationPatternSyntax.Designation);
24+
Assert.Throws<NullReferenceException>(() => declarationPatternSyntax.WithType(SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.IntKeyword))));
25+
Assert.Throws<NullReferenceException>(() => declarationPatternSyntax.WithDesignation((VariableDesignationSyntaxWrapper)SyntaxFactory.DiscardDesignation()));
26+
}
27+
28+
[Fact]
29+
public void TestProperties()
30+
{
31+
var syntaxNode = SyntaxFactory.DeclarationPattern(
32+
SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.IntKeyword)),
33+
SyntaxFactory.DiscardDesignation());
34+
Assert.True(syntaxNode.IsKind(SyntaxKind.DeclarationPattern));
35+
Assert.True(syntaxNode.IsKind(SyntaxKindEx.DeclarationPattern));
36+
37+
var declarationPatternSyntax = (DeclarationPatternSyntaxWrapper)syntaxNode;
38+
Assert.Same(syntaxNode, declarationPatternSyntax.SyntaxNode);
39+
Assert.Same(syntaxNode.Type, declarationPatternSyntax.Type);
40+
Assert.Same(syntaxNode.Designation, declarationPatternSyntax.Designation.SyntaxNode);
41+
42+
declarationPatternSyntax = declarationPatternSyntax.WithType(SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.IntKeyword)));
43+
Assert.NotNull(declarationPatternSyntax.SyntaxNode);
44+
Assert.NotSame(syntaxNode, declarationPatternSyntax.SyntaxNode);
45+
Assert.Same(((DeclarationPatternSyntax)declarationPatternSyntax.SyntaxNode).Type, declarationPatternSyntax.Type);
46+
47+
declarationPatternSyntax = declarationPatternSyntax.WithDesignation((VariableDesignationSyntaxWrapper)SyntaxFactory.SingleVariableDesignation(SyntaxFactory.Identifier("Anything")));
48+
Assert.NotNull(declarationPatternSyntax.SyntaxNode);
49+
Assert.NotSame(syntaxNode, declarationPatternSyntax.SyntaxNode);
50+
Assert.Same(((DeclarationPatternSyntax)declarationPatternSyntax.SyntaxNode).Designation, declarationPatternSyntax.Designation.SyntaxNode);
51+
}
52+
53+
[Fact]
54+
public void TestIsInstance()
55+
{
56+
Assert.False(DeclarationPatternSyntaxWrapper.IsInstance(null));
57+
Assert.False(DeclarationPatternSyntaxWrapper.IsInstance(SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression)));
58+
59+
var syntaxNode = SyntaxFactory.DeclarationPattern(
60+
SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.IntKeyword)),
61+
SyntaxFactory.DiscardDesignation());
62+
Assert.True(DeclarationPatternSyntaxWrapper.IsInstance(syntaxNode));
63+
}
64+
65+
[Fact]
66+
public void TestConversionsNull()
67+
{
68+
var syntaxNode = default(SyntaxNode);
69+
var declarationPatternSyntax = (DeclarationPatternSyntaxWrapper)syntaxNode;
70+
71+
PatternSyntaxWrapper patternSyntax = declarationPatternSyntax;
72+
Assert.Null(patternSyntax.SyntaxNode);
73+
74+
declarationPatternSyntax = (DeclarationPatternSyntaxWrapper)patternSyntax;
75+
Assert.Null(declarationPatternSyntax.SyntaxNode);
76+
77+
SyntaxNode syntax = declarationPatternSyntax;
78+
Assert.Null(syntax);
79+
}
80+
81+
[Fact]
82+
public void TestConversions()
83+
{
84+
var syntaxNode = SyntaxFactory.DeclarationPattern(
85+
SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.IntKeyword)),
86+
SyntaxFactory.DiscardDesignation());
87+
var declarationPatternSyntax = (DeclarationPatternSyntaxWrapper)syntaxNode;
88+
89+
PatternSyntaxWrapper patternSyntax = declarationPatternSyntax;
90+
Assert.Same(syntaxNode, patternSyntax.SyntaxNode);
91+
92+
declarationPatternSyntax = (DeclarationPatternSyntaxWrapper)patternSyntax;
93+
Assert.Same(syntaxNode, declarationPatternSyntax.SyntaxNode);
94+
95+
SyntaxNode syntax = declarationPatternSyntax;
96+
Assert.Same(syntaxNode, syntax);
97+
}
98+
99+
[Fact]
100+
public void TestInvalidConversion()
101+
{
102+
var syntaxNode = SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression);
103+
Assert.Throws<InvalidCastException>(() => (DeclarationPatternSyntaxWrapper)syntaxNode);
104+
}
105+
}
106+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// Copyright (c) Tunnel Vision Laboratories, LLC. All Rights Reserved.
2+
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
3+
4+
namespace StyleCop.Analyzers.Test.CSharp7.Lightup
5+
{
6+
using Microsoft.CodeAnalysis.CSharp;
7+
using StyleCop.Analyzers.Lightup;
8+
using Xunit;
9+
10+
public class DestructorDeclarationSyntaxExtensionsTests
11+
{
12+
[Fact]
13+
public void TestWithExpressionBody()
14+
{
15+
var syntax = SyntaxFactory.DestructorDeclaration(SyntaxFactory.Identifier("Anything"));
16+
var expressionBody = SyntaxFactory.ArrowExpressionClause(SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression));
17+
var syntaxWithBody = DestructorDeclarationSyntaxExtensions.WithExpressionBody(syntax, expressionBody);
18+
Assert.Null(syntax.ExpressionBody);
19+
Assert.NotNull(syntaxWithBody.ExpressionBody);
20+
Assert.Equal(SyntaxKind.NullLiteralExpression, syntaxWithBody.ExpressionBody.Expression.Kind());
21+
}
22+
}
23+
}
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
// Copyright (c) Tunnel Vision Laboratories, LLC. All Rights Reserved.
2+
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
3+
4+
namespace StyleCop.Analyzers.Test.CSharp7.Lightup
5+
{
6+
using System;
7+
using Microsoft.CodeAnalysis;
8+
using Microsoft.CodeAnalysis.CSharp;
9+
using StyleCop.Analyzers.Helpers;
10+
using StyleCop.Analyzers.Lightup;
11+
using Xunit;
12+
13+
public class DiscardDesignationSyntaxWrapperTests
14+
{
15+
[Fact]
16+
public void TestNull()
17+
{
18+
var syntaxNode = default(SyntaxNode);
19+
var discardDesignationSyntax = (DiscardDesignationSyntaxWrapper)syntaxNode;
20+
Assert.Null(discardDesignationSyntax.SyntaxNode);
21+
Assert.Throws<NullReferenceException>(() => discardDesignationSyntax.UnderscoreToken);
22+
Assert.Throws<NullReferenceException>(() => discardDesignationSyntax.WithUnderscoreToken(SyntaxFactory.Token(SyntaxKind.UnderscoreToken)));
23+
}
24+
25+
[Fact]
26+
public void TestUnderscoreToken()
27+
{
28+
var syntaxNode = SyntaxFactory.DiscardDesignation();
29+
Assert.True(syntaxNode.IsKind(SyntaxKind.DiscardDesignation));
30+
Assert.True(syntaxNode.IsKind(SyntaxKindEx.DiscardDesignation));
31+
32+
var discardDesignationSyntax = (DiscardDesignationSyntaxWrapper)syntaxNode;
33+
Assert.Same(syntaxNode, discardDesignationSyntax.SyntaxNode);
34+
Assert.Equal(syntaxNode.UnderscoreToken, discardDesignationSyntax.UnderscoreToken);
35+
36+
discardDesignationSyntax = discardDesignationSyntax.WithUnderscoreToken(SpacingExtensions.WithoutTrivia(SyntaxFactory.Token(SyntaxKind.UnderscoreToken)));
37+
Assert.NotNull(discardDesignationSyntax.SyntaxNode);
38+
Assert.NotSame(syntaxNode, discardDesignationSyntax.SyntaxNode);
39+
Assert.False(syntaxNode.UnderscoreToken.IsEquivalentTo(discardDesignationSyntax.UnderscoreToken));
40+
}
41+
42+
[Fact]
43+
public void TestIsInstance()
44+
{
45+
Assert.False(DiscardDesignationSyntaxWrapper.IsInstance(null));
46+
Assert.False(DiscardDesignationSyntaxWrapper.IsInstance(SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression)));
47+
48+
var syntaxNode = SyntaxFactory.DiscardDesignation();
49+
Assert.True(DiscardDesignationSyntaxWrapper.IsInstance(syntaxNode));
50+
}
51+
52+
[Fact]
53+
public void TestConversionsNull()
54+
{
55+
var syntaxNode = default(SyntaxNode);
56+
var discardDesignationSyntax = (DiscardDesignationSyntaxWrapper)syntaxNode;
57+
58+
VariableDesignationSyntaxWrapper variableDesignationSyntax = discardDesignationSyntax;
59+
Assert.Null(variableDesignationSyntax.SyntaxNode);
60+
61+
discardDesignationSyntax = (DiscardDesignationSyntaxWrapper)variableDesignationSyntax;
62+
Assert.Null(discardDesignationSyntax.SyntaxNode);
63+
64+
SyntaxNode syntax = discardDesignationSyntax;
65+
Assert.Null(syntax);
66+
}
67+
68+
[Fact]
69+
public void TestConversions()
70+
{
71+
var syntaxNode = SyntaxFactory.DiscardDesignation();
72+
var discardDesignationSyntax = (DiscardDesignationSyntaxWrapper)syntaxNode;
73+
74+
VariableDesignationSyntaxWrapper variableDesignationSyntax = discardDesignationSyntax;
75+
Assert.Same(syntaxNode, variableDesignationSyntax.SyntaxNode);
76+
77+
discardDesignationSyntax = (DiscardDesignationSyntaxWrapper)variableDesignationSyntax;
78+
Assert.Same(syntaxNode, discardDesignationSyntax.SyntaxNode);
79+
80+
SyntaxNode syntax = discardDesignationSyntax;
81+
Assert.Same(syntaxNode, syntax);
82+
}
83+
84+
[Fact]
85+
public void TestInvalidConversion()
86+
{
87+
var syntaxNode = SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression);
88+
Assert.Throws<InvalidCastException>(() => (DiscardDesignationSyntaxWrapper)syntaxNode);
89+
}
90+
}
91+
}

0 commit comments

Comments
 (0)