Skip to content

Commit 73855de

Browse files
committed
Added option "KeepBraceOnTheSameLine" default false.
Added option "NormalizeWhitespace" default false.
1 parent d2dc159 commit 73855de

File tree

3 files changed

+69
-4
lines changed

3 files changed

+69
-4
lines changed

CSharpToJavaScript/CSTOJS.cs

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -413,8 +413,43 @@ private void Generate(SyntaxTree? tree, Assembly? assembly, List<MetadataReferen
413413
}
414414
)
415415
).AddUsings(oldUsing);
416-
//Should I make "NormalizeWhitespace" option??? TODO!
417-
//.NormalizeWhitespace().AddUsings(oldUsing);
416+
417+
if (_Options.KeepBraceOnTheSameLine)
418+
{
419+
//
420+
//
421+
//Overriding root works only once.
422+
//I'm not sure how to properly fix this...
423+
//Below is a very bad code...
424+
//
425+
//
426+
List<SyntaxToken> allBraces = trueRoot.NormalizeWhitespace().DescendantTokens().Where((e) => e.IsKind(SyntaxKind.OpenBraceToken)).ToList();
427+
int i = 0;
428+
while (i < allBraces.Count)
429+
{
430+
for (int j = 0; j < allBraces.Count; j++)
431+
{
432+
SyntaxToken _token = allBraces[j].GetPreviousToken();
433+
if (_token.HasTrailingTrivia)
434+
{
435+
SyntaxTrivia _trivia = _token.TrailingTrivia.Where((e) => e.IsKind(SyntaxKind.EndOfLineTrivia)).FirstOrDefault();
436+
if (!_trivia.IsKind(SyntaxKind.None))
437+
{
438+
SyntaxToken _replacedToken = _token.ReplaceTrivia(_trivia, SyntaxFactory.Space);
439+
trueRoot = trueRoot.ReplaceToken(_token, _replacedToken);
440+
break;
441+
}
442+
}
443+
}
444+
allBraces = trueRoot.DescendantTokens().Where((e) => e.IsKind(SyntaxKind.OpenBraceToken)).ToList();
445+
i++;
446+
}
447+
448+
}
449+
450+
if (_Options.NormalizeWhitespace)
451+
trueRoot = trueRoot.NormalizeWhitespace();
452+
418453

419454
if (rtPath != null && rtPath != string.Empty)
420455
{
@@ -444,7 +479,6 @@ private void Generate(SyntaxTree? tree, Assembly? assembly, List<MetadataReferen
444479

445480
foreach (UsingDirectiveSyntax oU in oldUsing)
446481
{
447-
448482
if (File.Exists(Path.Combine(rtPath, oU.Name + ".dll")))
449483
references.Add(MetadataReference.CreateFromFile(Path.Combine(rtPath, oU.Name + ".dll")));
450484
}

CSharpToJavaScript/CSTOJSOptions.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,28 @@ public record class CSTOJSOptions
5252
/// </value>
5353
public bool UseVarOverLet { get; set; } = false;
5454

55+
/// <summary>
56+
/// Keep Brace <c>{</c> on the same line.
57+
/// </summary>
58+
/// <remarks>
59+
/// <blockquote class="NOTE"><h5>NOTE</h5>Note: It is better write from the start in c#, then using this option.</blockquote>
60+
/// </remarks>
61+
/// <value>
62+
/// Default: <c>false</c>
63+
/// </value>
64+
public bool KeepBraceOnTheSameLine { get; set; } = false;
65+
66+
/// <summary>
67+
/// Self-explanatory, Normalize Whitespace. />
68+
/// </summary>
69+
/// /// <remarks>
70+
/// <blockquote class="NOTE"><h5>NOTE</h5>Note: Do not use with <see cref="CSTOJSOptions.KeepBraceOnTheSameLine" /></blockquote>
71+
/// </remarks>
72+
/// <value>
73+
/// Default: <c>false</c>
74+
/// </value>
75+
public bool NormalizeWhitespace { get; set; } = false;
76+
5577
/// <summary>
5678
/// List of custom names to convert.
5779
/// </summary>

CSharpToJavaScript/Walker.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@ public override void VisitToken(SyntaxToken token)
8080
case SyntaxKind.CloseParenToken:
8181
case SyntaxKind.SemicolonToken:
8282
case SyntaxKind.CloseBraceToken:
83-
case SyntaxKind.OpenBraceToken:
8483
case SyntaxKind.DotToken:
8584
case SyntaxKind.IdentifierToken:
8685
case SyntaxKind.EqualsToken:
@@ -135,6 +134,16 @@ public override void VisitToken(SyntaxToken token)
135134

136135
JSSB.Append(token.Text);
137136

137+
VisitTrailingTrivia(token);
138+
return;
139+
}
140+
case SyntaxKind.OpenBraceToken:
141+
{
142+
if(!_Options.KeepBraceOnTheSameLine)
143+
VisitLeadingTrivia(token);
144+
145+
JSSB.Append(token.Text);
146+
138147
VisitTrailingTrivia(token);
139148
return;
140149
}

0 commit comments

Comments
 (0)