@@ -33,6 +33,8 @@ internal class Walker : CSharpSyntaxWalker, ILog
3333 private bool _PropertyStatic = false ;
3434 private bool _ConstKeyword = false ;
3535
36+ private int _EnumMembers = 0 ;
37+
3638 public Walker ( CSTOJSOptions options , SemanticModel ? model ) : base ( SyntaxWalkerDepth . Trivia )
3739 {
3840 _Log = this ;
@@ -125,6 +127,8 @@ public override void VisitToken(SyntaxToken token)
125127 case SyntaxKind . QuestionToken :
126128 case SyntaxKind . LessThanEqualsToken :
127129 case SyntaxKind . ConstKeyword :
130+ case SyntaxKind . PercentToken :
131+ case SyntaxKind . QuestionQuestionToken :
128132 case SyntaxKind . EndOfFileToken :
129133 {
130134 VisitLeadingTrivia ( token ) ;
@@ -227,7 +231,6 @@ public override void VisitClassDeclaration(ClassDeclarationSyntax node)
227231 switch ( kind )
228232 {
229233 case SyntaxKind . InternalKeyword :
230- break ;
231234 case SyntaxKind . PublicKeyword :
232235 VisitLeadingTrivia ( asToken ) ;
233236 break ;
@@ -516,6 +519,7 @@ public override void VisitExpressionStatement(ExpressionStatementSyntax node)
516519
517520 switch ( kind )
518521 {
522+ case SyntaxKind . ConditionalAccessExpression :
519523 case SyntaxKind . PostDecrementExpression :
520524 case SyntaxKind . InvocationExpression :
521525 case SyntaxKind . SimpleAssignmentExpression :
@@ -570,6 +574,8 @@ public override void VisitArgument(ArgumentSyntax node)
570574
571575 switch ( kind )
572576 {
577+ case SyntaxKind . SimpleLambdaExpression :
578+ case SyntaxKind . SubtractExpression :
573579 case SyntaxKind . EqualsExpression :
574580 case SyntaxKind . AsExpression :
575581 case SyntaxKind . MultiplyExpression :
@@ -592,21 +598,15 @@ public override void VisitArgument(ArgumentSyntax node)
592598 VisitImplicitObjectCreationExpression ( asNode as ImplicitObjectCreationExpressionSyntax ) ;
593599 break ;
594600 case SyntaxKind . AnonymousObjectCreationExpression :
595- {
596- VisitAnonymousObjectCreationExpression ( asNode as AnonymousObjectCreationExpressionSyntax ) ;
597- break ;
598- }
601+ VisitAnonymousObjectCreationExpression ( asNode as AnonymousObjectCreationExpressionSyntax ) ;
602+ break ;
599603 case SyntaxKind . SimpleMemberAccessExpression :
600604 case SyntaxKind . ElementAccessExpression :
601- {
602- Visit ( asNode ) ;
603- break ;
604- }
605+ Visit ( asNode ) ;
606+ break ;
605607 case SyntaxKind . IdentifierName :
606- {
607- VisitIdentifierName ( asNode as IdentifierNameSyntax ) ;
608- break ;
609- }
608+ VisitIdentifierName ( asNode as IdentifierNameSyntax ) ;
609+ break ;
610610 default :
611611 _Log . ErrorLine ( $ "asNode : { kind } ") ;
612612 break ;
@@ -671,6 +671,121 @@ public override void VisitAnonymousObjectCreationExpression(AnonymousObjectCreat
671671 }
672672 }
673673
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+
674789 public override void VisitNameEquals ( NameEqualsSyntax node )
675790 {
676791 ChildSyntaxList nodesAndTokens = node . ChildNodesAndTokens ( ) ;
@@ -1240,6 +1355,7 @@ public override void VisitVariableDeclaration(VariableDeclarationSyntax node)
12401355
12411356 switch ( kind )
12421357 {
1358+ case SyntaxKind . CommaToken :
12431359 case SyntaxKind . SemicolonToken :
12441360 VisitToken ( asToken ) ;
12451361 break ;
@@ -1563,6 +1679,7 @@ public override void VisitParenthesizedExpression(ParenthesizedExpressionSyntax
15631679
15641680 switch ( kind )
15651681 {
1682+ case SyntaxKind . CoalesceExpression :
15661683 case SyntaxKind . LogicalOrExpression :
15671684 case SyntaxKind . AddExpression :
15681685 Visit ( asNode ) ;
@@ -1621,6 +1738,7 @@ public override void VisitCastExpression(CastExpressionSyntax node)
16211738 {
16221739 case SyntaxKind . PredefinedType :
16231740 break ;
1741+ case SyntaxKind . InvocationExpression :
16241742 case SyntaxKind . SimpleMemberAccessExpression :
16251743 Visit ( asNode ) ;
16261744 break ;
@@ -2518,7 +2636,9 @@ private bool BuiltInTypesGenerics(SyntaxNode nodeL, ISymbol symbol)
25182636 JSSB . Append ( $ "{ toAttribute . Convert ( node . Identifier . Text ) } ") ;
25192637 return true ;
25202638 }
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 ) ) :
25222642 {
25232643 JSSB . Append ( $ "log") ;
25242644 return true ;
@@ -2538,7 +2658,9 @@ private bool BuiltInTypesGenerics(SyntaxNode nodeL, ISymbol symbol)
25382658 JSSB . Append ( $ "Array") ;
25392659 return true ;
25402660 }
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 ) ) :
25422664 {
25432665 toAttribute . To = ToAttribute . FirstCharToLowerCase ;
25442666 JSSB . Append ( $ "{ toAttribute . Convert ( node . Identifier . Text ) } ") ;
@@ -2575,6 +2697,7 @@ private bool BuiltInTypesGenerics(SyntaxNode nodeL, ISymbol symbol)
25752697 return true ;
25762698 }
25772699 case string _str when
2700+ _str . Contains ( nameof ( string . Length ) ) ||
25782701 _str . Contains ( nameof ( string . Trim ) ) ||
25792702 _str . Contains ( nameof ( string . Substring ) ) ||
25802703 _str . Contains ( nameof ( string . StartsWith ) ) ||
@@ -2620,6 +2743,27 @@ private bool BuiltInTypesGenerics(SyntaxNode nodeL, ISymbol symbol)
26202743 return false ;
26212744 }
26222745 }
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+ }
26232767 default :
26242768 _Log . WarningLine ( $ "WARNING! typeSymbol: \" { typeSymbol } \" Is not supported! USE \" CustomCSNamesToJS\" ") ;
26252769 return false ;
0 commit comments