@@ -79,7 +79,9 @@ private SyntaxList<StatementSyntax> InsertRequiredDeclarations(
7979 SyntaxList < StatementSyntax > convertedStatements , CSharpSyntaxNode originaNode )
8080 {
8181 var descendantNodes = originaNode . DescendantNodes ( ) . ToList ( ) ;
82- var declarationExpressions = descendantNodes . OfType < DeclarationExpressionSyntax > ( ) . ToList ( ) ;
82+ var declarationExpressions = descendantNodes . OfType < DeclarationExpressionSyntax > ( )
83+ . Where ( e => ! e . Parent . IsKind ( CSSyntaxKind . ForEachVariableStatement ) ) //Handled inline for tuple loop
84+ . ToList ( ) ;
8385 var isPatternExpressions = descendantNodes . OfType < IsPatternExpressionSyntax > ( ) . ToList ( ) ;
8486 if ( declarationExpressions . Any ( ) || isPatternExpressions . Any ( ) ) {
8587 convertedStatements = convertedStatements . Insert ( 0 , ConvertToDeclarationStatement ( declarationExpressions , isPatternExpressions ) ) ;
@@ -91,9 +93,16 @@ private SyntaxList<StatementSyntax> InsertRequiredDeclarations(
9193 private StatementSyntax ConvertToDeclarationStatement ( List < DeclarationExpressionSyntax > des ,
9294 List < IsPatternExpressionSyntax > isPatternExpressions )
9395 {
94- var declarators = SyntaxFactory . SeparatedList ( des . Select ( ConvertToVariableDeclarator )
95- . Concat ( isPatternExpressions . Select ( ConvertToVariableDeclarator ) ) ) ;
96- return SyntaxFactory . LocalDeclarationStatement ( SyntaxFactory . TokenList ( SyntaxFactory . Token ( SyntaxKind . DimKeyword ) ) , declarators ) ;
96+ IEnumerable < VariableDeclaratorSyntax > variableDeclaratorSyntaxs = des . Select ( ConvertToVariableDeclarator )
97+ . Concat ( isPatternExpressions . Select ( ConvertToVariableDeclarator ) ) ;
98+ return CreateLocalDeclarationStatement ( variableDeclaratorSyntaxs . ToArray ( ) ) ;
99+ }
100+
101+ public static StatementSyntax CreateLocalDeclarationStatement ( params VariableDeclaratorSyntax [ ] variableDeclarators )
102+ {
103+ var syntaxTokenList = SyntaxFactory . TokenList ( SyntaxFactory . Token ( SyntaxKind . DimKeyword ) ) ;
104+ var declarators = SyntaxFactory . SeparatedList ( variableDeclarators ) ;
105+ return SyntaxFactory . LocalDeclarationStatement ( syntaxTokenList , declarators ) ;
97106 }
98107
99108 private VariableDeclaratorSyntax ConvertToVariableDeclarator ( DeclarationExpressionSyntax des )
@@ -149,28 +158,28 @@ public AccessorBlockSyntax ConvertAccessor(AccessorDeclarationSyntax node, out b
149158 Microsoft . CodeAnalysis . VisualBasic . Syntax . ParameterSyntax valueParam ;
150159
151160 switch ( CSharpExtensions . Kind ( node ) ) {
152- case Microsoft . CodeAnalysis . CSharp . SyntaxKind . GetAccessorDeclaration :
161+ case CSSyntaxKind . GetAccessorDeclaration :
153162 blockKind = SyntaxKind . GetAccessorBlock ;
154163 stmt = SyntaxFactory . GetAccessorStatement ( attributes , modifiers , null ) ;
155164 endStmt = SyntaxFactory . EndGetStatement ( ) ;
156165 break ;
157- case Microsoft . CodeAnalysis . CSharp . SyntaxKind . SetAccessorDeclaration :
166+ case CSSyntaxKind . SetAccessorDeclaration :
158167 blockKind = SyntaxKind . SetAccessorBlock ;
159168 valueParam = SyntaxFactory . Parameter ( SyntaxFactory . ModifiedIdentifier ( "value" ) )
160169 . WithAsClause ( SyntaxFactory . SimpleAsClause ( ( TypeSyntax ) parent . Type . Accept ( _nodesVisitor ) ) )
161170 . WithModifiers ( SyntaxFactory . TokenList ( SyntaxFactory . Token ( SyntaxKind . ByValKeyword ) ) ) ;
162171 stmt = SyntaxFactory . SetAccessorStatement ( attributes , modifiers , SyntaxFactory . ParameterList ( SyntaxFactory . SingletonSeparatedList ( valueParam ) ) ) ;
163172 endStmt = SyntaxFactory . EndSetStatement ( ) ;
164173 break ;
165- case Microsoft . CodeAnalysis . CSharp . SyntaxKind . AddAccessorDeclaration :
174+ case CSSyntaxKind . AddAccessorDeclaration :
166175 blockKind = SyntaxKind . AddHandlerAccessorBlock ;
167176 valueParam = SyntaxFactory . Parameter ( SyntaxFactory . ModifiedIdentifier ( "value" ) )
168177 . WithAsClause ( SyntaxFactory . SimpleAsClause ( ( TypeSyntax ) parent . Type . Accept ( _nodesVisitor ) ) )
169178 . WithModifiers ( SyntaxFactory . TokenList ( SyntaxFactory . Token ( SyntaxKind . ByValKeyword ) ) ) ;
170179 stmt = SyntaxFactory . AddHandlerAccessorStatement ( attributes , modifiers , SyntaxFactory . ParameterList ( SyntaxFactory . SingletonSeparatedList ( valueParam ) ) ) ;
171180 endStmt = SyntaxFactory . EndAddHandlerStatement ( ) ;
172181 break ;
173- case Microsoft . CodeAnalysis . CSharp . SyntaxKind . RemoveAccessorDeclaration :
182+ case CSSyntaxKind . RemoveAccessorDeclaration :
174183 blockKind = SyntaxKind . RemoveHandlerAccessorBlock ;
175184 valueParam = SyntaxFactory . Parameter ( SyntaxFactory . ModifiedIdentifier ( "value" ) )
176185 . WithAsClause ( SyntaxFactory . SimpleAsClause ( ( TypeSyntax ) parent . Type . Accept ( _nodesVisitor ) ) )
@@ -219,7 +228,7 @@ public LambdaExpressionSyntax ConvertLambdaExpression(AnonymousFunctionExpressio
219228 if ( body is BlockSyntax block ) {
220229 statements = ConvertStatements ( block . Statements ) ;
221230
222- } else if ( body . Kind ( ) == Microsoft . CodeAnalysis . CSharp . SyntaxKind . ThrowExpression ) {
231+ } else if ( body . Kind ( ) == CSSyntaxKind . ThrowExpression ) {
223232 var csThrowExpression = ( ThrowExpressionSyntax ) body ;
224233 var vbThrowExpression = ( ExpressionSyntax ) csThrowExpression . Expression . Accept ( _nodesVisitor ) ;
225234 var vbThrowStatement = SyntaxFactory . ThrowStatement ( SyntaxFactory . Token ( SyntaxKind . ThrowKeyword ) , vbThrowExpression ) ;
@@ -266,7 +275,7 @@ public void ConvertBaseList(BaseTypeDeclarationSyntax type, List<InheritsStateme
266275 {
267276 TypeSyntax [ ] arr ;
268277 switch ( type . Kind ( ) ) {
269- case Microsoft . CodeAnalysis . CSharp . SyntaxKind . ClassDeclaration :
278+ case CSSyntaxKind . ClassDeclaration :
270279 var classOrInterface = type . BaseList ? . Types . FirstOrDefault ( ) ? . Type ;
271280 if ( classOrInterface == null ) return ;
272281 var classOrInterfaceSymbol = ModelExtensions . GetSymbolInfo ( _semanticModel , classOrInterface ) . Symbol ;
@@ -281,12 +290,12 @@ public void ConvertBaseList(BaseTypeDeclarationSyntax type, List<InheritsStateme
281290 implements . Add ( SyntaxFactory . ImplementsStatement ( arr ) ) ;
282291 }
283292 break ;
284- case Microsoft . CodeAnalysis . CSharp . SyntaxKind . StructDeclaration :
293+ case CSSyntaxKind . StructDeclaration :
285294 arr = type . BaseList ? . Types . Select ( t => ( TypeSyntax ) t . Type . Accept ( _nodesVisitor ) ) . ToArray ( ) ;
286295 if ( arr ? . Length > 0 )
287296 implements . Add ( SyntaxFactory . ImplementsStatement ( arr ) ) ;
288297 break ;
289- case Microsoft . CodeAnalysis . CSharp . SyntaxKind . InterfaceDeclaration :
298+ case CSSyntaxKind . InterfaceDeclaration :
290299 arr = type . BaseList ? . Types . Select ( t => ( TypeSyntax ) t . Type . Accept ( _nodesVisitor ) ) . ToArray ( ) ;
291300 if ( arr ? . Length > 0 )
292301 inherits . Add ( SyntaxFactory . InheritsStatement ( arr ) ) ;
@@ -320,7 +329,7 @@ private static bool IgnoreInContext(SyntaxToken m, TokenContext context)
320329 switch ( context ) {
321330 case TokenContext . InterfaceOrModule :
322331 case TokenContext . MemberInModule :
323- return m . IsKind ( Microsoft . CodeAnalysis . CSharp . SyntaxKind . StaticKeyword ) ;
332+ return m . IsKind ( CSSyntaxKind . StaticKeyword ) ;
324333 }
325334 return false ;
326335 }
@@ -508,5 +517,18 @@ private static string ConvertNumericLiteralValueText(string valueText)
508517
509518 return valueText ;
510519 }
520+
521+ public static string GetTupleName ( ParenthesizedVariableDesignationSyntax node )
522+ {
523+ return String . Join ( "" , node . Variables . Select ( ( v , i ) => {
524+ var sourceText1 = v . ToString ( ) ;
525+ return i > 0 ? UppercaseFirstLetter ( sourceText1 ) : sourceText1 ;
526+ } ) ) ;
527+ }
528+
529+ private static string UppercaseFirstLetter ( string sourceText )
530+ {
531+ return sourceText . Substring ( 0 , 1 ) . ToUpper ( ) + sourceText . Substring ( 1 ) ;
532+ }
511533 }
512534}
0 commit comments