Skip to content

Commit 16880d9

Browse files
committed
#209 fix namespace name escaping
1 parent aa2699d commit 16880d9

File tree

3 files changed

+11
-2
lines changed

3 files changed

+11
-2
lines changed

WebSharper.UI.CSharp.Templating.Analyzer/Analyzer.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ type WebSharperCSharpTemplatingAnalyzer () =
100100

101101
override this.Initialize(initCtx) =
102102
initCtx.RegisterSemanticModelAction(fun ctx ->
103-
namespaceName <- CodeGenerator.normalizeIdent ctx.SemanticModel.Compilation.AssemblyName + ".Template"
103+
namespaceName <- ctx.SemanticModel.Compilation.AssemblyName + ".Template"
104104
report <- ctx.ReportDiagnostic
105105
ctx.Options.AdditionalFiles |> Seq.distinct |> Seq.choose (fun f ->
106106
let p = f.Path

WebSharper.UI.CSharp.Templating.Build/Task.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ type WebSharperUICSharpGeneratorTask() =
6060
)
6161

6262
override this.Execute() =
63-
let namespaceName = CodeGenerator.normalizeIdent this.AssemblyName + ".Template"
63+
let namespaceName = this.AssemblyName + ".Template"
6464
let mutable result = true
6565
let templateFiles = ResizeArray<ITaskItem>()
6666
let outputSourceFiles = ResizeArray<ITaskItem>()

WebSharper.UI.CSharp.Templating/CodeGenerator.fs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,12 @@ let normalizeIdent (s: string) =
4848
let s = s.[0..0].ToUpperInvariant() + s.[1..]
4949
invalidIdentifierCharRE.Replace(s, "_")
5050

51+
let private invalidNamespaceCharRE =
52+
Regex("[^a-zA-Z0-9_.]", RegexOptions.Compiled)
53+
54+
let normalizeNamespace (s: string) =
55+
invalidNamespaceCharRE.Replace(s, "_")
56+
5157
let indent (s: seq<string>) =
5258
s |> Seq.map (fun s -> " " + s)
5359

@@ -305,12 +311,15 @@ let GetCode namespaceName projectDirectory filePath
305311
let parsed = Parsing.Parse (getRelPath projectDirectory filePath) projectDirectory serverLoad clientLoad
306312
let item = parsed.Items.[0] // it's always 1 item because C# doesn't support "foo.html,bar.html" style
307313
let templateName = normalizeIdent item.Id
314+
let namespaceName = normalizeNamespace namespaceName
308315
autoGeneratedComment + getCodeInternal namespaceName templateName item
309316

310317
let GetCodeClientOnly namespaceName templateName htmlString
311318
([<Optional; DefaultParameterValue(ClientLoad.Inline)>] clientLoad) =
312319
let parsed = Parsing.Parse htmlString null ServerLoad.Once clientLoad
313320
let item = parsed.Items.[0] // it's always 1 item because C# doesn't support "foo.html,bar.html" style
321+
let templateName = normalizeIdent templateName
322+
let namespaceName = normalizeNamespace namespaceName
314323
autoGeneratedComment + getCodeInternal namespaceName templateName item
315324

316325
/// Get the path to the output file for a given input file, creating any necessary directory.

0 commit comments

Comments
 (0)