{"id":4981,"date":"2015-12-03T11:22:00","date_gmt":"2015-12-03T11:22:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/dotnet\/2015\/12\/03\/guest-post-announcing-f-support-in-visual-studio-code-with-ionide\/"},"modified":"2021-09-30T14:00:31","modified_gmt":"2021-09-30T21:00:31","slug":"guest-post-announcing-f-support-in-visual-studio-code-with-ionide","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/dotnet\/guest-post-announcing-f-support-in-visual-studio-code-with-ionide\/","title":{"rendered":"[Guest Post] Announcing F# Support in Visual Studio Code with Ionide"},"content":{"rendered":"<p><em>This is a guest post by <a href=\"https:\/\/twitter.com\/k_cieslak\">Krzysztof Cie&#347;lak<\/a>, an F# community developer and contributor to the Ionide project including its Visual Studio Code extension. To learn more about F# and engage with the community, head to <a href=\"http:\/\/blogs.msdn.com\/Microsoft\/dotnet-blog\/blob\/daviste-ionide\/2015\/12-ionide\/fsharp.org\">fsharp.org<\/a>. To learn more about the Ionide project, head to <a href=\"http:\/\/blogs.msdn.com\/Microsoft\/dotnet-blog\/blob\/daviste-ionide\/2015\/12-ionide\/ionide.io\">ionide.io<\/a>.<\/em><\/p>\n<p><a href=\"http:\/\/ionide.io\">Ionide<\/a> is a suite of packages for the <a href=\"https:\/\/atom.io\/\">Atom<\/a> editor that aims to provide a fully-featured, modern, cross-platform, open-source IDE for F# development. It&#8217;s available via download using the Atom Package Manager.<\/p>\n<p>At Connect, we announced the release of a set of Ionide extensions for <a href=\"https:\/\/code.visualstudio.com\/\">Visual Studio Code<\/a>, adding F#, Paket and FAKE support to this newly open-sourced, cross-platform editor.<\/p>\n<h2>What is Ionide?<\/h2>\n<p>Ionide provides the option of a lightweight cross-platform editor for programmers who don&rsquo;t want to rely on Visual Studio or Xamarin Studio for every project. While both are full-featured IDEs with great F# support &#8211; much better in terms of plain language support features &#8211; there are many programmers, especially those coming from a functional programming background, who prefer a different style of tools.<\/p>\n<p>Another important feature of the Ionide project is its integration with popular tools used by the F# community &#8211; such as <a href=\"http:\/\/fsprojects.github.io\/Paket\/\">Paket<\/a> (alternative NuGet client), <a href=\"http:\/\/fsharp.github.io\/FAKE\/\">FAKE<\/a> (F# Make), and the F# Yeoman generator. Ionide enables developers to use this unique, integrated, open source tooling workflow from the comfort of their editor.<\/p>\n<p>Ionide is an eight month-old project with almost 500 commits, 120 versioned releases, and 13 contributors for the core Atom F# support plugin. And now, we&#8217;re excited to start a new pillar of the Ionide project &#8211; Ionide for Visual Studio Code.<\/p>\n<h2>Ionide for Visual Studio Code<\/h2>\n<p>Visual Studio Code is new, cross-platform text editor created by Microsoft that combines the streamlined UI of a modern editor with rich code assistance and navigation, and an integrated debugging experience &ndash; without the need for a full IDE. As such, it has an aim similar to the Ionide project, and the decision to create a set of Visual Studio Code plug-ins was simple and natural.<\/p>\n<h3>How to start<\/h3>\n<p>Ionide plugins for Visual Studio Code can be installed using the new <a href=\"https:\/\/marketplace.visualstudio.com\/#VSCode\">Visual Studio Code extension gallery<\/a> &#8211; <a href=\"https:\/\/marketplace.visualstudio.com\/items\/Ionide.Ionide-fsharp\">Ionide-fsharp<\/a> is one of the featured extensions there, and there are also individual plugins for <a href=\"https:\/\/marketplace.visualstudio.com\/items\/Ionide.Ionide-Paket\">Paket<\/a> and <a href=\"https:\/\/marketplace.visualstudio.com\/items\/Ionide.Ionide-FAKE\">FAKE<\/a>.<\/p>\n<h3>F# support<\/h3>\n<p>Ionide-fsharp provides an F# IDE-like experience in Visual Studio Code, with features like<\/p>\n<ul>\n<li>Better syntax highlighting<\/li>\n<li>Auto-completion<\/li>\n<li>Error highlighting and error list<\/li>\n<li>F# Interactive integration<\/li>\n<li>Tooltips<\/li>\n<li>Go to Declaration<\/li>\n<li>Show symbols in file<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2015\/12\/vscode_demo.gif\" alt=\"\" border=\"0\"><\/p>\n<h3>Paket support<\/h3>\n<p>Paket is package dependency manager for .NET with support for NuGet packages and GitHub repositories. Ionide-Paket allows users to use Paket commands and manage packages without leaving the editor.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2015\/12\/vscode_paket_demo.gif\" alt=\"\" border=\"0\"><\/p>\n<h3>FAKE support<\/h3>\n<p>FAKE (F# Make) is a build automation system with similar capabilities to make and rake. It uses a domain-specific language (DSL) to make it easy to start using FAKE without needing to learn F#. Ionide-FAKE allows the user to run any build target defined in a FAKE build script, define default targets to run using keyboard shortcuts, and cancel any task in progress.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2015\/12\/vscode_fake_demo.gif\" alt=\"\" border=\"0\"><\/p>\n<h3>What&#8217;s next?<\/h3>\n<p>In the near future, we hope to add integration with <a href=\"https:\/\/www.npmjs.com\/package\/generator-fsharp\">F# Yeoman generator<\/a> to Visual Studio code to provide scaffolding for different types of F# projects. We will also work to offer integrations with other popular tools created by community such as <a href=\"http:\/\/fsprojects.github.io\/FSharpLint\/\">FSharpLint<\/a> and <a href=\"https:\/\/github.com\/dungpa\/fantomas\">Fantomas<\/a>. There are also many possible expansions of the core language services &#8211; finding references and symbols across an entire project, or adding support for CodeLens feature of Visual Studio Code. Together, we will build and grow a more vibrant and powerful F# cross-platform ecosystem.<\/p>\n<h2>Contributing to Ionide<\/h2>\n<p>Ionide is open source project hosted on <a href=\"https:\/\/github.com\/ionide\">GitHub<\/a> under an MIT license. We accept pull requests, new feature proposals, and any suggestions on how we can make Ionide better!<\/p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is a guest post by Krzysztof Cie&#347;lak, an F# community developer and contributor to the Ionide project including its Visual Studio Code extension. To learn more about F# and engage with the community, head to fsharp.org. To learn more about the Ionide project, head to ionide.io. Ionide is a suite of packages for the [&hellip;]<\/p>\n","protected":false},"author":343,"featured_media":58792,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[685],"tags":[4,73,148],"class_list":["post-4981","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","tag-net","tag-f","tag-visual-studio-code"],"acf":[],"blog_post_summary":"<p>This is a guest post by Krzysztof Cie&#347;lak, an F# community developer and contributor to the Ionide project including its Visual Studio Code extension. To learn more about F# and engage with the community, head to fsharp.org. To learn more about the Ionide project, head to ionide.io. Ionide is a suite of packages for the [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/4981","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/users\/343"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/comments?post=4981"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/4981\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media\/58792"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media?parent=4981"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/categories?post=4981"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/tags?post=4981"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}