fsprojects / zarchive-fsharpbinding

Archive of F# Language Bindings for Open Editors
Other
307 stars 106 forks source link

highlight references throws missing method exception #412

Closed kjnilsson closed 10 years ago

kjnilsson commented 10 years ago

XS 4.2.4, mono 3.2.6, latest fsharpbindings code built from source (happens with latest available release as well). Causes all lines including the reference to 'disappear'.

upport/XamarinStudio-4.0/LocalInstall/Addins/MonoDevelop.FSharpBinding.3.2.28/FSharpBinding.dll Missing method Mono.TextEditor.TextViewMargin.System.MissingMethodException: Method not found: 'Mono.TextEditor.TextViewMargin.LayoutWrapper.get_Layout'. at MonoDevelop.FSharp.UsageMarker.getFromTo (Mono.TextEditor.TextEditor editor, Mono.TextEditor.LineMetrics metrics, Int32 markerStart, Int32 markerEnd) [0x00000] in :0 at MonoDevelop.FSharp.UsageMarker.DrawBackground (Mono.TextEditor.TextEditor editor, Cairo.Context context, Double y, Mono.TextEditor.LineMetrics linemetrics) [0x00000] in :0 at Mono.TextEditor.TextViewMargin.DrawLinePart (Cairo.Context cr, Mono.TextEditor.DocumentLine line, Int32 lineNumber, Int32 logicalRulerColumn, Int32 offset, Int32 length, System.Double& position, System.Boolean& isSelectionDrawn, Double y, Double maxX, Double _lineHeight) [0x002dd] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-4.2.4-branch/a160c35d/source/monodevelop/main/src/core/Mono.Texteditor/Mono.TextEditor/Gui/TextViewMargin.cs:1610 at Mono.TextEditor.TextViewMargin.Draw (Cairo.Context cr, Rectangle area, Mono.TextEditor.DocumentLine line, Int32 lineNr, Double x, Double y, Double _lineHeight) [0x00566] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-4.2.4-branch/a160c35d/source/monodevelop/main/src/core/Mono.Texteditor/Mono.TextEditor/Gui/TextViewMargin.cs:2748 at Mono.TextEditor.TextArea.RenderMargins (Cairo.Context cr, Cairo.Context textViewCr, Rectangle cairoRectangle) [0x00183] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-4.2.4-branch/a160c35d/source/monodevelop/main/src/core/Mono.Texteditor/Mono.TextEditor/Gui/TextArea.cs:1784 System.MissingMethodException: Method not found: 'Mono.TextEditor.TextViewMargin.LayoutWrapper.get_Layout'. at MonoDevelop.FSharp.UsageMarker.getFromTo (Mono.TextEditor.TextEditor editor, Mono.TextEditor.LineMetrics metrics, Int32 markerStart, Int32 markerEnd) [0x00000] in :0 at MonoDevelop.FSharp.UsageMarker.DrawBackground (Mono.TextEditor.TextEditor editor, Cairo.Context context, Double y, Mono.TextEditor.LineMetrics linemetrics) [0x00000] in :0 at Mono.TextEditor.TextViewMargin.DrawLinePart (Cairo.Context cr, Mono.TextEditor.DocumentLine line, Int32 lineNumber, Int32 logicalRulerColumn, Int32 offset, Int32 length, System.Double& position, System.Boolean& isSelectionDrawn, Double y, Double maxX, Double _lineHeight) [0x002dd] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-4.2.4-branch/a160c35d/source/monodevelop/main/src/core/Mono.Texteditor/Mono.TextEditor/Gui/TextViewMargin.cs:1610 at Mono.TextEditor.TextViewMargin.Draw (Cairo.Context cr, Rectangle area, Mono.TextEditor.DocumentLine line, Int32 lineNr, Double x, Double y, Double _lineHeight) [0x00566] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-4.2.4-branch/a160c35d/source/monodevelop/main/src/core/Mono.Texteditor/Mono.TextEditor/Gui/TextViewMargin.cs:2748 at Mono.TextEditor.TextArea.RenderMargins (Cairo.Context cr, Cairo.Context textViewCr, Rectangle cairoRectangle) [0x00183] in /Users/builder/data/lanes/monodevelop-lion-monodevelop-4.2.4-branch/a160c35d/source/monodevelop/main/src/core/Mono.Texteditor/Mono.TextEditor/Gui/TextArea.cs:1784

7sharp9 commented 10 years ago

@kjnilsson Does the UI hang? There are upstream changes in MD causing this regression.

kjnilsson commented 10 years ago

No it doesn't hang it just throws that exception in the logs and each line with the symbol on is blanked out. Was going to take a screen cast but QT wasn't my friend last night.

