Ionide-vscode-fsharp: Move Expecto into separate plugin

Created on 25 Jun 2017  路  3Comments  路  Source: ionide/ionide-vscode-fsharp

I noticed that I have some Expecto stuff sitting in my toolbar of VS Code even though I don't use Expecto and it also shows up on files where it doesn't make sense at all, like json files, text files, and everything else.

Expecto is a very specific test runner and it is certainly not something that even every F# developer uses and therefore I would suggest this should be moved into a separate plugin which can be installed by the devs who actively opt-in for it.

The main issue I have with it is that the one thing I like the most about VS Code is that I don't have clutter which I don't want. It is fast and light-weight (at least for now) because it comes very light and people only install the few bits they really need (unlike full VS). The Expecto module part of the core Ionide plugin sort of breaks that expectation. Now it might not be a problem yet, but if every plugin over bloats with features which not everyone really needs, then soon VS Code will be just as slow on startup as full VS.

(Even though I hate JavaScript :)) I'd be tempted to work on a PR if you guide me in the right directions.

Let me know what you think!

wontfix

Most helpful comment

Couple of my points:

  1. I do believe that there is huge value in providing happy path, and good out-of-the-box UX for F# tooling - it's something that's clearly missing out (especially outside of VS) and I've been working on for really long time - both working on Ionide for Atom and Code, but more importantly by working on Forge which for example out-of-the-box bundles Paket and FAKE. Adding integration with Expecto is something that is part of this happy path from my point of view.

  2. Expecto is not only module that breaks this expectation - you could give the same argument about MsBuild module, and Forge integration.

  3. I do think that Expecto is best choice for F# idiomatic testing, I'm happy to promote it, and I don't see anything bad about it.

  4. Adding integration with test runner is something that all serious language extensions has done. For example, from top of my head:

    • Omnisharp integrates with NUnit, XUnit, and MsTests (which are idiomatic choices for C#)
    • Python extension integrates with unittest, pytest, and nosetests
  5. Go extension integrates with gotest
  6. Ruby extension integrates with RSpec and Cucumber
  7. Haskelly integrates with QuickCheckand Stack test

  8. There is 0 impact on the startup time, memory usage etc. In Ionide most of the features are started asynchronously, so it doesn't "block" anything. It doesn't distribute Expecto or anything like that - all the integration does is creating few commands that when your run them compiles and run projects that references Expecto.

All 3 comments

Any comment why?

How do you see the expecto stuff, Ive not even seen it?

Couple of my points:

  1. I do believe that there is huge value in providing happy path, and good out-of-the-box UX for F# tooling - it's something that's clearly missing out (especially outside of VS) and I've been working on for really long time - both working on Ionide for Atom and Code, but more importantly by working on Forge which for example out-of-the-box bundles Paket and FAKE. Adding integration with Expecto is something that is part of this happy path from my point of view.

  2. Expecto is not only module that breaks this expectation - you could give the same argument about MsBuild module, and Forge integration.

  3. I do think that Expecto is best choice for F# idiomatic testing, I'm happy to promote it, and I don't see anything bad about it.

  4. Adding integration with test runner is something that all serious language extensions has done. For example, from top of my head:

    • Omnisharp integrates with NUnit, XUnit, and MsTests (which are idiomatic choices for C#)
    • Python extension integrates with unittest, pytest, and nosetests
  5. Go extension integrates with gotest
  6. Ruby extension integrates with RSpec and Cucumber
  7. Haskelly integrates with QuickCheckand Stack test

  8. There is 0 impact on the startup time, memory usage etc. In Ionide most of the features are started asynchronously, so it doesn't "block" anything. It doesn't distribute Expecto or anything like that - all the integration does is creating few commands that when your run them compiles and run projects that references Expecto.

Was this page helpful?
0 / 5 - 0 ratings