@@ -33,6 +33,8 @@ internal class Walker : CSharpSyntaxWalker, ILog
33
33
private bool _PropertyStatic = false ;
34
34
private bool _ConstKeyword = false ;
35
35
36
+ private int _EnumMembers = 0 ;
37
+
36
38
public Walker ( CSTOJSOptions options , SemanticModel ? model ) : base ( SyntaxWalkerDepth . Trivia )
37
39
{
38
40
_Log = this ;
@@ -125,6 +127,8 @@ public override void VisitToken(SyntaxToken token)
125
127
case SyntaxKind . QuestionToken :
126
128
case SyntaxKind . LessThanEqualsToken :
127
129
case SyntaxKind . ConstKeyword :
130
+ case SyntaxKind . PercentToken :
131
+ case SyntaxKind . QuestionQuestionToken :
128
132
case SyntaxKind . EndOfFileToken :
129
133
{
130
134
VisitLeadingTrivia ( token ) ;
@@ -227,7 +231,6 @@ public override void VisitClassDeclaration(ClassDeclarationSyntax node)
227
231
switch ( kind )
228
232
{
229
233
case SyntaxKind . InternalKeyword :
230
- break ;
231
234
case SyntaxKind . PublicKeyword :
232
235
VisitLeadingTrivia ( asToken ) ;
233
236
break ;
@@ -516,6 +519,7 @@ public override void VisitExpressionStatement(ExpressionStatementSyntax node)
516
519
517
520
switch ( kind )
518
521
{
522
+ case SyntaxKind . ConditionalAccessExpression :
519
523
case SyntaxKind . PostDecrementExpression :
520
524
case SyntaxKind . InvocationExpression :
521
525
case SyntaxKind . SimpleAssignmentExpression :
@@ -570,6 +574,8 @@ public override void VisitArgument(ArgumentSyntax node)
570
574
571
575
switch ( kind )
572
576
{
577
+ case SyntaxKind . SimpleLambdaExpression :
578
+ case SyntaxKind . SubtractExpression :
573
579
case SyntaxKind . EqualsExpression :
574
580
case SyntaxKind . AsExpression :
575
581
case SyntaxKind . MultiplyExpression :
@@ -592,21 +598,15 @@ public override void VisitArgument(ArgumentSyntax node)
592
598
VisitImplicitObjectCreationExpression ( asNode as ImplicitObjectCreationExpressionSyntax ) ;
593
599
break ;
594
600
case SyntaxKind . AnonymousObjectCreationExpression :
595
- {
596
- VisitAnonymousObjectCreationExpression ( asNode as AnonymousObjectCreationExpressionSyntax ) ;
597
- break ;
598
- }
601
+ VisitAnonymousObjectCreationExpression ( asNode as AnonymousObjectCreationExpressionSyntax ) ;
602
+ break ;
599
603
case SyntaxKind . SimpleMemberAccessExpression :
600
604
case SyntaxKind . ElementAccessExpression :
601
- {
602
- Visit ( asNode ) ;
603
- break ;
604
- }
605
+ Visit ( asNode ) ;
606
+ break ;
605
607
case SyntaxKind . IdentifierName :
606
- {
607
- VisitIdentifierName ( asNode as IdentifierNameSyntax ) ;
608
- break ;
609
- }
608
+ VisitIdentifierName ( asNode as IdentifierNameSyntax ) ;
609
+ break ;
610
610
default :
611
611
_Log . ErrorLine ( $ "asNode : { kind } ") ;
612
612
break ;
@@ -671,6 +671,121 @@ public override void VisitAnonymousObjectCreationExpression(AnonymousObjectCreat
671
671
}
672
672
}
673
673
674
+ public override void VisitEnumDeclaration ( EnumDeclarationSyntax node )
675
+ {
676
+ ChildSyntaxList nodesAndTokens = node . ChildNodesAndTokens ( ) ;
677
+
678
+ for ( int i = 0 ; i < nodesAndTokens . Count ; i ++ )
679
+ {
680
+ SyntaxNode ? asNode = nodesAndTokens [ i ] . AsNode ( ) ;
681
+
682
+ if ( asNode != null )
683
+ {
684
+ SyntaxKind kind = asNode . Kind ( ) ;
685
+
686
+ switch ( kind )
687
+ {
688
+ case SyntaxKind . EnumMemberDeclaration :
689
+ VisitEnumMemberDeclaration ( asNode as EnumMemberDeclarationSyntax ) ;
690
+ break ;
691
+ default :
692
+ _Log . ErrorLine ( $ "asNode : { kind } ") ;
693
+ break ;
694
+ }
695
+ }
696
+ else
697
+ {
698
+ SyntaxToken asToken = nodesAndTokens [ i ] . AsToken ( ) ;
699
+ SyntaxKind kind = asToken . Kind ( ) ;
700
+
701
+ switch ( kind )
702
+ {
703
+ case SyntaxKind . PrivateKeyword :
704
+ case SyntaxKind . PublicKeyword :
705
+ VisitLeadingTrivia ( asToken ) ;
706
+ break ;
707
+ case SyntaxKind . EnumKeyword :
708
+ {
709
+ VisitLeadingTrivia ( asToken ) ;
710
+ JSSB . Append ( "const" ) ;
711
+ VisitTrailingTrivia ( asToken ) ;
712
+ break ;
713
+ }
714
+ case SyntaxKind . IdentifierToken :
715
+ VisitLeadingTrivia ( asToken ) ;
716
+ VisitToken ( asToken . WithoutTrivia ( ) ) ;
717
+ JSSB . Append ( " = " ) ;
718
+ VisitTrailingTrivia ( asToken ) ;
719
+ break ;
720
+ case SyntaxKind . CommaToken :
721
+ case SyntaxKind . OpenBraceToken :
722
+ VisitToken ( asToken ) ;
723
+ break ;
724
+ case SyntaxKind . CloseBraceToken :
725
+ {
726
+ VisitToken ( asToken ) ;
727
+ _EnumMembers = 0 ;
728
+ break ;
729
+ }
730
+ default :
731
+ _Log . ErrorLine ( $ "asToken : { kind } ") ;
732
+ break ;
733
+ }
734
+ }
735
+ }
736
+ }
737
+
738
+ public override void VisitEnumMemberDeclaration ( EnumMemberDeclarationSyntax node )
739
+ {
740
+ ChildSyntaxList nodesAndTokens = node . ChildNodesAndTokens ( ) ;
741
+
742
+ for ( int i = 0 ; i < nodesAndTokens . Count ; i ++ )
743
+ {
744
+ SyntaxNode ? asNode = nodesAndTokens [ i ] . AsNode ( ) ;
745
+
746
+ if ( asNode != null )
747
+ {
748
+ SyntaxKind kind = asNode . Kind ( ) ;
749
+
750
+ switch ( kind )
751
+ {
752
+ case SyntaxKind . EqualsValueClause :
753
+ JSSB . Append ( ": " ) ;
754
+ VisitLiteralExpression ( ( ( asNode as EqualsValueClauseSyntax ) . Value as LiteralExpressionSyntax ) ) ;
755
+ break ;
756
+ default :
757
+ _Log . ErrorLine ( $ "asNode : { kind } ") ;
758
+ break ;
759
+ }
760
+ }
761
+ else
762
+ {
763
+ SyntaxToken asToken = nodesAndTokens [ i ] . AsToken ( ) ;
764
+ SyntaxKind kind = asToken . Kind ( ) ;
765
+
766
+ switch ( kind )
767
+ {
768
+ case SyntaxKind . IdentifierToken :
769
+ {
770
+ if ( nodesAndTokens . Count == 1 )
771
+ {
772
+ VisitLeadingTrivia ( asToken ) ;
773
+ VisitToken ( asToken . WithoutTrivia ( ) ) ;
774
+ JSSB . Append ( $ " : { _EnumMembers ++ } ") ;
775
+ VisitTrailingTrivia ( asToken ) ;
776
+ }
777
+ else
778
+ VisitToken ( asToken ) ;
779
+ break ;
780
+ }
781
+ default :
782
+ _Log . ErrorLine ( $ "asToken : { kind } ") ;
783
+ break ;
784
+ }
785
+ }
786
+ }
787
+ }
788
+
674
789
public override void VisitNameEquals ( NameEqualsSyntax node )
675
790
{
676
791
ChildSyntaxList nodesAndTokens = node . ChildNodesAndTokens ( ) ;
@@ -1240,6 +1355,7 @@ public override void VisitVariableDeclaration(VariableDeclarationSyntax node)
1240
1355
1241
1356
switch ( kind )
1242
1357
{
1358
+ case SyntaxKind . CommaToken :
1243
1359
case SyntaxKind . SemicolonToken :
1244
1360
VisitToken ( asToken ) ;
1245
1361
break ;
@@ -1563,6 +1679,7 @@ public override void VisitParenthesizedExpression(ParenthesizedExpressionSyntax
1563
1679
1564
1680
switch ( kind )
1565
1681
{
1682
+ case SyntaxKind . CoalesceExpression :
1566
1683
case SyntaxKind . LogicalOrExpression :
1567
1684
case SyntaxKind . AddExpression :
1568
1685
Visit ( asNode ) ;
@@ -1621,6 +1738,7 @@ public override void VisitCastExpression(CastExpressionSyntax node)
1621
1738
{
1622
1739
case SyntaxKind . PredefinedType :
1623
1740
break ;
1741
+ case SyntaxKind . InvocationExpression :
1624
1742
case SyntaxKind . SimpleMemberAccessExpression :
1625
1743
Visit ( asNode ) ;
1626
1744
break ;
@@ -2518,7 +2636,9 @@ private bool BuiltInTypesGenerics(SyntaxNode nodeL, ISymbol symbol)
2518
2636
JSSB . Append ( $ "{ toAttribute . Convert ( node . Identifier . Text ) } ") ;
2519
2637
return true ;
2520
2638
}
2521
- case string _str when _str . Contains ( nameof ( Console . WriteLine ) ) :
2639
+ case string _str when
2640
+ _str . Contains ( nameof ( Console . WriteLine ) ) ||
2641
+ _str . Contains ( nameof ( Console . Write ) ) :
2522
2642
{
2523
2643
JSSB . Append ( $ "log") ;
2524
2644
return true ;
@@ -2538,7 +2658,9 @@ private bool BuiltInTypesGenerics(SyntaxNode nodeL, ISymbol symbol)
2538
2658
JSSB . Append ( $ "Array") ;
2539
2659
return true ;
2540
2660
}
2541
- case string _str when _str . Contains ( nameof ( List < dynamic > . Sort ) ) :
2661
+ case string _str when
2662
+ _str . Contains ( nameof ( List < dynamic > . Sort ) ) ||
2663
+ _str . Contains ( nameof ( List < dynamic > . FindLast ) ) :
2542
2664
{
2543
2665
toAttribute . To = ToAttribute . FirstCharToLowerCase ;
2544
2666
JSSB . Append ( $ "{ toAttribute . Convert ( node . Identifier . Text ) } ") ;
@@ -2575,6 +2697,7 @@ private bool BuiltInTypesGenerics(SyntaxNode nodeL, ISymbol symbol)
2575
2697
return true ;
2576
2698
}
2577
2699
case string _str when
2700
+ _str . Contains ( nameof ( string . Length ) ) ||
2578
2701
_str . Contains ( nameof ( string . Trim ) ) ||
2579
2702
_str . Contains ( nameof ( string . Substring ) ) ||
2580
2703
_str . Contains ( nameof ( string . StartsWith ) ) ||
@@ -2620,6 +2743,27 @@ private bool BuiltInTypesGenerics(SyntaxNode nodeL, ISymbol symbol)
2620
2743
return false ;
2621
2744
}
2622
2745
}
2746
+ case string str when str . Contains ( nameof ( Math ) ) :
2747
+ {
2748
+ string _name = symbol . Name ;
2749
+ switch ( _name )
2750
+ {
2751
+ case string _str when _str == typeName :
2752
+ {
2753
+ JSSB . Append ( nameof ( Math ) ) ;
2754
+ return true ;
2755
+ }
2756
+ case string _str when _str . Contains ( nameof ( Math . Sqrt ) ) :
2757
+ {
2758
+ toAttribute . To = ToAttribute . FirstCharToLowerCase ;
2759
+ JSSB . Append ( $ "{ toAttribute . Convert ( node . Identifier . Text ) } ") ;
2760
+ return true ;
2761
+ }
2762
+ default :
2763
+ _Log . WarningLine ( $ "WARNING! node: \" { node } \" , typeSymbol: \" { typeSymbol } \" , symbol: \" { symbol } \" , Is not supported! USE \" CustomCSNamesToJS\" ") ;
2764
+ return false ;
2765
+ }
2766
+ }
2623
2767
default :
2624
2768
_Log . WarningLine ( $ "WARNING! typeSymbol: \" { typeSymbol } \" Is not supported! USE \" CustomCSNamesToJS\" ") ;
2625
2769
return false ;
0 commit comments