kjnilsson commented 10 years ago

Ah also just remembered I had a compiler error in Parameters.fs as GetDefineSymbols was not overridable. Not sure if relevant as I get the same above issue with the currently released fsb as well.

https://github.com/fsharp/fsharpbinding/blob/master/monodevelop/MonoDevelop.FSharpBinding/Services/Parameters.fs#L61

7sharp9 commented 10 years ago

I think thats a change that MD 4.3 introduces, its patched in master but probably not on the release channels yet. I wish there was a saner way of resolving the MD references needed for the F# addin.

ghost commented 10 years ago

Could you pull latest master and try again. Make sure you run configure.bat/sh and build+install the latest.

7sharp9 commented 10 years ago

@dsyme I just tried to do a highlight usages with the version from the alpha channel and it hangs the UI.

knocte commented 10 years ago

Maybe you want to try with monodevelop 'fsharp' branch (instead of master)?

kjnilsson commented 10 years ago

@dsyme I still get the compiler error: rrors:

/Users/karlnilsson/code/github/fsharpbinding/monodevelop/MonoDevelop.FSharpBinding/MonoDevelop.FSharp.mac-linux.fsproj (default targets) -> /Library/Frameworks/Mono.framework/Versions/3.2.6/lib/mono/4.0/Microsoft.FSharp.Targets (CoreCompile target) ->

/Users/karlnilsson/code/github/fsharpbinding/monodevelop/MonoDevelop.FSharpBinding/Services/Parameters.fs(63,14): error FS0855: No abstract or interface member was found that corresponds to this override
7sharp9 commented 10 years ago

At the moment the addin is built assuming installed references rather than built against MD sources

7sharp9 commented 10 years ago

@knocte If you use the fsharp branch of MD, you would have to use the vnext branch of the addin.

7sharp9 commented 10 years ago

@kjnilsson Im using 4.2.4 build 32 and I can build ok.

kjnilsson commented 10 years ago

Hmm it might be building against some old MD version I have got installed and not against the XS binaries.

7sharp9 commented 10 years ago

Running ./configure would recreate the references based on the 'found' version of XS.

kjnilsson commented 10 years ago

here is the output from configure: oryx:monodevelop karlnilsson$ ./configure.sh Configuring...

MonoDevelop F# add-in configuration script

MonoDevelop binaries found at: /usr/local/lib/monodevelop Detected version: 4.2 Getting nuget packages...

rneatherway commented 10 years ago

Isn't this the problem I had in the discussion at #397 ? I just had to comment that override out to build against 4.2.3. I'm surprised if they broke the interface in a minor revision like that. @7sharp9 I thought that change was in 4.3.x?

kjnilsson commented 10 years ago

yes that is how I got it to build in the end. Don added some compiler directives that should have worked but I suspect I have issues getting the right MD dependencies on my machine. I renamed my monodevelop source folder (as it was in the configure search path) and it now detected the correct verison (4.2.4). However, fsb now fails with:

/Users/karlnilsson/code/github/fsharpbinding/monodevelop/MonoDevelop.FSharpBinding/MonoDevelop.FSharp.mac-linux.fsproj (default targets) -> /Library/Frameworks/Mono.framework/Versions/3.2.6/lib/mono/4.0/Microsoft.FSharp.Targets (CoreCompile target) ->

/Users/karlnilsson/code/github/fsharpbinding/monodevelop/MonoDevelop.FSharpBinding/FSharpHighlightUsagesExtension.fs(66,19): error FS0366: No implementation was given for 'ISymbol.ToReference() : ISymbolReference'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.
ghost commented 10 years ago

@kjnilsson Yes, it prefers a local install of monodevelop, see configure.fsx.

If you have time, please submit a PR for configure.fsx that reports a warning if multiple MD/XS installation points are found, and accepts a parameter indicating which to use.

ghost commented 10 years ago

@kjnilsson Could you list the full command line used to invoke fsc by xbuild/msbuild? Still feels like an unholy mix of MD/XS assemblies are being referenced (the error you are getting is symptomatic of MD/XS 4.3.x DLLs being referenced as part of the build)

kjnilsson commented 10 years ago

