Comments (6)
@dsyme, I'm a bit unclear on how this should work. At the moment I don't get any completions for another project unless it has been compiled, and I have to recompile if I make any externally visible changes. I had a read of https://fsharp.github.io/FSharp.Compiler.Service/project.html#Analyzing-multiple-projects, but I'm still not sure how I should use the API.
At the moment I only ever call ParseAndCheckFileInProject
. Should I just fire off a ParseAndCheckProject
whenever a project is loaded, or perhaps just every so often?
from fsautocomplete.
I looked at your code and didn't immediately spot a bug. Could you show me a log of the two ProjectOptions you're passing, one for the library project and one for the consuming project (the latter should contain an identical copy of the options for the library project as a project reference)
You shouldn't need to call ParseAndCheckProject - what you're doing should be OK
from fsautocomplete.
Here are the options. There is a single difference in the 'library project' options. The ProjectFileName is not the same, it hasn't been canonicalised in the referencing project. However, I inserted a Path.GetFullPath
call in the loop that builds up ReferencedProjects and this didn't help.
FsAutoComplete.fsproj:
{ProjectFileName =
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/FsAutoComplete.fsproj";
ProjectFileNames = [||];
OtherOptions =
[|"--simpleresolution"; "--noframework";
"--out:/Users/robnea/dev/FsAutoComplete/FsAutoComplete/bin/Debug/fsautocomplete.exe";
"--doc:/Users/robnea/dev/FsAutoComplete/FsAutoComplete/bin/Debug/FSharp.InteractiveAutocomplete.XML";
"--fullpaths"; "--flaterrors"; "--target:exe"; "--define:DEBUG";
"--define:TRACE"; "--debug+"; "--optimize-"; "--tailcalls-"; "--debug:full";
"--platform:anycpu"; "--warnon:1182";
"-r:/Library/Frameworks/Mono.framework/Versions/4.0.2/lib/mono/4.5/mscorlib.dll";
"-r:/Library/Frameworks/Mono.framework/Versions/4.0.2/lib/mono/4.5/System.dll";
"-r:/Library/Frameworks/Mono.framework/Versions/4.0.2/lib/mono/4.5/System.Xml.dll";
"-r:/Library/Frameworks/Mono.framework/Versions/4.0.2/lib/mono/4.5/System.Numerics.dll";
"-r:../packages/NDesk.Options/lib/NDesk.Options.dll";
"-r:../packages/Newtonsoft.Json/lib/net45/Newtonsoft.Json.dll";
"-r:../packages/FSharp.Core/lib/net40/FSharp.Core.dll";
"-r:../packages/FSharp.Compiler.Service/lib/net45/FSharp.Compiler.Service.dll";
"-r:/Library/Frameworks/Mono.framework/Versions/4.0.2/lib/mono/4.5/System.Core.dll";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/AssemblyInfo.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/Utils.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/Debug.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/Environment.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/BlockingQueueAgent.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/Options.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/Parser.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/TipFormatter.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/FileSystem.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/CompilerServiceInterface.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/CommandResponse.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/CommandInput.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/Program.fs"|];
ReferencedProjects = [||];
IsIncompleteTypeCheckEnvironment = false;
UseScriptResolutionRules = false;
LoadTime = 31/12/9999 23:59:59;
UnresolvedReferences = null;}
Referencing project (FsAutoComplete.Tests.fsproj):
ProjectFileName =
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete.Tests/FsAutoComplete.Tests.fsproj";
ProjectFileNames = [||];
OtherOptions =
[|"--simpleresolution"; "--noframework";
"--out:/Users/robnea/dev/FsAutoComplete/FsAutoComplete.Tests/bin/Debug/FsAutoComplete.Tests.dll";
"--doc:/Users/robnea/dev/FsAutoComplete/FsAutoComplete.Tests/bin/Debug/FsAutoComplete.Tests.XML";
"--fullpaths"; "--flaterrors"; "--target:library"; "--define:DEBUG";
"--define:TRACE"; "--debug+"; "--optimize-"; "--tailcalls-"; "--debug:full";
"--platform:anycpu"; "--warnon:1182";
"-r:/Library/Frameworks/Mono.framework/Versions/4.0.2/lib/mono/4.5/mscorlib.dll";
"-r:/Library/Frameworks/Mono.framework/Versions/4.0.2/lib/mono/gac/FSharp.Core/4.3.0.0__b03f5f7f11d50a3a/FSharp.Core.dll";
"-r:../packages/FSharp.Compiler.Service/lib/net45/FSharp.Compiler.Service.dll";
"-r:/Library/Frameworks/Mono.framework/Versions/4.0.2/lib/mono/4.5/System.dll";
"-r:/Library/Frameworks/Mono.framework/Versions/4.0.2/lib/mono/4.5/System.Numerics.dll";
"-r:../packages/NUnit/lib/nunit.framework.dll";
"-r:/Library/Frameworks/Mono.framework/Versions/4.0.2/lib/mono/4.5/System.Core.dll";
"-r:/Users/robnea/dev/FsAutoComplete/FsAutoComplete/bin/Debug//fsautocomplete.exe";
"-r:/Users/robnea/dev/FsAutoComplete/FsAutoComplete/bin/Debug//fsautocomplete.exe";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete.Tests/Tests.fs"|];
ReferencedProjects =
[|("/Users/robnea/dev/FsAutoComplete/FsAutoComplete.Tests/../FsAutoComplete/FsAutoComplete.fsproj",
{ProjectFileName =
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete.Tests/../FsAutoComplete/FsAutoComplete.fsproj";
ProjectFileNames = [||];
OtherOptions =
[|"--simpleresolution"; "--noframework";
"--out:/Users/robnea/dev/FsAutoComplete/FsAutoComplete/bin/Debug/fsautocomplete.exe";
"--doc:/Users/robnea/dev/FsAutoComplete/FsAutoComplete/bin/Debug/FSharp.InteractiveAutocomplete.XML";
"--fullpaths"; "--flaterrors"; "--target:exe"; "--define:DEBUG";
"--define:TRACE"; "--debug+"; "--optimize-"; "--tailcalls-";
"--debug:full"; "--platform:anycpu"; "--warnon:1182";
"-r:/Library/Frameworks/Mono.framework/Versions/4.0.2/lib/mono/4.5/mscorlib.dll";
"-r:/Library/Frameworks/Mono.framework/Versions/4.0.2/lib/mono/4.5/System.dll";
"-r:/Library/Frameworks/Mono.framework/Versions/4.0.2/lib/mono/4.5/System.Xml.dll";
"-r:/Library/Frameworks/Mono.framework/Versions/4.0.2/lib/mono/4.5/System.Numerics.dll";
"-r:../packages/NDesk.Options/lib/NDesk.Options.dll";
"-r:../packages/Newtonsoft.Json/lib/net45/Newtonsoft.Json.dll";
"-r:../packages/FSharp.Core/lib/net40/FSharp.Core.dll";
"-r:../packages/FSharp.Compiler.Service/lib/net45/FSharp.Compiler.Service.dll";
"-r:/Library/Frameworks/Mono.framework/Versions/4.0.2/lib/mono/4.5/System.Core.dll";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/AssemblyInfo.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/Utils.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/Debug.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/Environment.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/BlockingQueueAgent.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/Options.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/Parser.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/TipFormatter.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/FileSystem.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/CompilerServiceInterface.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/CommandResponse.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/CommandInput.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/Program.fs"|];
ReferencedProjects = [||];
IsIncompleteTypeCheckEnvironment = false;
UseScriptResolutionRules = false;
LoadTime = 31/12/9999 23:59:59;
UnresolvedReferences = null;})|];
IsIncompleteTypeCheckEnvironment = false;
UseScriptResolutionRules = false;
LoadTime = 31/12/9999 23:59:59;
UnresolvedReferences = null;}
With canonicalisation:
ProjectFileName =
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete.Tests/FsAutoComplete.Tests.fsproj";
ProjectFileNames = [||];
OtherOptions =
[|"--simpleresolution"; "--noframework";
"--out:/Users/robnea/dev/FsAutoComplete/FsAutoComplete.Tests/bin/Debug/FsAutoComplete.Tests.dll";
"--doc:/Users/robnea/dev/FsAutoComplete/FsAutoComplete.Tests/bin/Debug/FsAutoComplete.Tests.XML";
"--fullpaths"; "--flaterrors"; "--target:library"; "--define:DEBUG";
"--define:TRACE"; "--debug+"; "--optimize-"; "--tailcalls-"; "--debug:full";
"--platform:anycpu"; "--warnon:1182";
"-r:/Library/Frameworks/Mono.framework/Versions/4.0.2/lib/mono/4.5/mscorlib.dll";
"-r:/Library/Frameworks/Mono.framework/Versions/4.0.2/lib/mono/gac/FSharp.Core/4.3.0.0__b03f5f7f11d50a3a/FSharp.Core.dll";
"-r:../packages/FSharp.Compiler.Service/lib/net45/FSharp.Compiler.Service.dll";
"-r:/Library/Frameworks/Mono.framework/Versions/4.0.2/lib/mono/4.5/System.dll";
"-r:/Library/Frameworks/Mono.framework/Versions/4.0.2/lib/mono/4.5/System.Numerics.dll";
"-r:../packages/NUnit/lib/nunit.framework.dll";
"-r:/Library/Frameworks/Mono.framework/Versions/4.0.2/lib/mono/4.5/System.Core.dll";
"-r:/Users/robnea/dev/FsAutoComplete/FsAutoComplete/bin/Debug//fsautocomplete.exe";
"-r:/Users/robnea/dev/FsAutoComplete/FsAutoComplete/bin/Debug//fsautocomplete.exe";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete.Tests/Tests.fs"|];
ReferencedProjects =
[|("/Users/robnea/dev/FsAutoComplete/FsAutoComplete/FsAutoComplete.fsproj",
{ProjectFileName =
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/FsAutoComplete.fsproj";
ProjectFileNames = [||];
OtherOptions =
[|"--simpleresolution"; "--noframework";
"--out:/Users/robnea/dev/FsAutoComplete/FsAutoComplete/bin/Debug/fsautocomplete.exe";
"--doc:/Users/robnea/dev/FsAutoComplete/FsAutoComplete/bin/Debug/FSharp.InteractiveAutocomplete.XML";
"--fullpaths"; "--flaterrors"; "--target:exe"; "--define:DEBUG";
"--define:TRACE"; "--debug+"; "--optimize-"; "--tailcalls-";
"--debug:full"; "--platform:anycpu"; "--warnon:1182";
"-r:/Library/Frameworks/Mono.framework/Versions/4.0.2/lib/mono/4.5/mscorlib.dll";
"-r:/Library/Frameworks/Mono.framework/Versions/4.0.2/lib/mono/4.5/System.dll";
"-r:/Library/Frameworks/Mono.framework/Versions/4.0.2/lib/mono/4.5/System.Xml.dll";
"-r:/Library/Frameworks/Mono.framework/Versions/4.0.2/lib/mono/4.5/System.Numerics.dll";
"-r:../packages/NDesk.Options/lib/NDesk.Options.dll";
"-r:../packages/Newtonsoft.Json/lib/net45/Newtonsoft.Json.dll";
"-r:../packages/FSharp.Core/lib/net40/FSharp.Core.dll";
"-r:../packages/FSharp.Compiler.Service/lib/net45/FSharp.Compiler.Service.dll";
"-r:/Library/Frameworks/Mono.framework/Versions/4.0.2/lib/mono/4.5/System.Core.dll";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/AssemblyInfo.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/Utils.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/Debug.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/Environment.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/BlockingQueueAgent.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/Options.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/Parser.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/TipFormatter.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/FileSystem.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/CompilerServiceInterface.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/CommandResponse.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/CommandInput.fs";
"/Users/robnea/dev/FsAutoComplete/FsAutoComplete/Program.fs"|];
ReferencedProjects = [||];
IsIncompleteTypeCheckEnvironment = false;
UseScriptResolutionRules = false;
LoadTime = 31/12/9999 23:59:59;
UnresolvedReferences = null;})|];
IsIncompleteTypeCheckEnvironment = false;
UseScriptResolutionRules = false;
LoadTime = 31/12/9999 23:59:59;
UnresolvedReferences = null;}
from fsautocomplete.
Here's an example set of options from MultiProjectAnalysisTests.fs. Notice that the keys in the pairs for ProjectReferences are the DLL names, not the project file names. Using the output DLL names should fix it for you I think
val it : FSharpProjectOptions =
{ProjectFileName = "C:\Users\dsyme\AppData\Local\Temp\tmp75A9.fsproj";
ProjectFileNames = [||];
OtherOptions =
[|"--simpleresolution"; "--noframework"; "--debug:full"; "--define:DEBUG";
"--optimize-"; "--out:C:\Users\dsyme\AppData\Local\Temp\tmp75A9.dll";
"--doc:test.xml"; "--warn:3"; "--fullpaths"; "--flaterrors";
"--target:library"; "C:\Users\dsyme\AppData\Local\Temp\tmp75A8.fs";
"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll";
"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.dll";
"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Core.dll";
"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.0.0\FSharp.Core.dll";
"-r:C:\Users\dsyme\AppData\Local\Temp\tmp75A7.dll"|];
ReferencedProjects =
[|("C:\Users\dsyme\AppData\Local\Temp\tmp75A7.dll",
{ProjectFileName = "C:\Users\dsyme\AppData\Local\Temp\tmp75A7.fsproj";
ProjectFileNames = [||];
OtherOptions =
[|"--simpleresolution"; "--noframework"; "--debug:full";
"--define:DEBUG"; "--optimize-";
"--out:C:\Users\dsyme\AppData\Local\Temp\tmp75A7.dll";
"--doc:test.xml"; "--warn:3"; "--fullpaths"; "--flaterrors";
"--target:library"; "C:\Users\dsyme\AppData\Local\Temp\tmp75A6.fs";
"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll";
"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.dll";
"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Core.dll";
"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.0.0\FSharp.Core.dll"|];
ReferencedProjects = [||];
IsIncompleteTypeCheckEnvironment = false;
UseScriptResolutionRules = false;
LoadTime = 31/12/9999 23:59:59;
UnresolvedReferences = null;})|];
IsIncompleteTypeCheckEnvironment = false;
UseScriptResolutionRules = false;
LoadTime = 31/12/9999 23:59:59.
UnresolvedReferences = null;}
from fsautocomplete.
Right, thanks for the pointer. We'll have to update FCS as well: https://github.com/fsharp/FSharp.Compiler.Service/blob/master/src/fsharp/vs/service.fs#L3087
I did just try subbing in the output file instead, and that didn't seem to do it for me. Perhaps it's different for .exe dependencies, not sure. I'm going away tomorrow so will have to come back to this, testing a bit more carefully.
from fsautocomplete.
Fixed by #78
from fsautocomplete.
Related Issues (20)
- Handle Project Reloads when adding files to wildcard patterns HOT 1
- Better Codefix onboarding process HOT 2
- Mac m1 Sonoma - FSautocomplete not working HOT 7
- Neovim, Lsp Mode Crashed, range not found in JSON, diagnostics related HOT 10
- Code-fix for _.Property / _.MethodCall() / _.IndexerAccess[idx] shorthand for accessor functions
- Add Support for Breaking Down Type Signatures in Tooltips HOT 4
- fsiExtraParameters break error hints in editor while editing .fsx files HOT 14
- Remove inline values that replace pipeline hints
- Improve .NET POCO Initialiser Constructor object documentation, unit -> unit is not useful, we want to see the signature HOT 2
- F# interactive directives not showing docs once written down, also true for #nowarn, coloring is not conistent (purple?) HOT 1
- Refactoring: Extract Interface from Type member declaration (refactoring)
- Should we move this to Ionide or fsprojects? HOT 5
- #r "nuget: System.Data.Common" doesn't seem to work in .fsx HOT 4
- Format tooltips using client input HOT 4
- Invalid `This qualifier is redundant` when a variable is shadowed by a property with the same name and compatible signature
- `get ()` should not be renamed when renaming a property
- Code action: suggest to create missing parameter as local binding HOT 1
- AutomaticWorkspaceInit is ignored if rootUri is used instead of rootPath
- Convert to NuGet Central Package Management
- Work list for .NET 8.0.300-based releases HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from fsautocomplete.