
Ionide – F# Dev Tools for the Atom Editor - cloudroutine
http://ionide.io/
======
k_cieslak
Just want to let You all that I'm an author of most stuff ( but of course we
have also some cool contributors!) so if You have any questions feel free to
ask them here.

~~~
Rapzid
This is really awesome! How are you finding Funscript? Last I tried to look at
it following the tutorials to get started was not a smooth process due to
being out of date. It's also, unfortunately, not a terrible active project :|

~~~
k_cieslak
FunScript for sure is not perfect and have many rough edges - getting started
as new user is hard, getting started with different type of project even as
experienced user is not perfect (for example Atom plugin requires completely
different approach than normal web application), it has problems with "OO"
features of JS so using it with frameworks which requires such approach is bit
hacky, generated code is not perfect.

But i still like it and managed to create fancy stuff with it - Ionide,
React.js + Material UI applications etc. Wouldn't recommend using it on
production ( unless You want to commit really hard into FunScript project and
probably fix lot of this stuff) - WebSharper is providing more complete,
richer solution and commercial support if needed

------
tegeek
What a coincidence? I installed Win 10 through bootcamp just to practice &
develope a hobby project in F#. I logged in to Win 10, installed VStudio 2015,
F# tools etc. & then checked HN. And found this. So Now I just shut down Win
and came back to Mac to Install Atom and then Ionide.

~~~
k_cieslak
F# has been working well enough on Mac for many years. Even if You won't like
Ionide (I hope You will like it ;) ) it's worth checking different projects
which allow for F# development on Mac - Xamarin Studio has very good F#
support, there are also Vim, Emacs, and Sublime Text 3 plugins / modes for F#
(all 3 for core F# language services features are using same backend as
Ionide).

Also in context of cross platform development - there exists also F# yeoman
generator which provides some nice templates for F# projects outside of VS.

~~~
josteink
> (all 3 for core F# language services features are using same backend as
> Ionide).

Would that be Omnisharp[1], or does the F# community use something different?

