chipsenkbeil / chipsenkbeil/distant.nvim

Rewrite plugin for v0.3

Open
#96 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
Lua
Stars
1.4k
Forks
16
PR merge metrics
No merged PRs in 30d

Description

This will serve as the main tracker for progress on v0.3. Currently, it's stored in a branch called `OverhaulUi`, but that branch has evolved into another massive rewrite of the plugin internals. They have shaped out to be much cleaner than in the past (thanks to using the [lua language server](https://github.com/LuaLS/lua-language-server)). Once the work listed is complete, v0.3 will be the official branch and pointed to at the top level (instead of v0.2).

### Engineering

**General**
- [X] Split functionality into `distant-core` and `distant` modules
- [x] Fix telescope integration (it's broken from refactoring)
- [x] Fix Dockerfile and associated tests

**Distant**
- [x] Create primary plugin entrypoint (more things at top-level of distant)
- [x] Revamp settings
- [X] Move server-specific settings to a field within the setup opts
- [X] ~~Add `cwd` support to server settings~~
- [x] Move dir and file mappings out of server `*` and into a top-level `mappings` (we don't need server-specific keybindings for navigation, it should always be the same)
- [x] Allow user to specify edit/up/mkdir/etc nav action by key instead of a map so they don't need to import nav actions and editor to assign them (e.g. `settings.mappings.dir.edit = ''`)
- [x] Create UI windows to visualize better
- [x] "Main Window" - hosts connections, system information, etc.
- [x] Connections tab
- [X] Show manager information
- [X] List active connections you can be from the manager
- [X] List available hosts from server settings
- [X] Be able to switch active connections
- [X] Be able to launch from available hosts
- [x] Be able to connect from available hosts
- [x] ~~Be able to jump to next or previous server connection using `` and ``~~
- [X] System information tab
- [X] Show system information
- [X] Update information whenever a connection is made/switched
- [x] ~~Log tab (???)~~
- [x] ~~Show log output (last X lines?)~~
- [x] ~~Debug tab (???)~~
- [x] ~~Show detailed manager information (pid, uptime, capabilities, pre-existing info?)~~
- [x] ~~Show detailed client information (uptime, capabilities, process list including shells, api, lsp, etc)~~
- [x] Help tab
- [x] Show keybindings similar to `lazy.nvim` style as I like it more than `mason.nvim`
- [x] Make keybindings changeable in settings reflect within help tab
- [x] "Metadata Window" - displays metadata for a file/directory/symlink
- [x] ~~"Toast" - port of [nvim-notify](https://github.com/rcarriga/nvim-notify)~~
- [X] ~~Replace errors with `vim.notify` with `vim.log.levels.ERROR` to be friendlier~~
- [x] ~~Support enabling/disabling "toast" for `vim.notify` in case user has another plugin (like `nvim-notify`) that they want to use~~
- [x] Move search state from plugin to editor since there is only one search at a time (maybe?)
- [x] Support file watching
- [x] Detect changes to files outside of neovim (similar to `FileChangedShell`, or triggering it if possible)
- [x] Understand if buffer has changed and prompt for reloading if so, otherwise reload
- [x] Use metadata to check for things like mtime change, file len change, etc. (cache those locally)
- [x] Support batch requests

**Distant Core**
- [X] Create a user interface library within `distant-core` ported from `mason.nvim`
- [X] Rewrite job api from `utils` into its own module
- [X] Rewrite authentication handling into its own module
- [X] Rewrite API abstraction to be cleaner and work better with language server
- [X] Add an event emitter (also from `mason.nvim`) so we can better capture when actions take place
- [X] Migrate installation logic into its own module
- [X] Create abstraction for version parsing and data
- [X] Create abstraction for destination/URI parsing and data
- [X] Create abstraction for client
- [X] Create abstraction for manager
- [X] Create abstraction for server
- [X] Rewrite CLI builder into standalone module with cleaner design and support for language server
- [X] Clean up `utils` module by removing unused functions, inlining single-use

**Tests**
- [x] Update driver to use new plugin API
- [x] Fix existing e2e tests
- [x] Fix existing unit tests
- [x] Write async versions of e2e API tests

**Bugs**
- https://github.com/chipsenkbeil/distant.nvim/issues/49
- https://github.com/chipsenkbeil/distant.nvim/issues/35
- https://github.com/chipsenkbeil/distant.nvim/issues/16
- https://github.com/chipsenkbeil/distant.nvim/issues/116
- https://github.com/chipsenkbeil/distant.nvim/issues/115

### Documentation

- [ ] Set up vimdoc generation from markdown via [panvimdoc](https://github.com/kdheepak/panvimdoc)
- [ ] Write updated plugin documentation in markdown to host on [distant.rocks](https://github.com/chipsenkbeil/distant.rocks)
- [ ] Provide overview of plugin (what is it? what does it do?)
- [x] Quickstart (basic setup, usage) - the existing quickstart can be repurposed
- [x] Installation guide (vimdoc is outdated, still referencing the library file instead of CLI)
- [ ] Explain health coverage via `:checkhealth distant`
- [x] Documentation of settings (needs to be completely rewritten)
- [x] Documentation of navigation - the existing doc can be reused (need to add metadata and check that up-to-date)
- [x] Documentation of vim commands like `:Distant` and `:DistantInstall` - the existing doc can be reused with tweaks
- [ ] Documentation of extensions - telescope can be reused
- [ ] Documentation of Lua API (e.g. `require('distant')`) - needs to be completely rewritten
- [x] Event subscriptions and kinds of events
- [ ] API field and methods
- [x] Buf field and methods
- [x] Settings field and methods
- [ ] Launch method
- [ ] Connect method
- [ ] Connections method
- [x] Server settings
- [x] Wrap method
- [ ] Utility methods (get/set active client, retrieve manager, retrieve client, cli/cli path)
- [x] FAQ - can be reused
- [ ] Changelog - can be reused, but need to add v0.3 information
- [ ] Credits - can be reused
- [ ] License - can be reused
- [ ] Record video overview of plugin
- [ ] Explain what it does and why
- [ ] Show UI to connect to a server
- [ ] Pull up the diagram to explain how it works
- [ ] Highlight shell usage
- [ ] Highlight LSP server usage
- [ ] Highlight multiple connections usage

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.