certainly: reCompile: Tool /Library/Frameworks/Mono.framework/Versions/3.2.6/lib/mono/4.0/fsc.exe execution started with arguments: -o:obj/Debug/FSharpBinding.dll -g --debug:full --noframework --define:TRACE --define:DEBUG --define:MDVERSION_4_2_4 --optimize- --tailcalls- --resource:obj/Debug/icons.fsharp-icon-32.png --resource:obj/Debug/icons.fsharp-script-32.png --resource:obj/Debug/icons.fsharp-file-icon.png --resource:obj/Debug/icons.fsharp-project-icon.png --resource:obj/Debug/icons.fsharp-script-icon.png --resource:obj/Debug/FSharpBinding.addin.xml -r:../dependencies/gtk-sharp-2.0/pango-sharp.dll -r:../dependencies/gtk-sharp-2.0/atk-sharp.dll -r:../dependencies/gtk-sharp-2.0/gdk-sharp.dll -r:../dependencies/gtk-sharp-2.0/gtk-sharp.dll -r:../dependencies/gtk-sharp-2.0/glib-sharp.dll -r:/Library/Frameworks/Mono.framework/Versions/3.2.6/lib/mono/4.0/System.dll -r:/Library/Frameworks/Mono.framework/Versions/3.2.6/lib/mono/4.0/System.Xml.dll -r:/Library/Frameworks/Mono.framework/Versions/3.2.6/lib/mono/4.0/System.Xml.Linq.dll -r:/Library/Frameworks/Mono.framework/Versions/3.2.6/lib/mono/4.0/System.Xaml.dll -r:/Library/Frameworks/Mono.framework/Versions/3.2.6/lib/mono/4.0/mscorlib.dll -r:/Library/Frameworks/Mono.framework/Versions/3.2.6/lib/mono/4.0/Mono.Cairo.dll -r:/usr/local/lib/monodevelop/bin/Mono.Addins.dll -r:/usr/local/lib/monodevelop/bin/Xwt.dll -r:/usr/local/lib/monodevelop/bin/Xwt.Gtk.dll -r:/usr/local/lib/monodevelop/bin/Mono.TextEditor.dll -r:/usr/local/lib/monodevelop/bin/MonoDevelop.Core.dll -r:/Library/Frameworks/Mono.framework/Versions/3.2.6/lib/mono/4.0/monodoc.dll -r:/usr/local/lib/monodevelop/bin/MonoDevelop.Ide.dll -r:/usr/local/lib/monodevelop/bin/ICSharpCode.NRefactory.dll -r:/usr/local/lib/monodevelop/AddIns/DisplayBindings/SourceEditor/MonoDevelop.SourceEditor2.dll -r:/usr/local/lib/monodevelop/AddIns/MonoDevelop.Refactoring/MonoDevelop.Refactoring.dll -r:/Library/Frameworks/Mono.framework/Versions/3.2.6/lib/mono/4.0/FSharp.Core.dll -r:packages/FSharp.Compiler.Service.0.0.36/lib/net40/FSharp.Compiler.Service.dll -r:/Library/Frameworks/Mono.framework/Versions/3.2.6/lib/mono/4.0/System.Core.dll -r:/Users/karlnilsson/code/github/fsharpbinding/FSharp.CompilerBinding/bin/Debug//FSharp.CompilerBinding.dll -r:/Users/karlnilsson/code/github/fsharpbinding/monodevelop/bin/Debug//FSharpBinding.Gui.dll --target:library --warn:3 --warnaserror:76 --fullpaths --flaterrors --highentropyva- PowerPack/CodeDomVisitor.fs PowerPack/CodeDomGenerator.fs PowerPack/CodeProvider.fs Services/Parameters.fs Services/CompilerArguments.fs Services/TooltipHelpers.fs Services/LanguageService.fs Services/CompilerService.fs Services/InteractiveSession.fs FSharpInteractivePad.fs FSharpOptionsPanels.fs FSharpLanguageBinding.fs FSharpResourceIdBuilder.fs FSharpParser.fs FSharpTextEditorCompletion.fs FSharpProjectServiceExtension.fs FSharpProjectFileNodeExtension.fs FSharpHighlightUsagesExtension.fs FSharpResolverProvider.fs FSharpReferenceFinderExtension.fs

rneatherway commented 10 years ago

@dsyme wrt to your #if, I wonder if it makes sense to just insert the major/minor version i.e. MD_VERSION_4_2 to prevent having to update this every time.

There exists the --prefix option to configure.fsx which can be used to override the monodevelop to compile against.

On Fri, Mar 21, 2014 at 11:22 AM, Don Syme notifications@github.com wrote:

@kjnilsson https://github.com/kjnilsson Could you list the full command line used to invoke fsc by xbuild/msbuild?

Reply to this email directly or view it on GitHubhttps://github.com/fsharp/fsharpbinding/issues/412#issuecomment-38267371 .

7sharp9 commented 10 years ago

