Commit Graph

36 Commits

Author SHA1 Message Date
27Onion Nebell
1460136dd0 fix: adjust more to make it backward compatible for 0.11- 2025-04-12 12:26:40 +08:00
27Onion Nebell
5779c6f6a7 fix: migrating to 0.11
fix: migrating to 0.11

fix: migrating to 0.11

fix: migrating to 0.11
2025-04-12 00:34:23 +08:00
eph
fb9634cdaa fix: incorrect character of range and selectionRange 2025-02-05 03:23:39 +08:00
~hedy
f7a3940b0e chore(fmt): stylua 2025-01-05 09:14:32 +08:00
eph
38f9a8c586 feat: add man support 2024-12-26 20:51:51 +08:00
~hedy
193e03a7b7 Support neovim < 0.10 for lsp.get_clients 2024-06-05 20:54:26 +08:00
LVIM ORG
e6afff238c Fix deprecated get_active_clients 2024-05-19 12:52:54 +03:00
hedy
ec9571c8f0 Merge branch 'main' of github.com:hedyhli/outline.nvim 2024-03-16 08:13:33 +08:00
hedy
b64c0c66d4 feat(providers): Support independent configs for each provider to handle
Closes #58
2024-03-16 08:12:50 +08:00
Baptiste Zorzi
746b8a6206 [fix] - Fixing Coc symbol parsing bug 2024-01-11 14:06:55 +01:00
hedy
8c6b11e4c2 chore: stylua 2023-12-29 21:50:48 +08:00
hedy
8b2f412b7b fix(providers): Ensure working on nvim-0.7
This commit removed the ability to receive symbols from all attached
clients in the current buffer. Everything works as before when only one
client is attached to a buffer.

This also fixes outline LSP finding clients on nvim-0.7
2023-12-29 19:17:00 +08:00
hedy
982460584f fix(lsp): Use vim.buf.lsp.rename for rename_symbol
Closes #42
2023-12-27 22:14:12 +08:00
hedy
d073791f1c fix: No-op keymaps when there is no provider 2023-12-13 18:40:08 +08:00
hedy
dc942d03c3 chore(fmt): stylua 2023-11-27 20:16:26 +08:00
hedy
80165f0472 feat(providers): Modular hover-symbol support 2023-11-27 20:11:16 +08:00
hedy
8c13999acc feat: Update outline on rename symbol
Also added ability to show provider status from code_action and
rename_symbol
2023-11-26 20:44:42 +08:00
hedy
5b70292780 Refactor symbol types 2023-11-26 16:49:25 +08:00
hedy
b90174c6c2 refactor: Provider symbol actions
It makes sense to store the provider each sidebar is using with own
self.provider fields, no way that did not occur to me before this.

The old `_G._outline_current_provider` ironically, can now be replaced
by `require('outline').current.provider`.
2023-11-26 15:14:42 +08:00
hedy
9f69f12161 refactor: Reorganize modules
Primarily:
- Utils
- Sidebar (removed the need of writer.lua)
- Resolve keymaps shortcut in config eraly
- Put highlight functions into highlight.lua
- Put functions that do stuff on outline window into view.lua
2023-11-26 13:17:18 +08:00
hedy
6cea72f2b5 feat(api): Get symbol and breadcrumb at location
Currently the implementation is very limited.

Ref: #24

- Outline must be open and have been loaded for it to work (requires
  lazy loading or headless loading of Sidebar)
- Empty string returned if cursor is not in any symbol ('closest' symbol
  not yet supported)
- Line column not used
- Returning concatenated symbol names rather than a list of tables with
  node info (requires a refactor of outline.SymbolNode type)
- Subject to config.symbols.filter and folds (requires finding hover
  list somewhere outside of writer.make_outline)
2023-11-25 15:41:55 +08:00
hedy
a7fe7baf5f fix(markdown): Revert a change from a previous commit 2023-11-24 17:13:44 +08:00
hedy
b475574fc0 fix(jsx): Label JSX fragment with Fragment kind 2023-11-24 16:11:25 +08:00
hedy
ebf90dc9ee fix(markdown): Don't include next heading in previous heading's range
Somehow marksman also does this?

As for treesitter (norg) it may be because treesitter includes the
newline and the next line indent until the next heading, so the line of
the next heading is included in the range of the previous heading. We
manually -1 on the range end line to fix it.
2023-11-24 15:04:18 +08:00
hedy
0c6d97d34a fix(jsx): Show shorthand fragments as "Fragment"
Closes #35

Previously the treesitter javascript parser would treat `<></>`
specially and emit a `jsx_fragment`. We were checking for this type here
(from symbols-outline.nvim), though we did not include `jsx_fragment` in
the parse_ts function to even look for it.

jsx_fragment was recently removed from treesitter parser to reduce
complexity, so we will treat all jsx_element's without a `name` field in
`jsx_opening_element` as the shorthand fragment.

Using "Fragment" as the name in this case makes it look exactly the same
as if the user used `<Fragment></Fragment>` instead.

The check for `jsx_fragment` is still kept in case an older version of
the parser is still used, it can probably be removed next year.

Ref:
- tree-sitter/tree-sitter-javascript#227
2023-11-23 18:39:35 +08:00
hedy
d35187ef37 feat: Norg provider and support of external providers
- Closes #3
- Ref: simrat39/symbols-outline.nvim#190

