roc/design/editor/requirements.md
2022-11-25 12:01:06 +01:00

2.7 KiB

The Editor Must

  • Edit roc code
  • Run plugins asynchronously. Plugins can be standalone or come with roc packages.

The Editor Should

  • Support beginner-friendly projectional editing.
  • Support typed holes.
  • Support temporarily switching to free/legacy editing for operations that are difficult in projectional mode.
  • Allow everyone to write, publish and test plugins.
  • Disregard optional whitespace; there should be only one way to format roc.
  • Provide useful debug UI and relevant data about the state of values.
  • Allow running tests and viewing test results.
  • Search and view documentation.
  • Apply and render basic editing operations in 8.3 ms.
  • Be the most popular roc editor.
  • Be bundled with the roc CLI/compiler.
  • Help find answers to all questions you would normally google.
  • Accommodate those with disabilities better than other popular editors.
  • Provide key familiar features: autocomplete, go to def, find references, rename, show type...
  • Be able to execute core functionality with keyboard, with the exception of plugin functionality.
  • Allow for output and errors that are nicer to read and search through compared to terminal output.
  • Have an integrated REPL.
  • Allow measuring performance of running roc apps.
  • Show which code is covered by tests.
  • Support several chart types, ability to transform data coming from logs, output, and intermediary values (from roc program execution).
  • Support easily generating tests for a function.
  • Indicate progress for slower operations.
  • Provide assistance when upgrading roc/libs to new versions.
  • Make it easy for the user to provide feedback/report problems.
  • Provide tutorials for people with different amounts of programming experience.
  • Provide useful cheat sheets.
  • Accommodate those new to functional programming.
  • Allow viewing editor, library, platform… release notes.
  • Support roc notebooks similar to Jupyter.
  • Support publishing and searching notebooks.
  • Encourage making your code transparent and having a meaningful visual overview.

The Editor Might

  • Warn the user for code patterns that can be written to run significantly faster.
  • Support publishing of roc libraries from the editor.
  • Support conversion for snippets of code from different languages to roc.
  • Support running in the browser.
  • Support code execution on a remote machine while being able to view UI locally.
  • Allow detailed logging so you can see everything you were doing(including plugin actions) when you were for example editing a specific file 3 months ago.
  • Support entering a parseable formatted piece of roc code character by character so that the rendered result in the editor looks exactly like the input. This could make working with a projectional editor more intuitive.