I remember we spent a long time trying to get rid of the #if version stuff in the past. Also remember the alpha channel of XS is mainly for iOS designer support and doesn't necessary have the same patches as beta.

7sharp9 commented 10 years ago

@rneatherway I don't know what version the change is in, just that is was in MD master. I think we should be tracking MD master pretty closely, the main issue is resolving the reference assemblies properly in the config script.

7sharp9 commented 10 years ago

We should probably cherry pick this from vnext to ensure the version is read correctly.
https://github.com/fsharp/fsharpbinding/commit/6c799b8cc48ad57cf83f5171f36690283bc516b9

kjnilsson commented 10 years ago

I added the missing implementation (most likely incorrectly) and after manually installing the plugin I too get an XS 'hang', possibly of the same kind as @7sharp9

7sharp9 commented 10 years ago

@kjnilsson I rebuilt and reinstalled and I don't get the 'hang'.

kjnilsson commented 10 years ago

from master or vnext? did you have to implement the new member of ISymbol in FSharpHighlightUsagesExtension.fs?

7sharp9 commented 10 years ago

Nope, master, Im using 4.2.4 (build 32), that change is not present there.

kjnilsson commented 10 years ago

yep once I hacked to to use the correct md path it all works! nice. Should I still take up Don's suggestion to update configure.fsx or will the change you mentioned in vnext be sufficient?

kjnilsson commented 10 years ago

Right well this is now fixed so closing issue. Thanks all.

7sharp9 commented 10 years ago

@kjnilsson The change I mentioned was just the version detect changing in vnext.

My preference would be to only support builds against MonoDevelop master, and older versions supported in a branch if necessary. Im not sure on how many people build from source to be honest.

kjnilsson commented 10 years ago

you mean maybe trimming this list of search paths?: https://github.com/fsharp/fsharpbinding/blob/master/monodevelop/configure.fsx#L17

perhaps as Don suggested we let the user choose if more than one option is available?

7sharp9 commented 10 years ago

Perhaps a simple override for the path would be all thats needed e.g. ./configure --Path=blah

And update the read me to detail that option.

kjnilsson commented 10 years ago

yeah - that plus a warning +exit if no path is set and multiple options are found

On 21 March 2014 15:48, Dave Thomas notifications@github.com wrote:

Perhaps a simple override for the path would be all thats needed e.g. ./configure --Path=blah

Reply to this email directly or view it on GitHubhttps://github.com/fsharp/fsharpbinding/issues/412#issuecomment-38289684 .

Karl Nilsson twitter: @kjnilsson blog: coderkarl.wordpress.com

rneatherway commented 10 years ago

I previously added --prefix with which you can currently override the path. This is documented in the README.

I also think that we should probably only include the major/minor version of monodevelop in the define symbols otherwise we will have to update it every five minutes.

ghost commented 10 years ago

I believe we should support build+install against the currently active Stable/Beta/Alpha versions of XS (currently 4.2.3, 4.2.4 and 4.3.4), as well as the internal head branch used by Xamarin, assuming someone on this team has active to that. This isn't too hard to do. We need that to be able to release new versions of the binding in any case.

Agreed with @rneatherway that we should only use major/minor version in the #define.

rneatherway commented 10 years ago

@kjnilsson I agree we should warn and exit if zero or 2+ paths are found, and suggest use of --prefix

kjnilsson commented 10 years ago

Agreed. I'll take a look at that then.

On Friday, 21 March 2014, Robin Neatherway notifications@github.com wrote:

@kjnilsson https://github.com/kjnilsson I agree we should warn and exit if zero or 2+ paths are found, and suggest use of --prefix

Reply to this email directly or view it on GitHubhttps://github.com/fsharp/fsharpbinding/issues/412#issuecomment-38295155 .

Karl Nilsson twitter: @kjnilsson blog: coderkarl.wordpress.com

kjnilsson commented 10 years ago

@dsyme do we want to put anything in the configure script to warn if no binaries for the currently supported versions are found? if so does anyone know then Xamarin internal head branch version?

ghost commented 10 years ago

@kjnilsson I think that's probably a bit rigid and it will be hard to keep that list up-to-date as Xamarin release new versions

7sharp9 commented 10 years ago

Xamarin typically release a new build for the designer on Alpha every week.

kjnilsson commented 10 years ago

agreed - let's not. :)

On 25 March 2014 11:15, Dave Thomas notifications@github.com wrote:

Xamarin typically release a new build for the designer on Alpha every week.

Reply to this email directly or view it on GitHubhttps://github.com/fsharp/fsharpbinding/issues/412#issuecomment-38552645 .

Karl Nilsson twitter: @kjnilsson blog: coderkarl.wordpress.com