|
| 1 | +# Juno 1.0 Project |
| 2 | + |
| 3 | +TODO: We may want to migrate this into our future (unified) repository. |
| 4 | + |
| 5 | +## Plans |
| 6 | + |
| 7 | +### Unify `julia-client` and `ink` |
| 8 | + |
| 9 | +Basically we want to migrate `ink` into `julia-client`. |
| 10 | +Instead of just moving code in the former into the latter, |
| 11 | +I would rather create a brand new repository, let's say `JunoLab/Juno`, and put the work into there. |
| 12 | + |
| 13 | +This should give us several _huge_ improvements: |
| 14 | +- **Easy installation/update**: An user just need to install/update only one package |
| 15 | +- **Better startup time**: A loading/activation consumed on deserialization should vastly improve; we can statically serialize/deserialize items without inter-package interactions |
| 16 | + * We may be able to go even future, by deserializing items lazily or something like that |
| 17 | +- Better maintainability |
| 18 | + * E.g.: CI won't break because of incompatibility between julia-client and ink (although we still don't have enough test suites for code in Atom side :P) |
| 19 | + * And also, we can think of `JunoLab/Juno` as a new main repository of our project, i.e. issues/FRs will be bundled there, documentation can be developed there and so on |
| 20 | + |
| 21 | +This will require **tons** of work; we need man power ! |
| 22 | + |
| 23 | +NOTE: |
| 24 | +In theory, the UI components in `ink` are better to be composable, |
| 25 | +and this is why they have been developed separately so far AFAIU. |
| 26 | +But Atom is no longer a popular place to develop an IDE and now |
| 27 | +we want to focus on our benefits rather than the ideal form of software for general uses. |
| 28 | + |
| 29 | +### Ship Julia packages in the unified Atom package |
| 30 | + |
| 31 | +Bundles Julia packages that constitute Juno within `JunoLab/Juno`, as [julia-vscode extension](https://github.com/julia-vscode/julia-vscode) does to some extent. |
| 32 | + |
| 33 | +This also brings several and similar user experience improvements: |
| 34 | +- **Easy installation/update**: Users now don't need to update both Atom and Julia packages separately; what they need to do is only to update `JunoLab/Juno`, the new unified Atom package |
| 35 | +- **Non-interference with user's environment** |
| 36 | + * By hacking on uuids of our Juno-related packages (Julia side), we can trick Julia into seeing them as totally different packages from user's ones, even when they are actually the same or ones with different versions |
| 37 | + * This means Juno users no longer worry about incompatibility between Juno packages and the ones they want to use for their use |
| 38 | + |
| 39 | +### Moar IDE features |
| 40 | + |
| 41 | +We already started to provide (ordinary) IDE features based on static code analysis using [CSTParser](https://github.com/julia-vscode/CSTParser.jl), like outline/goto, but we can go even more further. |
| 42 | + |
| 43 | +Judging from what users require/complain about (and of course from our own interests), these features seem to have high priority: |
| 44 | +- linter implementation: @pfitzseb actually already implemented the linter on UI side, but we still not have its backend implementation on Julia side |
| 45 | +- rename refactor: [WIP here](https://github.com/JunoLab/Atom.jl/pull/203) |
| 46 | +- symbols view: can be nicely integrated with rename refactor feature |
| 47 | +- outline view: can be enhanced more by allowing nested items |
| 48 | + * once it becomes to handle nested items, our outline view can be used for more things, like markdown, TOML, Weave document, etc |
| 49 | + |
| 50 | +For implementing these features, I would like to go with our own implementations, i.e. don't just rely on [StaticLint.jl](https://github.com/julia-vscode/StaticLint.jl), because: |
| 51 | +- caching everything on the first time environment loading isn't preferable from our point of view |
| 52 | +- its linter implementation is sometimes too conservative; maybe it's because it doesn't use runtime information, which can be very helpful for linting, while it's a core functionality of Juno |
| 53 | + |
| 54 | +These features are kinda related to each other. |
| 55 | +First I would like to refactor [our global (goto) symbol cache](https://github.com/JunoLab/Atom.jl/blob/e8abd9b8e19e7100471dd110a4d417817a53d4e2/src/goto.jl#L146-L164) and make it suitable for more general uses, and then we can reuse it for all the things. |
| 56 | +By using user runtime information, it may be possible to enhance their implementations even more. |
| 57 | + |
| 58 | +## Ideas |
| 59 | + |
| 60 | +There are several other things we've wanted to do. |
| 61 | +List them here because they have less priority than things above in terms of releasing Juno 1.0. |
| 62 | + |
| 63 | +- update documentation and showcase our latest features: there are lots of features that only we developers know ! |
| 64 | + * https://github.com/JunoLab/Juno.jl/issues/419 |
| 65 | +- improve module handling: |
| 66 | + * https://github.com/JunoLab/Juno.jl/issues/411 |
| 67 | + * https://github.com/timholy/Revise.jl/issues/391 |
| 68 | + * https://github.com/JunoLab/Juno.jl/issues/407 |
| 69 | +- [Infiltrator.jl](https://github.com/JuliaDebug/Infiltrator.jl) integration |
| 70 | +- [Literate.jl](https://github.com/fredrikekre/Literate.jl) integration |
| 71 | +- improvements on remote sessions |
0 commit comments