Skip to content

Commit bd7424d

Browse files
feat: cache common StringDoc types
1 parent b294d20 commit bd7424d

File tree

2 files changed

+36
-4
lines changed

2 files changed

+36
-4
lines changed

Src/CSharpier/DocTypes/Doc.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,7 @@ public override string ToString()
1212
return DocSerializer.Serialize(this);
1313
}
1414

15-
public static implicit operator Doc(string value)
16-
{
17-
return new StringDoc(value);
18-
}
15+
public static implicit operator Doc(string value) => StringDoc.Create(value);
1916

2017
public static NullDoc Null => NullDoc.Instance;
2118

Src/CSharpier/DocTypes/StringDoc.cs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,39 @@ internal sealed class StringDoc(string value, bool isDirective = false) : Doc
44
{
55
public string Value { get; } = value;
66
public bool IsDirective { get; } = isDirective;
7+
8+
public static StringDoc Create(string value)
9+
{
10+
if (value.Length != 1)
11+
{
12+
return new StringDoc(value);
13+
}
14+
15+
return value switch
16+
{
17+
" " => SpaceString,
18+
"\t" => TabString,
19+
"," => CommaString,
20+
"=" => EqualsString,
21+
"." => DotString,
22+
"{" => OpenBraceString,
23+
"}" => ClosedBraceString,
24+
"(" => OpenBracketString,
25+
")" => ClosedBracketString,
26+
";" => SemiColonString,
27+
28+
_ => new StringDoc(value),
29+
};
30+
}
31+
32+
private static readonly StringDoc SpaceString = new(" ");
33+
private static readonly StringDoc TabString = new("\t");
34+
private static readonly StringDoc CommaString = new(",");
35+
private static readonly StringDoc EqualsString = new("=");
36+
private static readonly StringDoc DotString = new(".");
37+
private static readonly StringDoc OpenBraceString = new("{");
38+
private static readonly StringDoc ClosedBraceString = new("}");
39+
private static readonly StringDoc OpenBracketString = new("(");
40+
private static readonly StringDoc ClosedBracketString = new(")");
41+
private static readonly StringDoc SemiColonString = new(";");
742
}

0 commit comments

Comments
 (0)