Norg contains indents and different types of verbatim tags, I was rather
lazy to read the spec properly and parse norg using regex line-by-line
like markdown, so used treesitter instead. The only requirement is the
`norg` parser for treesitter to be installed. Tested on nvim 0.7.2.

This should lead the way for supporting vimdoc files in a similar
manner.

Documentation for how external providers could look like as of now has
been added.

In the future we could let the provider determine what to do for each
keymap, such as `goto_location` and `toggle_preview`. This would allow
the zk extension[1] to work properly without having to override existing
functions (bad practice).

[1]: https://github.com/mickael-menu/zk-nvim/discussions/134
2023-11-22 22:16:19 +08:00
hedy
ec4f727631 refactor: Reorganize provider API 2023-11-22 20:55:10 +08:00
hedy
3762402dd3 refactor(providers): Let get_status() return a list of strings instead 2023-11-19 19:02:00 +08:00
hedy
e56145f8dd feat: Proper floating window for keymap help and OutlineStatus
No more obnoxious '}' on the cmdline when pressing `?`!

scope:
- More type hints
- Added class Float for creating floating windows with size that fit the
  content and position centered on the screen
- show_help action for outline window (key `?`) now uses a floating
  window
- :OutlineStatus now provides better information, and shows content in a
  floating window.

future:
- Floating window option configuration
2023-11-18 20:52:50 +08:00
hedy
dc55a8b942 chore(fmt): Finally let's use stylua
Hoping it's as good as go-fmt
2023-11-17 09:28:33 +08:00
hedy
5278eb5b2b feat: Better provider info and fix LSP deprecated warnings
- Provider priorities can now be configured through `providers.priority`

- Each provider can have a get_status() function that returns a string
  for its status. For LSP it returns the client name.

- :OutlineStatus logic refactored, together with provider checking
  functions in `providers/init.lua`

- Switch from vim.lsp.buf_get_clients to vim.lsp.get_active_clients
  (former was deprecated)

- Fixed a careless mistake from symbols-outline that seems to be an
  unreachable bug (lsp)
2023-11-16 15:41:37 +08:00
hedy
22051b6555 chore: More remants of rename 2023-11-16 14:30:04 +08:00
hedy
81ebdc5714 chore: Fix remants of rename 2023-11-15 11:28:09 +08:00
hedy
66aecc7636 MAJOR: Complete rewrite of outline parsing into buffer lines
Scope:
- Parsing of symbol tree
- Producing the flattened tree
- Producing the lines shown in the outline based on the symbol tree
- API of exported functions for parser.lua and writer.lua

Note that the formatting of the outline remains the same as before.

Fixes:
- Guide highlights sometimes cover fold marker areas (may be related to
  the issue brought up by @silvercircle on reddit)
- Guide highlights do not work when using guide markers of different
  widths than the default (such as setting all markers to ascii chars)

All of these issues are now fixed after integrating the a parser
algorithm.

This commit introduces:
1. A better algorithm for flattening & parsing the tree in one go
2. `OutlineFoldMarker` highlight group
3. Fixed inconsistent highlighting of guides and legacy (somewhat weaker
   code), through (1).
4. Minor performance improvements
5. Type hints for the symbol tree
6. Removed several functions from writer.lua and parser.lua due to them
   being merged into writer.make_outline

This can be seen as a breaking change because functions that were
exported had altered behaviours. However I doubt these functions
actually have any critical use outside of this plugin, hence it isn't
really a breaking change as the user-experience remains the same.

The extraneous left padding on the outline window is now a relic of the
past 🎉

The old implementation, parser.get_lines used a flattened tree and was
inefficient, full of off-by-one corrections.

While trying to look for bug fixes in that function I realized it's the
sort of "if it works, don't touch it" portion of code.

Hence, I figured a complete rewrite is necessary.

Now, the function responsible for making the outline lines lives at
writer.make_outline. Building the flattened tree, getting lines, details
and linenos are now done in one go.

This is a tradeoff between modular design and efficiency.

parser.lua still serve important purposes:
- local parse_result function converts the hierarchical tables from
  provider into a nested form tree, used everywhere in outline.nvim. The
  type hint of the return value is now defined -- outline.SymbolNode
- preorder_iter is an iterator that traverses the aforementioned tree in
  pre-order style. First the parents, all the childrens, and so on until
  the last node of the root tree. This is used in writer.make_outline to
  abstract a way the traversal code from the code of making the lines.

Thanks to stack overflow I did not have to consult a DS book to figure
out the cleanest way of this traversal method without using recursion.

This, of course, closes #14 on github.

Note that another minor 'breaking' change is that previously, hl for the
guides where grouped per-character, now they are grouped together for
all the guide markers in the same line. This should not be a problem for
those who only style the fg color for guide hl. However, if you're
styling the bg color, they will now take on that bg collectively rather
than individually.

This change eliminates future maintenance burden because controlling
per-character guide highlights requires careful avoidance of off-by-one
errors.

I have tested most common features to work as before.
I may have missed particular edge cases.

Please take note of "scope" at the top of this commit message.
2023-11-13 14:19:43 +08:00
hedy
a616f44aea feat: Fix markdown provider icon kind
Closes #2
2023-11-12 13:55:22 +08:00
hedy
965a3842c8 MAJOR: Project rename and preparation for v1.0.0
I hope I haven't missed any for the renames!
2023-11-12 12:40:32 +08:00