Feedback Request - F# Autocompletion
F# autocompletion for LINQPad is now underway with LINQPad 5, and I'd like feedback on the most important features to put into V1.
C# autocompletion currently includes the following features:
* Listings of accessible symbols when pressing Ctrl+Space (and sometimes automatic upon an alpha character)
* Expression-bound instance/static members of a type or object (usually automatic upon pressing '.')
* Parameter listings when making method calls or calling constructors, on Ctrl+Shift+Space or pressing ( or [
* Object initializer member listings
* Code-snippets (type the shortcut and press Tab to complete)
* Quick-info on mouse hover
* Smart tags to import assembly/namespace on an unbound symbol
As someone who thinks in C#, I'm aware of the peril of looking up the blub continuum, and I don't want to prioritize or design incorrectly!
What should I be aware of to (a) provide a good F# autocompletion experience, and (b) provide features in the right order?
I will be using the FSharp.Compiler.Service APIs.
Thanks!
Joe
C# autocompletion currently includes the following features:
* Listings of accessible symbols when pressing Ctrl+Space (and sometimes automatic upon an alpha character)
* Expression-bound instance/static members of a type or object (usually automatic upon pressing '.')
* Parameter listings when making method calls or calling constructors, on Ctrl+Shift+Space or pressing ( or [
* Object initializer member listings
* Code-snippets (type the shortcut and press Tab to complete)
* Quick-info on mouse hover
* Smart tags to import assembly/namespace on an unbound symbol
As someone who thinks in C#, I'm aware of the peril of looking up the blub continuum, and I don't want to prioritize or design incorrectly!
What should I be aware of to (a) provide a good F# autocompletion experience, and (b) provide features in the right order?
I will be using the FSharp.Compiler.Service APIs.
Thanks!
Joe
Comments
although Linqpad does frequently do a stand-up job of giving me intellisense/autocomplete, and parameter listings on code that's in the middle of a ton of F# while in C# mode, it doesn't always.
sometimes I have to go comment out all the F# code or open a new tab to get some assistance in that area.
Is Apache not pretty much "do whatever, but be public about whatever changes you make to our software"?
Also, really looking forward to this, @JoeAlbahari!
Code snippets - I'm not sure they'd be useful at all.
I suggest the following (prioritized) list:
* Expression-bound instance/static members of a type or object (usually automatic upon pressing '.')
* Parameter listings when making method calls or calling constructors, on Ctrl+Shift+Space or pressing ( or [
* Listings of accessible symbols when pressing Ctrl+Space (and sometimes automatic upon an alpha character)
* Quick-info on mouse hover
* Smart tags to import assembly/namespace on an unbound symbol
* Object initializer member listings
Really looking forwards to having LinqPad with decent F# support. It'll be awesome. Thanks for implementing this.
With F#, expressions become both more prevalent and powerful. Since LINQPad already has its elegant way of displaying the result of a C# expression, I thought this was a logical next step for F5. Maybe you can use Ctrl-Enter to execute the current line (/multiline) and display in the output window?
This is not experience talking, just speculating what would be the best of both worlds.
http://fsharp.github.io/FSharp.Compiler.Service/interactive.html
The scenario I would love to see (if possible) is leveraging the debugger support along with F# interactive as a REPL. Specifically, including things like the 'locals' window.
I like using REPL's, but they often (at least IME) mean you have to mentally keep track of what local variables you have and what each has a value of. This is where it seems like a LINQPad REPL could be a huge boost, where I'd be able to use a REPL but with a visual surface showing what local variables are present and what they're set to.
At least for the F# case, it appears that you'd inspect a single dynamic assembly if you decided you were willing to surface the locals in a UI in such a REPL.
http://stackoverflow.com/a/4998232/215534
http://www.linqpad.net/download.aspx#beta
This includes the following features for F#:
* Member listings on Ctrl+Space / period
* Parameter listings on Shift+Ctrl+Space / open-parenthesis
* Quick info on mouse hover
Let me know of any problems you run into!
I'm having serious memory issues -- Linqpad process balloons up to 4.6GB+ usage after just a few minutes editing a query.
I reference over 130 libraries within My Extensions that are all used regularly, and after removing all references, the F# query was responsive, but was still leaking memory slowly. Over the next 3-5 minutes, the process' usage increased from 300MB to 800MB with no user activity. Adding the references back caused LP to go unresponsive once again.
I also tried enabling/disabling optimization as another test, but it had no effect.
I don't have these kinds of issues with C# or VB, so I can only assume something's being done differently with the F# implementation. Thoughts?
It moves noticeably faster now, but after a few minutes, the memory usage still expands at a rapid pace. It now appears to rise fastest when I select a database connection. At that point, it jumps from around 500MB usage to around 1.2-1.5GB, then expands to 2-3GB.
Or is it leaking?
Can you give me a demo query that reproduces this memory usage?
I can't get it to go much above 300MB before the GC kicks in and cleans up.