Skip to content

Commit

Permalink
initial experiments and refactoring for C# analyzer
Browse files Browse the repository at this point in the history
  • Loading branch information
Jand42 committed May 17, 2016
1 parent e401b5b commit f4c6b4b
Show file tree
Hide file tree
Showing 24 changed files with 820 additions and 536 deletions.
1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -15,3 +15,4 @@ IntelliFactory.WebSharper.JQuery/*.js
/msbuild/AssemblyInfo.extra.fs
/.hg
/.vs/config
/msbuild.log
46 changes: 19 additions & 27 deletions WebSharper.Compiler.sln
@@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.23107.0
VisualStudioVersion = 14.0.25123.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{E8624E6F-F8E9-4295-B9E0-6D1A79BAD0D5}"
EndProject
Expand All @@ -26,10 +26,6 @@ Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "WebSharper.Core", "src\comp
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "WebSharper.InterfaceGenerator", "src\compiler\WebSharper.InterfaceGenerator\WebSharper.InterfaceGenerator.fsproj", "{A05B0B61-A2EF-4C88-B9A3-00E888777798}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "WebSharper.MSBuild", "src\compiler\WebSharper.MSBuild\WebSharper.MSBuild.fsproj", "{C713BE60-B53C-44BB-A1EB-1696894996F5}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "WebSharper", "src\compiler\WebSharper\WebSharper.fsproj", "{DF5F2614-44E8-4C7D-A6E2-019D220D38C9}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{EED59312-2E8D-4332-8BA5-671F85D8E25E}"
ProjectSection(SolutionItems) = preProject
tools\minify.fsx = tools\minify.fsx
Expand Down Expand Up @@ -59,12 +55,14 @@ Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "WebSharper.Compiler.FSharp"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "WebSharper.Compiler.CSharp", "src\compiler\WebSharper.Compiler.CSharp\WebSharper.Compiler.CSharp.fsproj", "{8F188E8B-547E-4A8E-BD3B-257A13AF9ACD}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "WebSharper.MSBuild.FSharp", "src\compiler\WebSharper.MSBuild.FSharp\WebSharper.MSBuild.FSharp.fsproj", "{3A0893DD-291A-4ACF-AADC-BC2AF7D098EA}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "WebSharper.FSharp", "src\compiler\WebSharper.FSharp\WebSharper.FSharp.fsproj", "{615AEA64-16EC-49BC-AFB4-36211F6354CC}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "WebSharper.MSBuild.CSharp", "src\compiler\WebSharper.MSBuild.CSharp\WebSharper.MSBuild.CSharp.fsproj", "{B5503FD3-638E-4E54-96FC-1AFFD780E9E9}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "WebSharper.CSharp.Analyzer", "src\compiler\WebSharper.CSharp.Analyzer\WebSharper.CSharp.Analyzer.fsproj", "{055CF3AD-BDAF-4441-989B-D764B80FBDEE}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "WebSharper.CSharp", "src\compiler\WebSharper.CSharp\WebSharper.CSharp.fsproj", "{46D8C7C3-43CA-465C-9714-20B22CF3E459}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -96,17 +94,6 @@ Global
{A05B0B61-A2EF-4C88-B9A3-00E888777798}.DebugTests|Any CPU.Build.0 = Release|Any CPU
{A05B0B61-A2EF-4C88-B9A3-00E888777798}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A05B0B61-A2EF-4C88-B9A3-00E888777798}.Release|Any CPU.Build.0 = Release|Any CPU
{C713BE60-B53C-44BB-A1EB-1696894996F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C713BE60-B53C-44BB-A1EB-1696894996F5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C713BE60-B53C-44BB-A1EB-1696894996F5}.DebugTests|Any CPU.ActiveCfg = Release|Any CPU
{C713BE60-B53C-44BB-A1EB-1696894996F5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C713BE60-B53C-44BB-A1EB-1696894996F5}.Release|Any CPU.Build.0 = Release|Any CPU
{DF5F2614-44E8-4C7D-A6E2-019D220D38C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DF5F2614-44E8-4C7D-A6E2-019D220D38C9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DF5F2614-44E8-4C7D-A6E2-019D220D38C9}.DebugTests|Any CPU.ActiveCfg = Release|Any CPU
{DF5F2614-44E8-4C7D-A6E2-019D220D38C9}.DebugTests|Any CPU.Build.0 = Release|Any CPU
{DF5F2614-44E8-4C7D-A6E2-019D220D38C9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DF5F2614-44E8-4C7D-A6E2-019D220D38C9}.Release|Any CPU.Build.0 = Release|Any CPU
{15DD08E0-9E5E-49B1-9738-D73ACA630FF5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{15DD08E0-9E5E-49B1-9738-D73ACA630FF5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{15DD08E0-9E5E-49B1-9738-D73ACA630FF5}.DebugTests|Any CPU.ActiveCfg = Release|Any CPU
Expand All @@ -131,12 +118,6 @@ Global
{8F188E8B-547E-4A8E-BD3B-257A13AF9ACD}.DebugTests|Any CPU.Build.0 = Debug|Any CPU
{8F188E8B-547E-4A8E-BD3B-257A13AF9ACD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8F188E8B-547E-4A8E-BD3B-257A13AF9ACD}.Release|Any CPU.Build.0 = Release|Any CPU
{3A0893DD-291A-4ACF-AADC-BC2AF7D098EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3A0893DD-291A-4ACF-AADC-BC2AF7D098EA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3A0893DD-291A-4ACF-AADC-BC2AF7D098EA}.DebugTests|Any CPU.ActiveCfg = Debug|Any CPU
{3A0893DD-291A-4ACF-AADC-BC2AF7D098EA}.DebugTests|Any CPU.Build.0 = Debug|Any CPU
{3A0893DD-291A-4ACF-AADC-BC2AF7D098EA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3A0893DD-291A-4ACF-AADC-BC2AF7D098EA}.Release|Any CPU.Build.0 = Release|Any CPU
{615AEA64-16EC-49BC-AFB4-36211F6354CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{615AEA64-16EC-49BC-AFB4-36211F6354CC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{615AEA64-16EC-49BC-AFB4-36211F6354CC}.DebugTests|Any CPU.ActiveCfg = Debug|Any CPU
Expand All @@ -149,6 +130,18 @@ Global
{B5503FD3-638E-4E54-96FC-1AFFD780E9E9}.DebugTests|Any CPU.Build.0 = Debug|Any CPU
{B5503FD3-638E-4E54-96FC-1AFFD780E9E9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B5503FD3-638E-4E54-96FC-1AFFD780E9E9}.Release|Any CPU.Build.0 = Release|Any CPU
{055CF3AD-BDAF-4441-989B-D764B80FBDEE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{055CF3AD-BDAF-4441-989B-D764B80FBDEE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{055CF3AD-BDAF-4441-989B-D764B80FBDEE}.DebugTests|Any CPU.ActiveCfg = Debug|Any CPU
{055CF3AD-BDAF-4441-989B-D764B80FBDEE}.DebugTests|Any CPU.Build.0 = Debug|Any CPU
{055CF3AD-BDAF-4441-989B-D764B80FBDEE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{055CF3AD-BDAF-4441-989B-D764B80FBDEE}.Release|Any CPU.Build.0 = Release|Any CPU
{46D8C7C3-43CA-465C-9714-20B22CF3E459}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{46D8C7C3-43CA-465C-9714-20B22CF3E459}.Debug|Any CPU.Build.0 = Debug|Any CPU
{46D8C7C3-43CA-465C-9714-20B22CF3E459}.DebugTests|Any CPU.ActiveCfg = Debug|Any CPU
{46D8C7C3-43CA-465C-9714-20B22CF3E459}.DebugTests|Any CPU.Build.0 = Debug|Any CPU
{46D8C7C3-43CA-465C-9714-20B22CF3E459}.Release|Any CPU.ActiveCfg = Release|Any CPU
{46D8C7C3-43CA-465C-9714-20B22CF3E459}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand All @@ -159,16 +152,15 @@ Global
{BFB21B61-FDA9-4814-A728-7D43038E0B57} = {EC03CB1D-151F-4469-A6DD-D5854A340F1D}
{52741881-8D64-4639-8B5C-19C060958C35} = {EC03CB1D-151F-4469-A6DD-D5854A340F1D}
{A05B0B61-A2EF-4C88-B9A3-00E888777798} = {EC03CB1D-151F-4469-A6DD-D5854A340F1D}
{C713BE60-B53C-44BB-A1EB-1696894996F5} = {EC03CB1D-151F-4469-A6DD-D5854A340F1D}
{DF5F2614-44E8-4C7D-A6E2-019D220D38C9} = {EC03CB1D-151F-4469-A6DD-D5854A340F1D}
{B38B1480-30AC-4F48-8AA3-C406889EC6CF} = {EED59312-2E8D-4332-8BA5-671F85D8E25E}
{1ACAFCBC-6FE9-4CD6-91DF-AAE1902C9B1F} = {E8624E6F-F8E9-4295-B9E0-6D1A79BAD0D5}
{15DD08E0-9E5E-49B1-9738-D73ACA630FF5} = {1ACAFCBC-6FE9-4CD6-91DF-AAE1902C9B1F}
{5FB61954-9230-4408-A349-7F1EFC6E0A66} = {1ACAFCBC-6FE9-4CD6-91DF-AAE1902C9B1F}
{D54EA1FD-F52F-4F07-921F-7B3D1B412CD0} = {EC03CB1D-151F-4469-A6DD-D5854A340F1D}
{8F188E8B-547E-4A8E-BD3B-257A13AF9ACD} = {EC03CB1D-151F-4469-A6DD-D5854A340F1D}
{3A0893DD-291A-4ACF-AADC-BC2AF7D098EA} = {EC03CB1D-151F-4469-A6DD-D5854A340F1D}
{615AEA64-16EC-49BC-AFB4-36211F6354CC} = {EC03CB1D-151F-4469-A6DD-D5854A340F1D}
{B5503FD3-638E-4E54-96FC-1AFFD780E9E9} = {EC03CB1D-151F-4469-A6DD-D5854A340F1D}
{055CF3AD-BDAF-4441-989B-D764B80FBDEE} = {EC03CB1D-151F-4469-A6DD-D5854A340F1D}
{46D8C7C3-43CA-465C-9714-20B22CF3E459} = {EC03CB1D-151F-4469-A6DD-D5854A340F1D}
EndGlobalSection
EndGlobal
9 changes: 9 additions & 0 deletions WebSharper.sln
Expand Up @@ -142,6 +142,8 @@ Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "WebSharper.Sitelets.Offline
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebSharper.CSharp.Sitelets.Tests", "tests\WebSharper.CSharp.Sitelets.Tests\WebSharper.CSharp.Sitelets.Tests.csproj", "{91E8E3CC-B1F5-4D27-8DAF-639CA5C76F63}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "WebSharper.CSharp.Analyzer", "src\compiler\WebSharper.CSharp.Analyzer\WebSharper.CSharp.Analyzer.fsproj", "{055CF3AD-BDAF-4441-989B-D764B80FBDEE}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -341,6 +343,12 @@ Global
{91E8E3CC-B1F5-4D27-8DAF-639CA5C76F63}.DebugTests|Any CPU.Build.0 = DebugTests|Any CPU
{91E8E3CC-B1F5-4D27-8DAF-639CA5C76F63}.Release|Any CPU.ActiveCfg = Release|Any CPU
{91E8E3CC-B1F5-4D27-8DAF-639CA5C76F63}.Release|Any CPU.Build.0 = Release|Any CPU
{055CF3AD-BDAF-4441-989B-D764B80FBDEE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{055CF3AD-BDAF-4441-989B-D764B80FBDEE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{055CF3AD-BDAF-4441-989B-D764B80FBDEE}.DebugTests|Any CPU.ActiveCfg = Debug|Any CPU
{055CF3AD-BDAF-4441-989B-D764B80FBDEE}.DebugTests|Any CPU.Build.0 = Debug|Any CPU
{055CF3AD-BDAF-4441-989B-D764B80FBDEE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{055CF3AD-BDAF-4441-989B-D764B80FBDEE}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down Expand Up @@ -383,5 +391,6 @@ Global
{46D8C7C3-43CA-465C-9714-20B22CF3E459} = {EC03CB1D-151F-4469-A6DD-D5854A340F1D}
{24B3FBDF-E7C2-4A54-8877-CBC05DBF2ABC} = {70FEE852-57E6-4910-B4A8-E1B6D0F159E3}
{91E8E3CC-B1F5-4D27-8DAF-639CA5C76F63} = {7C8FF043-B608-42BD-930B-2249675BA666}
{055CF3AD-BDAF-4441-989B-D764B80FBDEE} = {EC03CB1D-151F-4469-A6DD-D5854A340F1D}
EndGlobalSection
EndGlobal
10 changes: 3 additions & 7 deletions msbuild/FSharp.targets
Expand Up @@ -36,11 +36,7 @@
</PropertyGroup>
<ItemGroup>
<Reference Include="mscorlib" />
<Reference Include="FSharp.Core, Version=4.3.0.0" Condition=" '$(FSharp40)' != 'True' ">
<HintPath>..\packages\FSharp.Core.3.0.2\lib\net40\FSharp.Core.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="FSharp.Core, Version=4.4.0.0" Condition=" '$(FSharp40)' == 'True' ">
<Reference Include="FSharp.Core, Version=4.4.0.0">
<HintPath>..\packages\FSharp.Core.4.0.0.1\lib\net40\FSharp.Core.dll</HintPath>
<Private>True</Private>
</Reference>
Expand Down Expand Up @@ -87,12 +83,12 @@
</Target>
<Choose>
<When Condition="'$(VisualStudioVersion)' == '11.0'">
<PropertyGroup Condition="Exists('$(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets')">
<PropertyGroup>
<FSharpTargetsPath>$(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets</FSharpTargetsPath>
</PropertyGroup>
</When>
<Otherwise>
<PropertyGroup Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets')">
<PropertyGroup>
<FSharpTargetsPath>$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets</FSharpTargetsPath>
</PropertyGroup>
</Otherwise>
Expand Down
2 changes: 1 addition & 1 deletion msbuild/WebSharper.CSharp.Internal.targets
Expand Up @@ -54,5 +54,5 @@
<WarningLevel>3</WarningLevel>
<DocumentationFile>$(Root)\build\Release\$(Name).xml</DocumentationFile>
</PropertyGroup>
<Import Project="WebSharper.CSharp.targets" />
<!--<Import Project="WebSharper.CSharp.targets" />-->
</Project>
7 changes: 5 additions & 2 deletions msbuild/WebSharper.CSharp.targets
Expand Up @@ -29,8 +29,7 @@
<WebSharperTask
DefineConstants="$(DefineConstants)"
NoStandardLib="$(NoCompilerStandardLib)"
Sources="@(Compile)"
CscCommandLineArgs="@(CscCommandLineArgs)"
Sources="@(Compile)"
OutputAssembly="@(IntermediateAssembly)"
References="@(ReferencePath)"
Configuration="$(Configuration)"
Expand All @@ -49,6 +48,10 @@
WebSharperProject="$(WebSharperProject)"
WebSharperErrorsAsWarnings="$(WebSharperErrorsAsWarnings)"
ZafirToolPath="$(MSBuildThisFileDirectory)/../build/$(Configuration)/zafircs.exe"
TargetType="$(OutputType)"
NoConfig="true"
DebugType="$(DebugType)"
SubsystemVersion="$(SubsystemVersion)"
/>
</Target>
</Project>
5 changes: 4 additions & 1 deletion msbuild/Zafir.CSharp.targets
Expand Up @@ -30,7 +30,6 @@
DefineConstants="$(DefineConstants)"
NoStandardLib="$(NoCompilerStandardLib)"
Sources="@(Compile)"
CscCommandLineArgs="@(CscCommandLineArgs)"
OutputAssembly="@(IntermediateAssembly)"
References="@(ReferencePath)"
Configuration="$(Configuration)"
Expand All @@ -49,6 +48,10 @@
WebSharperProject="$(WebSharperProject)"
WebSharperErrorsAsWarnings="$(WebSharperErrorsAsWarnings)"
ZafirToolPath="$(MSBuildThisFileDirectory)/../tools/net45/zafircs.exe"
TargetType="$(OutputType)"
NoConfig="true"
DebugType="$(DebugType)"
SubsystemVersion="$(SubsystemVersion)"
/>
</Target>
</Project>
2 changes: 1 addition & 1 deletion src/build/Bootstrap/Main.fs
Expand Up @@ -80,7 +80,7 @@ let RestorePackages () =
nuget "install FSharp.Core -version 3.0.2 -o packages"
nuget "install FSharp.Core -version 4.0.0.1 -o packages"
nuget "install sharpcompress -version 0.11.5 -o packages -excludeVersion"
nuget "install Mono.Cecil -version 0.9.5.4 -o packages -excludeVersion" // newer: 0.9.6.1
nuget "install Mono.Cecil -version 0.9.6.1 -o packages -excludeVersion" // newer: 0.9.6.1
nuget "install AjaxMin -version 5.14.5506.26202 -o packages -excludeVersion"
nuget "install FsNuGet -o packages -excludeVersion -nocache"
nuget "install Microsoft.CodeAnalysis.CSharp -version 1.2.1 -o packages -excludeVersion"
Expand Down
129 changes: 129 additions & 0 deletions src/compiler/WebSharper.CSharp.Analyzer/Analyzer.fs
@@ -0,0 +1,129 @@
namespace WebSharper.CSharp.Analyzer

open System
open System.Collections.Generic
open System.Collections.Immutable
open System.Linq
open System.Threading
open System.Reflection
open Microsoft.CodeAnalysis
open Microsoft.CodeAnalysis.CSharp
open Microsoft.CodeAnalysis.CSharp.Syntax
open Microsoft.CodeAnalysis.Diagnostics
open System.IO
open WebSharper.Compiler

[<DiagnosticAnalyzer(LanguageNames.CSharp)>]
type WebSharperCSharpAnalyzer () =
inherit DiagnosticAnalyzer()

static let wsWarning =
new DiagnosticDescriptor ("WebSharperWarning", "WebSharper warnings", "{0}", "WebSharper", DiagnosticSeverity.Warning, true, null, null)

static let wsError =
new DiagnosticDescriptor ("WebSharperError", "WebSharper errors", "{0}", "WebSharper", DiagnosticSeverity.Error, true, null, null)

let mutable cachedRefMeta = None

override this.SupportedDiagnostics =
ImmutableArray.Create(wsWarning, wsError)

override this.Initialize(initCtx) =
let mutable count = 0

// initCtx.RegisterCompilationStartAction(fun startCtx ->
// startCtx.RegisterCompilationEndAction(fun endCtx ->
// )
// )

initCtx.RegisterCompilationAction(fun compCtx ->

try
let compilation = compCtx.Compilation :?> CSharpCompilation

let refMeta =
match cachedRefMeta with
| Some res -> res
| _ ->
let refPaths =
compilation.ExternalReferences |> Seq.choose (fun r ->
match r with
| :? PortableExecutableReference as cr -> Some cr.FilePath
| _ -> None
)
let aR =
AssemblyResolver.Create()
.SearchPaths(refPaths)
let loader = WebSharper.Compiler.FrontEnd.Loader.Create aR ignore
let refs = [ for r in refPaths -> loader.LoadFile(r) ]
let metas = refs |> List.choose (fun r -> WebSharper.Compiler.FrontEnd.ReadFromAssembly r)
let referencedAsmNames =
refPaths
|> Seq.map (fun i ->
let n = Path.GetFileNameWithoutExtension(i)
n, i
)
|> Map.ofSeq

let assemblyResolveHandler = ResolveEventHandler(fun _ e ->
let assemblyName = AssemblyName(e.Name).Name
match Map.tryFind assemblyName referencedAsmNames with
| None -> null
| Some p ->
if assemblyName = "FSharp.Core" then
typeof<option<_>>.Assembly
else
Assembly.LoadFrom(p)
)

System.AppDomain.CurrentDomain.add_AssemblyResolve(assemblyResolveHandler)

let res =
if List.isEmpty metas then None
else Some (WebSharper.Core.DependencyGraph.Graph.UnionOfMetadata metas)

cachedRefMeta <- Some res
res

if compCtx.CancellationToken.IsCancellationRequested then () else

let compiler = WebSharper.Compiler.CSharp.WebSharperCSharpCompiler(ignore)

let comp =
compiler.Compile(refMeta, compilation)

if compCtx.CancellationToken.IsCancellationRequested then () else

let loc (pos: WebSharper.Core.AST.SourcePos option) =
match pos with
| None -> Location.None
| Some p ->
// Text.TextSpan(snd p.Start - 1, snd p.End - 1)
// let lp (line, col) = Text.LinePosition(line - 1, col - 1)
// let lineSpan = Text.LinePositionSpan(lp p.Start, lp p.End)
match WebSharper.Compiler.CSharp.ProjectReader.textSpans.TryGetValue(p) with
| true, textSpan ->
let syntaxTree =
compilation.SyntaxTrees |> Seq.find (fun t -> t.FilePath = p.FileName)
Location.Create(syntaxTree, !textSpan)
| _ ->
Location.None

for pos, wrn in comp.Warnings do
compCtx.ReportDiagnostic(Diagnostic.Create(wsWarning, loc pos, string wrn))

for pos, err in comp.Errors do
compCtx.ReportDiagnostic(Diagnostic.Create(wsError, loc pos, string err))

// let files =
// compilation.SyntaxTrees |> Seq.map (fun t -> System.IO.Path.GetFileNameWithoutExtension t.FilePath)
// |> String.concat " "

count <- count + 1
compCtx.ReportDiagnostic(Diagnostic.Create(wsWarning, Location.None, sprintf "WebSharper analyzer finished (%d): %d errors, %d warnings" count comp.Errors.Length comp.Warnings.Length))
compCtx.ReportDiagnostic(Diagnostic.Create(wsWarning, Location.None, sprintf "Another diagnostic"))
with e ->
count <- count + 1
compCtx.ReportDiagnostic(Diagnostic.Create(wsWarning, Location.None, sprintf "WebSharper analyzer failed (%d): %s at %s" count e.Message e.StackTrace))
)

0 comments on commit f4c6b4b

Please sign in to comment.