asg017 / dataflow

An experimental self-hosted Observable notebook editor, with support for FileAttachments, Secrets, custom standard libraries, and more!
https://alexgarcia.xyz/dataflow/
MIT License
402 stars 24 forks source link

custom `.ojs` is not standardized, why not use markdown with extensions instead #25

Open uptonking opened 3 years ago

uptonking commented 3 years ago
// instead of 

viewof pagesSource = Inputs.textarea({
  rows: 6,
  width: 220,
  label: md`<b>Pages"`,
  value: `Donald_Trump
Mike_Pence
Joe_Biden
Kamala_Harris`,
});

// maybe we can write the popular jsx

<Inputs.textarea rows='6' width='220' {...restProps} />

@asg017 do u feel excited 🤗️

asg017 commented 3 years ago

ya I agree, .ojs right now isn't that great, mostly because it's brand new. There are small things you can do to make it a better experience while developing, like, associating .ojs files with JavaScript in your editor. For example, in VS Code, I have:

"files.associations": {
    "*.ojs": "javascript"
  }

Which associates my .ojs files with VS Code's builtin JavaScript features, like syntax highlighting and autocompletion.

But, .ojs isn't perfectly JavaScript (see Observable’s not JavaScript), so viewof, mutable, and block cells (x = {return 4;}) will erroneously show syntax errors. Autocompletion is based off static analysis on generic JS libraries and not 100% perfect. And prettier/most formatting libraries won't work.

There are other issues on this repo that are tackling some of these problems (mainly #18 for a Dataflow autocomplete features + language server), and I hope to scope out more work for how syntax highlighting, a .ojs prettier plugin, and other ways to make .ojs nicer to work with.

I do like the ideas you bring up here, but there are reasons I want to stick with .ojs. Other people can definitely build things that compile to .ojs (for example, a tool that compiles your jsx example to .ojs, or a custom mdx format that compiles to .ojs). But staying with .ojs makes the Dataflow compiling process very straightforward, any other format would require pre-processing which would add complexity. Also, I want to make it as easy as possible to copy+paste examples on observablehq.com into Dataflow Observable notebooks, so .ojs makes that straightforward.