Git Product home page Git Product logo

Comments (6)

rneatherway avatar rneatherway commented on June 15, 2024

@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.

dsyme avatar dsyme commented on June 15, 2024

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.

rneatherway avatar rneatherway commented on June 15, 2024

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.

dsyme avatar dsyme commented on June 15, 2024

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.

rneatherway avatar rneatherway commented on June 15, 2024

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.

rneatherway avatar rneatherway commented on June 15, 2024

Fixed by #78

from fsautocomplete.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.