[1] [http://www.omnisharp.net/](http://www.omnisharp.net/)

~~~
k_cieslak
Omnisharp[1] is build on top of Roslyn so as for now it supports only C# / VB.
As far as I know they are working on adding plugin support for it for non-
Roslyn language so maybe in the future we will have F# plugin there (
actually, as far as I know, that's MSFT plan for adding F# support in VS Code)

F# has had opensourced compiler[2] (written in F#) before it was cool in .Net
stack and for most tooling things we are using FSharp.Compiler.Services[3]
project - which basically provides all features of F# compiler (and much more)
as normal .Net library. Projects like Visual F# Power Tools[4] and Xamarin
Studio F# support[5] are using it to provide very interesting F# IDE features.

Since Vim, Emacs, Sublime and Atom (even though Ionide is written in F# and
compiled to JS we can't use all .Net libraries) don't have direct access to
.Net assemblies, community have created FsAutoComplete[6] project which is
just command line wrapper around FSharp.Compiler.Services and works as
"standard I/O server" where we send requests (for example if user wants
completion list) and get appropriate responses.

[1] [http://www.omnisharp.net/](http://www.omnisharp.net/)

[2]
[https://github.com/Microsoft/visualfsharp](https://github.com/Microsoft/visualfsharp)

[3]
[https://github.com/fsharp/FSharp.Compiler.Service](https://github.com/fsharp/FSharp.Compiler.Service)

[4]
[https://github.com/fsprojects/VisualFSharpPowerTools](https://github.com/fsprojects/VisualFSharpPowerTools)

[5] [https://github.com/fsharp/xamarin-monodevelop-fsharp-
addin](https://github.com/fsharp/xamarin-monodevelop-fsharp-addin)

[6]
[https://github.com/fsharp/FsAutoComplete](https://github.com/fsharp/FsAutoComplete)

~~~
josteink
> Omnisharp[1] is build on top of Roslyn so as for now it supports only C# /
> VB

That is fairly new code.

It was based on NRefactory in the past which I thought was reflection-based,
but I may have been wrong.

~~~
wluu
> for now it supports only C# / VB Nope, there is not any support for VB at
> this point in time. It's C# only I'm afraid!

As cloudroutine mentions, the older omnisharp-server implementation is
NRefactory based, whilst omnisharp-roslyn (as the name implies) has been built
atop roslyn.

omnisharp-roslyn retains a bit of NRefactory (the code actions part[1]), which
was called NR6Pack and has now been renamed as Refactoring Essentials [2].

Anyway, there's been a lot of recent changes in the works, as someone has
already mentioned, omnisharp-rolsyn currently has an open PR [3] which will
provide a plugin system to omnisharp-roslyn. Once introduced, it will mean
that the various omnisharp editors/clients can pick and choose which plugins
they wish to bundle with their editor. This may include F#, VB, Cake, Fake and
many others.

New contributors are, as always most welcome :)

\---

[1] [https://github.com/OmniSharp/omnisharp-
roslyn/blob/f62e74324...](https://github.com/OmniSharp/omnisharp-
roslyn/blob/f62e74324e76aa702083bfe749d293c2b3eb4777/src/OmniSharp/Startup.cs#L94)

[2] [http://vsrefactoringessentials.com](http://vsrefactoringessentials.com)

[3] [https://github.com/OmniSharp/omnisharp-
roslyn/pull/293](https://github.com/OmniSharp/omnisharp-roslyn/pull/293)

------
gamesurgeon
This looks awesome! I've been meaning to checkout F# (I come from an OCaml
background), and I think I've now found my gateway...

Cheers,

~~~
cloudroutine
I started out with OCaml too, it's a really easy transition into F#. You can
basically cut and paste OCaml code into F#, unless it involves stuff like
Functors, first class modules, and polymorphic variants.

Active Patterns are a pretty cool F# feature that OCaml doesn't have. You can
do something that's effectively the same with OCaml macros, but those are a
lot more tedious.

The F# intellisense and code completion are great productivity enhancers,
especially when it comes to working with unfamiliar libraries.

My biggest hurdle in transitioning from OCaml to F# was learning my way around
the .Net ecosystem, so it was still a relatively minor one.

If you decide to get into F# and have any questions about it someone on the
#fsharp channel on the Functional Programming Slack[1] usually has an answer.

[1] [http://fpchat.com/](http://fpchat.com/) <\- sign up here, invites usually
arrive within 24hrs

------
mwg66
Will this work with VS Code? If not now, in the future?

~~~
cloudroutine
VS Code does not currently support extensions/plugins. The team has confirmed
they're coming at some point[1] but we'll need to see how they set it up to
determine the best approach to building an F# plugin for it.

Ionide definitely won't be compatible out the gate, but if the API isn't too
different we might be able to reuse some of what we've already done.

The best case scenario would be the if plugin system supports dlls so that we
could use the FSharp.Compiler.Service directly[2]

[1] [http://visualstudio.uservoice.com/forums/293070-visual-
studi...](http://visualstudio.uservoice.com/forums/293070-visual-studio-
code/suggestions/7752408-plugin-system)

[2]
[http://fsharp.github.io/FSharp.Compiler.Service/](http://fsharp.github.io/FSharp.Compiler.Service/)

~~~
mwg66
Understood. Thanks! Nice work.

------
marpstar
Looks very nice. Since you're using the FSharp compiler services, does that
mean this supports "intellisense" for Type Providers?

~~~
k_cieslak
Yes. It provides same completions list as in VS or XS, so also support Type
Providers

------
sound418
Do you have document on how to set it up? I'm a newbie with Ionide,fake/paket.
May be I'm used to VS too much

------
edgyswingset
Either I'm missing something or this doesn't support Windows, because
installing the package did absolutely nothing on my machine.

~~~
cloudroutine
Could you try updating the `ionide-installer` plugin? We had some minor issues
over the past 30 mins[1] but they should be resolved now.

We definitely support Windows, I'm running it on Windows 10 right now ;)

[1] [https://github.com/ionide/ionide-
installer/issues/3"](https://github.com/ionide/ionide-installer/issues/3")

~~~
edgyswingset
Still doesn't do anything. I'll investigate further and create an issue on
Github.

