Skip to content

feat(picker): add new built-in picker lsp_incoming_calls#1843

Closed
acarl005 wants to merge 8 commits into
folke:mainfrom
acarl005:acarl005/lsp-incoming-calls
Closed

feat(picker): add new built-in picker lsp_incoming_calls#1843
acarl005 wants to merge 8 commits into
folke:mainfrom
acarl005:acarl005/lsp-incoming-calls

Conversation

@acarl005
Copy link
Copy Markdown

@acarl005 acarl005 commented May 2, 2025

Description

This PR adds the equivalent of :Telescope lsp_incoming_calls

Related Issue(s)

This solves #463.

Screenshots

Running this picker on the following buffer (with Rust code and rust-analyzer running):

Screenshot 2025-07-14 at 10 17 38

Produces this result:

Screenshot 2025-07-14 at 10 18 16

async = Async.nop()
end
end

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: I was unable to use the existing request function here. This source is different from the rest in that there is an inner loop of nested LSP requests. Therefore, I've "inlined" the async control flow here. This can be refactored out if there arises a need for this pattern in multiple sources.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 6, 2025

This PR is stale because it has been open 30 days with no activity.

@github-actions github-actions Bot added the stale This issue or PR has been inactive for a while label Jun 6, 2025
@pawelgrzybek
Copy link
Copy Markdown

I would love to understand what the progress is on this one and if there is any way I could help with this one? I'm also very much wondering what is so special about the incoming_calls picker that is present in all other picker packages, but it never landed in Snacks.

@github-actions github-actions Bot removed the stale This issue or PR has been inactive for a while label Jun 25, 2025
@acarl005
Copy link
Copy Markdown
Author

I haven't gotten any attention from maintainers unfortunately.

@acarl005
Copy link
Copy Markdown
Author

acarl005 commented Jul 14, 2025

I changed this so that the picker goes to the specific call site within the caller. This is particularly beneficial if the caller calls the callee in multiple locations, as each will now appear as distinct entries in the picker.

@github-actions
Copy link
Copy Markdown
Contributor

This PR is stale because it has been open 30 days with no activity.

@github-actions github-actions Bot added the stale This issue or PR has been inactive for a while label Aug 14, 2025
@acarl005
Copy link
Copy Markdown
Author

Can I make another plea for maintainer attention? 🙇

@github-actions github-actions Bot removed the stale This issue or PR has been inactive for a while label Aug 15, 2025
@github-actions
Copy link
Copy Markdown
Contributor

This PR is stale because it has been open 30 days with no activity.

@github-actions github-actions Bot added the stale This issue or PR has been inactive for a while label Sep 15, 2025
@acarl005
Copy link
Copy Markdown
Author

Bump

@github-actions github-actions Bot removed the stale This issue or PR has been inactive for a while label Sep 17, 2025
@folke folke added the size/xl Extra large PR (100+ lines changed) label Oct 19, 2025
@folke
Copy link
Copy Markdown
Owner

folke commented Oct 22, 2025

Thank you for this contribution and for solving #463! I really appreciate the effort you put into this.

I've already implemented this feature in commit f042534, which includes both lsp_incoming_calls and lsp_outgoing_calls. Here are the key differences and improvements in my implementation:

Architecture Improvements

1. Unified Call Hierarchy Handler

  • Created a single call_hierarchy() function (lsp/init.lua:428) that handles both incoming and outgoing calls via a boolean flag
  • This eliminates code duplication and makes maintenance easier
  • Both incoming_calls() and outgoing_calls() are now simple wrappers around this unified function

2. New Requester Pattern

  • Introduced a reusable Requester class (lsp/init.lua:99-177) that manages LSP request lifecycle
  • Handles proper request cancellation when the picker is aborted
  • Manages async state and waiting for multiple concurrent requests
  • This pattern is now used across all LSP pickers for consistency

3. Better Range Handling

  • For incoming calls: properly handles fromRanges by creating a deep copy of the from item and updating its selectionRange (lsp/init.lua:451-455)
  • This shows the exact call site location rather than the entire function body
  • For outgoing calls: simply uses the to item (lsp/init.lua:457)

4. Standardized Item Conversion

  • Uses results_to_items() helper function to convert LSP CallHierarchyItems to picker items
  • Ensures consistent formatting and metadata across all LSP pickers
  • Properly handles symbol kinds, file paths, and positions

Comparison to Your Approach

Your implementation (in the PR):

  • Manual async management with custom cancel tracking
  • Inline handling of locations and formatting
  • Specific to incoming calls only
  • ~120 lines of code for one direction

My implementation:

  • Reusable requester pattern for all LSP operations
  • Unified function for both directions
  • Leverages existing helper functions (results_to_items)
  • ~40 lines of core logic for both directions
  • More maintainable and extensible

Added Features

Beyond your PR, I also added:

  • lsp_outgoing_calls picker
  • Proper integration with the new requester pattern
  • Consistent error handling and cancellation

Your work definitely helped inform this implementation. Thanks again for the contribution!


🤖 Generated with Claude Code

Co-Authored-By: Claude noreply@anthropic.com

@folke
Copy link
Copy Markdown
Owner

folke commented Oct 22, 2025

image

@pawelgrzybek
Copy link
Copy Markdown

You are a legend @folke this is the last bit i was missing in the snacks picker. I massively appreciate the hard work you put into this plugin, especially in the last few days. Looks like you closed like millions of issues in the last few days. Thanks!

github-actions Bot added a commit that referenced this pull request Oct 23, 2025
🤖 I have created a release *beep* *boop*
---


##
[2.24.0](v2.23.0...v2.24.0)
(2025-10-23)


### Features

* **bigfile:** disable mini-hipatterns
([#2170](#2170))
([3d4dd13](3d4dd13))
* **dashboard:** optional `filter` for projects. Closes
[#798](#798)
([fe88a07](fe88a07))
* **debug:** allow debug evaluation of block selections
([#1331](#1331))
([231ffae](231ffae))
* **git:** allow configuring extra git args and git cmd args for all git
sources. See [#2178](#2178)
([5782b5c](5782b5c))
* **image:** add icns support
([#2120](#2120))
([9df47bc](9df47bc))
* **image:** added clear fun. Closes
[#1394](#1394)
([30687d1](30687d1))
* **image:** added support for base64 encoded images in url. Closes
[#2304](#2304)
([2c56e10](2c56e10))
* **image:** allow specifying a page number for inlined pdfs
([#1806](#1806))
([3f0fe34](3f0fe34))
* **indent:** pass win to filter func. Closes
[#2307](#2307)
([8116e0b](8116e0b))
* **input:** added support for a custom highlight functions. Closes
[#2216](#2216)
([9b80137](9b80137))
* **layout:** height=0.7 for preview in vscode layout
([c3d6c01](c3d6c01))
* **layout:** static (non-flex) layouts now shrink the root box to fit
the contents. See
[#2035](#2035)
([ba7845b](ba7845b))
* **picker.finder:** added assertions that finder is still running when
receiving results
([a45503b](a45503b))
* **picker.git_diff:** add `base` option to show diff against a merge
base. Useful to see changes on a branch/PR
([7964f04](7964f04))
* **picker.git:** allow passing extra args to git log command for file
renames ([#1964](#1964))
([2aee35d](2aee35d))
* **picker.git:** use default previewer args in git_show
([#1736](#1736))
([f324f96](f324f96))
* **picker.layout:** added `config` hook for resolved layouts. See
[#2035](#2035)
([722f9ea](722f9ea))
* **picker.lsp_config:** added more info to lsp picker
([636be5c](636be5c))
* **picker.lsp:** added lsp_incoming_calls and lsp_outgoing_calls.
Closes [#1843](#1843)
([55d6670](55d6670))
* **picker.lsp:** added option `keep_parents` to `lsp_symbols` (default
`false`). See [#2083](#2083).
closes [#2266](#2266)
([2b9d522](2b9d522))
* **picker.projects:** make max_depth customizable
([#2253](#2253))
([3e9e2e2](3e9e2e2))
* **picker.scratch:** add scratch picker with grep, new and delete
keybinds ([#1019](#1019))
([ca0f8b2](ca0f8b2))
* **picker.select:** select now fits the list to the items independent
of the layout. Closes
[#2035](#2035)
([5c63614](5c63614))
* **picker:** add author field to git log
([#2295](#2295))
([2cf864a](2cf864a))
* **picker:** add exact match position highlighting for grep results
([3b54c8d](3b54c8d))
* **picker:** add git_restore action for git_status picker
([2b22fe7](2b22fe7))
* **picker:** add toggle_regex for grep
([#1594](#1594))
([bd6ee23](bd6ee23))
* **picker:** added `Snacks.picker.tags()` a picker for ctags. Closes
[#1728](#1728)
([4290287](4290287))
* **picker:** added custom options to `vim.ui.select` that snacks can
use for a better select
([264cab1](264cab1))
* **picker:** added live support to `git_log`, which uses `-S` (pickaxe)
to search. Closes
[#1544](#1544)
([c9fa6f7](c9fa6f7))
* **picker:** allow configuring pathspec for git grep
([#2311](#2311))
([57fbda7](57fbda7))
* **picker:** also ignore dot bare git files
([#2058](#2058))
([4bb0dae](4bb0dae))
* **picker:** enhanced resume with multi-state support and flexible API
([bc6c446](bc6c446))
* **picker:** flexible filename format
([#2294](#2294))
([9ad5d53](9ad5d53))
* **picker:** mapped `<c-g>` to `print_cwd` in list. See
[#2244](#2244)
([faa6aba](faa6aba))
* **picker:** Support rmagatti/autosession session manager
([#1825](#1825))
([fc06234](fc06234))
* **picker:** updated Snacks.picker.lsp_config to work with
`vim.lsp.config`
([292d46f](292d46f))
* **picker:** when resuming a source that has nothing to resume, start a
picker with the source instead
([db3c13c](db3c13c))
* **terminal:** minor improvements for user experience
([#2276](#2276))
([39b14c4](39b14c4))
* **toggle:** allow notification customization via function
([#2247](#2247))
([3ccab97](3ccab97))
* **win:** added support for `vim.o.winborder`. Set win.border = true to
use it
([b30523c](b30523c))
* **win:** all existing snacks windows for all plugins now honor
`vim.o.winborder`. Defaults to `rounded` if not set.
([c1737d8](c1737d8))
* **win:** generalize footer options for keys
([#363](#363))
([b8d1719](b8d1719))
* **win:** make split window "stacking" configurable
([e46a094](e46a094))


### Bug Fixes

* **bigfile:** bigfile doesn't work on windows.
([#1969](#1969))
([b4944ff](b4944ff)),
closes [#1722](https://github.com/folke/snacks.nvim/issues/1722)
* **bufdelete:** try alternate buffer first and otherwise last used
buffer
([914c900](914c900))
* **dashboard:** fix path filtering for `recent_files` with `cwd` option
([#2201](#2201))
([057d4ab](057d4ab))
* **dashboard:** oldfiles filter should return a boolean instead of the
result of find. Fixes
[#2283](#2283)
([fcd309f](fcd309f))
* **dashboard:** pcall chansend for dashoard terminal widgets
([dc65ffd](dc65ffd))
* **dashboard:** recent cwd filter matching
([5c4365e](5c4365e))
* **dashboard:** recent_files section not displaying files without cwd
parameter ([#2284](#2284))
([1ed737e](1ed737e))
* **dashboard:** replace deprecated AutoSession command
([#2288](#2288))
([e9228d6](e9228d6))
* **dashboard:** restore showtabline/laststatus when entering another
non-float window. Closes
[#1774](#1774)
([cc69a93](cc69a93))
* **dashboard:** set `border = "none"` on `terminal` sections
([#1643](#1643))
([83f364f](83f364f))
* **dashboard:** update cursor on loading the dashboard. Closes
[#2004](#2004)
([29682a0](29682a0))
* **dashboard:** use fqn for icon. Closes
[#1496](#1496)
([24e92e0](24e92e0))
* **dim:** fixed the issue of dim's scope variable being nil and
outputting… ([#1938](#1938))
([943a3c7](943a3c7))
* **explorer.git:** don't propagate deletes to parent dirs that don't
exist
([835c4cb](835c4cb))
* **explorer.watch:** handle systems where fs_event doesn't return file
names. Closes [#2190](#2190).
Closes [#2032](#2032)
([d6e34b1](d6e34b1))
* **explorer:** mounted directories being detected as non-directories in
Tree:expand ([#2053](#2053))
([7a5eb10](7a5eb10))
* **explorer:** reset main when entering another window. Closes
[#1587](#1587)
([a5d45d5](a5d45d5))
* **git:** always check parents for git root to fix an issue with git
submodules. Closes
[#2143](#2143)
([14dd362](14dd362))
* **gitbrowse:** fixed urls for gitlab
([#2073](#2073))
([9ebf052](9ebf052))
* **gitbrowse:** send commit as a opt when calling gitbrowse
([#2289](#2289))
([a466429](a466429))
* **git:** set `diff.noprefix=false` for `git diff` to ensure correct
format ([#2174](#2174))
([93f43ca](93f43ca))
* **image.terminal:** do only terminal detection for now. Closes
[#2323](#2323)
([6c7ddae](6c7ddae))
* **image:** correct off by one issue in render fallback
([#1560](#1560))
([441bdcd](441bdcd))
* **image:** correct render fallback to handle "editor" relative
position ([#2296](#2296))
([c552cea](c552cea))
* **image:** correct render fallback to handle "editor" relative
position ([#2297](#2297))
([1c3f15c](1c3f15c))
* **image:** detect kitty image protocol through terminal capability
request. Closes
[#1695](#1695)
([43261ba](43261ba))
* **image:** do not save remote image if fetch fails
([#1915](#1915))
([cb6bf05](cb6bf05))
* **image:** ENOENT on preview
([#2301](#2301))
([5173e96](5173e96))
* **image:** hover close in insert mode
([#2215](#2215))
([ef59af0](ef59af0))
* **image:** markdown inline link query for shortened urls
([#1481](#1481))
([2daa1b2](2daa1b2))
* **image:** set winblend=0 for floatwin when use unicode placeholders
([#1615](#1615))
([758e64c](758e64c))
* **image:** skip `\usepackage` in comments and body
([#2325](#2325))
([90227af](90227af))
* **image:** work-around for sha256 not allowed to be a Blob
([92a08ce](92a08ce))
* **indent:** check that win is valid in step. Closes
[#1943](#1943)
([e409f31](e409f31))
* **indent:** nil check before setting extmark
([#1635](#1635))
([02bf7d2](02bf7d2))
* **input:** schedule stopinsert. Fixes
[#1841](#1841)
([ad6cbc8](ad6cbc8))
* **input:** zindex
([67d690d](67d690d))
* **input:** zindex. Closes
[#2302](#2302)
([d491236](d491236))
* **layout:** allocate at least 1 cell for a widget and enlarge/shrink
the root box when needed. Closes
[#2261](#2261)
([71d6d3c](71d6d3c))
* **layout:** allow width/height to be a function. Closes
[#2184](#2184)
([c757d4d](c757d4d))
* **lazygit:** allow extensible user args
([#789](#789))
([da655a3](da655a3))
* **lazygit:** check if default config file exists before adding to
LG_CONFIG_FILE
([#2256](#2256))
([3731644](3731644))
* **main:** get correct winid for prev window
([db399b1](db399b1))
* **notifier:** include icon in padding in minimal style
([#2239](#2239))
([6daef52](6daef52))
* **notifier:** keep filtered notifications in history
([#2209](#2209))
([ac61546](ac61546))
* **picker.actions:** `<c-g>` in list view now prints file path instead
of cwd. Fallback to cwd
([0b0a58a](0b0a58a))
* **picker.actions:** ensure the current window is updated after tabdrop
([#2326](#2326))
([b30121b](b30121b))
* **picker.actions:** multi-action descriptions. Fixes
[#1501](#1501)
([4edf207](4edf207))
* **picker.actions:** take into account if source is `recent` explicitly
([#1920](#1920))
([b9bd8ae](b9bd8ae))
* **picker.core:** respect camelCase for scoring when ignorecase is true
([#1601](#1601))
([a32735b](a32735b))
* **picker.format:** added min_width for truncated paths
([b7f8116](b7f8116))
* **picker.format:** apply hidden file hl group last. Fixes
[#2127](#2127)
([0bf8fe4](0bf8fe4))
* **picker.format:** correcter max_width for truncpath
([a5d2964](a5d2964))
* **picker.format:** simplified resolvable formatters and more correct
([d5b6d30](d5b6d30))
* **picker.git_diff:** use absolute path when adding buffer to avoid
duplicates ([#1819](#1819))
([a012f39](a012f39))
* **picker.git:** add `ignorecase` for `git_grep`
([#1629](#1629))
([7502e77](7502e77))
* **picker.git:** use unmerged icon for unmerged. Fixes
[#1531](#1531)
([abee3c9](abee3c9))
* **picker.grep:** better line/col parsing. Closes
[#2126](#2126). Fixes
[#2123](#2123)
([1fee799](1fee799))
* **picker.grep:** faulty rg cmd. Closes
[#2280](#2280)
([65a5c8b](65a5c8b))
* **picker.list:** resize when needed. Closes
[#2290](#2290)
([df018ed](df018ed))
* **picker.lsp_config:** cmd can be a function
([ba745ba](ba745ba))
* **picker.lsp:** don't process lsp request results when aborted. Closes
[#2327](#2327)
([4e10708](4e10708))
* **picker.lsp:** move get_clients inside vim.schedule to prevent issues
on Neovim 0.11. Closes
[#2320](#2320)
([79f3a8d](79f3a8d))
* **picker.lsp:** trigger docs workflow
([6f1158f](6f1158f))
* **picker.man:** make tab/split/vsplit work. Closes
[#2171](#2171)
([f39d114](f39d114))
* **picker.marks:** fix buffer checking
([#2287](#2287))
([ca0858a](ca0858a))
* **picker.preview:** better hack to deal with buffer local option
weirdness
([c968d4d](c968d4d))
* **picker.preview:** directory preview should use cwd. Closes
[#2212](#2212). Fixes
[#2093](https://github.com/folke/snacks.nvim/issues/2093)
([d050712](d050712))
* **picker.preview:** don't record previeww searches in history and
prevent scrolling from the top. Closes
[#2305](#2305)
([080320b](080320b))
* **picker.preview:** dont do win-local hack for floating windows
([12b2f0d](12b2f0d))
* **picker.qflist:** error with qflist picker when the list contains
invalid items
([#2293](#2293))
([6af1e76](6af1e76))
* **picker.recent:** include closed / unlisted buffers in recent. Closes
[#1745](#1745)
([5959631](5959631))
* **picker:** add type field to qflist item
([#1538](#1538))
([#1539](#1539))
([125978b](125978b))
* **picker:** added show_delay to config max ms to wait to show if no
results found yet. Closes
[#2206](#2206)
([64583a0](64583a0))
* **picker:** allow some sources to use the current window as main.
Closes [#2012](#2012). See
[#1941](#1941)
([5cda953](5cda953))
* **picker:** correct z-index for preview="main" layout
([e796aef](e796aef))
* **picker:** do not record consecutive duplicate history
([#2040](#2040))
([d0a5310](d0a5310))
* **picker:** fixup for pickers that dont display files
([1b4205e](1b4205e))
* **picker:** load correct actions in list of action names. Closes
[#1501](#1501)
([b064be2](b064be2))
* **picker:** lsp_config now includes any configfured LSP and excludes
deprecated servers
([a0d6eba](a0d6eba))
* **picker:** prevent WinEnter handling during startup
([756a791](756a791))
* **picker:** show_delay config value
([67bb3a7](67bb3a7))
* **picker:** show_delay is in ms. Also increase it to allow
auto_confirm to work properly
([924a930](924a930))
* **picker:** use nvim_paste instead of nvim_put. Closes
[#1941](#1941)
([021e04f](021e04f))
* **projects:** normalize item.text for correct Windows support
([#2275](#2275))
([457596b](457596b))
* **rename:** made rename more robust and make sure target directory
exists. Closes [#2252](#2252)
([c494447](c494447))
* **scope:** allow user to disable keys
([#1918](#1918))
([bebf0bd](bebf0bd))
* **scratch:** branch fallback for detached head
([#1519](#1519))
([98345c7](98345c7))
* **scratch:** hide buffer after formatting when close
([#1523](#1523))
([4379085](4379085))
* **scratch:** use icon[1] when icon is a table to avoid table.concat
error ([#2242](#2242))
([ba90011](ba90011))
* **scroll:** don't animate 1 line scrolls (jk). Closes
[#1620](#1620)
([d293b21](d293b21))
* **scroll:** stop anim and reset state when win has new buf, or buf was
changed. Closes
[#1820](#1820). Closes
[#2221](#2221)
([766f7b8](766f7b8))
* **statuscolumn:** show open folds in consecutive levels
([#1534](#1534))
([7bcd3ba](7bcd3ba))
* **terminal:** check win valid before creating a new terminal
([#1927](#1927))
([ba7bbcd](ba7bbcd))
* **terminal:** make sure terminals opend with `open()` can be found
with `list()`. Closes
[#2172](#2172). Closes
[#2173](#2173)
([13f3006](13f3006))
* **terminal:** set buffer when opening terminal with position='current'
([#2162](#2162))
([2aacf55](2aacf55)),
closes [#2148](#2148)
* **terminal:** stack only terminal splits by default. Closes
[#2137](#2137)
([8c50196](8c50196))
* **util:** fix invalid window error
([#1996](#1996))
([32e5bf1](32e5bf1))
* **util:** only use mini.icons if it has been setup. Closes
[#2199](#2199)
([774bf9d](774bf9d))
* **win:** check parent win is valid before getting size
([#2315](#2315))
([471eb03](471eb03))
* **zen:** make zoom and minimizing work in terminal mode
([#1912](#1912))
([fb54927](fb54927))


### Performance Improvements

* **dashboard:** add basic OSC11 and CSI6n support to terminal sections
(gh 10 seconds faster)
([fb016d2](fb016d2))
* **git:** invoke `git status` with `--no-optional-locks`
([#2175](#2175))
([e441c64](e441c64))
* **grep:** move match parsing to resolve and fix an issue with `.*`
results. Closes
[#2308](#2308)
([1417701](1417701))
* **picker:** set `limit_live=10000` by default. Makes no sense to load
millions of matches when doing live searches.
([04990d0](04990d0))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
@acarl005
Copy link
Copy Markdown
Author

@folke Thank you for taking the time to leave all that feedback! Much appreciated. +1 you're a legend

Barosandu pushed a commit to Barosandu/snacks.nvim that referenced this pull request Jan 20, 2026
Barosandu pushed a commit to Barosandu/snacks.nvim that referenced this pull request Jan 20, 2026
🤖 I have created a release *beep* *boop*
---


##
[2.24.0](folke/snacks.nvim@v2.23.0...v2.24.0)
(2025-10-23)


### Features

* **bigfile:** disable mini-hipatterns
([folke#2170](folke#2170))
([3d4dd13](folke@3d4dd13))
* **dashboard:** optional `filter` for projects. Closes
[folke#798](folke#798)
([fe88a07](folke@fe88a07))
* **debug:** allow debug evaluation of block selections
([folke#1331](folke#1331))
([231ffae](folke@231ffae))
* **git:** allow configuring extra git args and git cmd args for all git
sources. See [folke#2178](folke#2178)
([5782b5c](folke@5782b5c))
* **image:** add icns support
([folke#2120](folke#2120))
([9df47bc](folke@9df47bc))
* **image:** added clear fun. Closes
[folke#1394](folke#1394)
([30687d1](folke@30687d1))
* **image:** added support for base64 encoded images in url. Closes
[folke#2304](folke#2304)
([2c56e10](folke@2c56e10))
* **image:** allow specifying a page number for inlined pdfs
([folke#1806](folke#1806))
([3f0fe34](folke@3f0fe34))
* **indent:** pass win to filter func. Closes
[folke#2307](folke#2307)
([8116e0b](folke@8116e0b))
* **input:** added support for a custom highlight functions. Closes
[folke#2216](folke#2216)
([9b80137](folke@9b80137))
* **layout:** height=0.7 for preview in vscode layout
([c3d6c01](folke@c3d6c01))
* **layout:** static (non-flex) layouts now shrink the root box to fit
the contents. See
[folke#2035](folke#2035)
([ba7845b](folke@ba7845b))
* **picker.finder:** added assertions that finder is still running when
receiving results
([a45503b](folke@a45503b))
* **picker.git_diff:** add `base` option to show diff against a merge
base. Useful to see changes on a branch/PR
([7964f04](folke@7964f04))
* **picker.git:** allow passing extra args to git log command for file
renames ([folke#1964](folke#1964))
([2aee35d](folke@2aee35d))
* **picker.git:** use default previewer args in git_show
([folke#1736](folke#1736))
([f324f96](folke@f324f96))
* **picker.layout:** added `config` hook for resolved layouts. See
[folke#2035](folke#2035)
([722f9ea](folke@722f9ea))
* **picker.lsp_config:** added more info to lsp picker
([636be5c](folke@636be5c))
* **picker.lsp:** added lsp_incoming_calls and lsp_outgoing_calls.
Closes [folke#1843](folke#1843)
([55d6670](folke@55d6670))
* **picker.lsp:** added option `keep_parents` to `lsp_symbols` (default
`false`). See [folke#2083](folke#2083).
closes [folke#2266](folke#2266)
([2b9d522](folke@2b9d522))
* **picker.projects:** make max_depth customizable
([folke#2253](folke#2253))
([3e9e2e2](folke@3e9e2e2))
* **picker.scratch:** add scratch picker with grep, new and delete
keybinds ([folke#1019](folke#1019))
([ca0f8b2](folke@ca0f8b2))
* **picker.select:** select now fits the list to the items independent
of the layout. Closes
[folke#2035](folke#2035)
([5c63614](folke@5c63614))
* **picker:** add author field to git log
([folke#2295](folke#2295))
([2cf864a](folke@2cf864a))
* **picker:** add exact match position highlighting for grep results
([3b54c8d](folke@3b54c8d))
* **picker:** add git_restore action for git_status picker
([2b22fe7](folke@2b22fe7))
* **picker:** add toggle_regex for grep
([folke#1594](folke#1594))
([bd6ee23](folke@bd6ee23))
* **picker:** added `Snacks.picker.tags()` a picker for ctags. Closes
[folke#1728](folke#1728)
([4290287](folke@4290287))
* **picker:** added custom options to `vim.ui.select` that snacks can
use for a better select
([264cab1](folke@264cab1))
* **picker:** added live support to `git_log`, which uses `-S` (pickaxe)
to search. Closes
[folke#1544](folke#1544)
([c9fa6f7](folke@c9fa6f7))
* **picker:** allow configuring pathspec for git grep
([folke#2311](folke#2311))
([57fbda7](folke@57fbda7))
* **picker:** also ignore dot bare git files
([folke#2058](folke#2058))
([4bb0dae](folke@4bb0dae))
* **picker:** enhanced resume with multi-state support and flexible API
([bc6c446](folke@bc6c446))
* **picker:** flexible filename format
([folke#2294](folke#2294))
([9ad5d53](folke@9ad5d53))
* **picker:** mapped `<c-g>` to `print_cwd` in list. See
[folke#2244](folke#2244)
([faa6aba](folke@faa6aba))
* **picker:** Support rmagatti/autosession session manager
([folke#1825](folke#1825))
([fc06234](folke@fc06234))
* **picker:** updated Snacks.picker.lsp_config to work with
`vim.lsp.config`
([292d46f](folke@292d46f))
* **picker:** when resuming a source that has nothing to resume, start a
picker with the source instead
([db3c13c](folke@db3c13c))
* **terminal:** minor improvements for user experience
([folke#2276](folke#2276))
([39b14c4](folke@39b14c4))
* **toggle:** allow notification customization via function
([folke#2247](folke#2247))
([3ccab97](folke@3ccab97))
* **win:** added support for `vim.o.winborder`. Set win.border = true to
use it
([b30523c](folke@b30523c))
* **win:** all existing snacks windows for all plugins now honor
`vim.o.winborder`. Defaults to `rounded` if not set.
([c1737d8](folke@c1737d8))
* **win:** generalize footer options for keys
([folke#363](folke#363))
([b8d1719](folke@b8d1719))
* **win:** make split window "stacking" configurable
([e46a094](folke@e46a094))


### Bug Fixes

* **bigfile:** bigfile doesn't work on windows.
([folke#1969](folke#1969))
([b4944ff](folke@b4944ff)),
closes [folke#1722](folke#1722)
* **bufdelete:** try alternate buffer first and otherwise last used
buffer
([914c900](folke@914c900))
* **dashboard:** fix path filtering for `recent_files` with `cwd` option
([folke#2201](folke#2201))
([057d4ab](folke@057d4ab))
* **dashboard:** oldfiles filter should return a boolean instead of the
result of find. Fixes
[folke#2283](folke#2283)
([fcd309f](folke@fcd309f))
* **dashboard:** pcall chansend for dashoard terminal widgets
([dc65ffd](folke@dc65ffd))
* **dashboard:** recent cwd filter matching
([5c4365e](folke@5c4365e))
* **dashboard:** recent_files section not displaying files without cwd
parameter ([folke#2284](folke#2284))
([1ed737e](folke@1ed737e))
* **dashboard:** replace deprecated AutoSession command
([folke#2288](folke#2288))
([e9228d6](folke@e9228d6))
* **dashboard:** restore showtabline/laststatus when entering another
non-float window. Closes
[folke#1774](folke#1774)
([cc69a93](folke@cc69a93))
* **dashboard:** set `border = "none"` on `terminal` sections
([folke#1643](folke#1643))
([83f364f](folke@83f364f))
* **dashboard:** update cursor on loading the dashboard. Closes
[folke#2004](folke#2004)
([29682a0](folke@29682a0))
* **dashboard:** use fqn for icon. Closes
[folke#1496](folke#1496)
([24e92e0](folke@24e92e0))
* **dim:** fixed the issue of dim's scope variable being nil and
outputting… ([folke#1938](folke#1938))
([943a3c7](folke@943a3c7))
* **explorer.git:** don't propagate deletes to parent dirs that don't
exist
([835c4cb](folke@835c4cb))
* **explorer.watch:** handle systems where fs_event doesn't return file
names. Closes [folke#2190](folke#2190).
Closes [folke#2032](folke#2032)
([d6e34b1](folke@d6e34b1))
* **explorer:** mounted directories being detected as non-directories in
Tree:expand ([folke#2053](folke#2053))
([7a5eb10](folke@7a5eb10))
* **explorer:** reset main when entering another window. Closes
[folke#1587](folke#1587)
([a5d45d5](folke@a5d45d5))
* **git:** always check parents for git root to fix an issue with git
submodules. Closes
[folke#2143](folke#2143)
([14dd362](folke@14dd362))
* **gitbrowse:** fixed urls for gitlab
([folke#2073](folke#2073))
([9ebf052](folke@9ebf052))
* **gitbrowse:** send commit as a opt when calling gitbrowse
([folke#2289](folke#2289))
([a466429](folke@a466429))
* **git:** set `diff.noprefix=false` for `git diff` to ensure correct
format ([folke#2174](folke#2174))
([93f43ca](folke@93f43ca))
* **image.terminal:** do only terminal detection for now. Closes
[folke#2323](folke#2323)
([6c7ddae](folke@6c7ddae))
* **image:** correct off by one issue in render fallback
([folke#1560](folke#1560))
([441bdcd](folke@441bdcd))
* **image:** correct render fallback to handle "editor" relative
position ([folke#2296](folke#2296))
([c552cea](folke@c552cea))
* **image:** correct render fallback to handle "editor" relative
position ([folke#2297](folke#2297))
([1c3f15c](folke@1c3f15c))
* **image:** detect kitty image protocol through terminal capability
request. Closes
[folke#1695](folke#1695)
([43261ba](folke@43261ba))
* **image:** do not save remote image if fetch fails
([folke#1915](folke#1915))
([cb6bf05](folke@cb6bf05))
* **image:** ENOENT on preview
([folke#2301](folke#2301))
([5173e96](folke@5173e96))
* **image:** hover close in insert mode
([folke#2215](folke#2215))
([ef59af0](folke@ef59af0))
* **image:** markdown inline link query for shortened urls
([folke#1481](folke#1481))
([2daa1b2](folke@2daa1b2))
* **image:** set winblend=0 for floatwin when use unicode placeholders
([folke#1615](folke#1615))
([758e64c](folke@758e64c))
* **image:** skip `\usepackage` in comments and body
([folke#2325](folke#2325))
([90227af](folke@90227af))
* **image:** work-around for sha256 not allowed to be a Blob
([92a08ce](folke@92a08ce))
* **indent:** check that win is valid in step. Closes
[folke#1943](folke#1943)
([e409f31](folke@e409f31))
* **indent:** nil check before setting extmark
([folke#1635](folke#1635))
([02bf7d2](folke@02bf7d2))
* **input:** schedule stopinsert. Fixes
[folke#1841](folke#1841)
([ad6cbc8](folke@ad6cbc8))
* **input:** zindex
([67d690d](folke@67d690d))
* **input:** zindex. Closes
[folke#2302](folke#2302)
([d491236](folke@d491236))
* **layout:** allocate at least 1 cell for a widget and enlarge/shrink
the root box when needed. Closes
[folke#2261](folke#2261)
([71d6d3c](folke@71d6d3c))
* **layout:** allow width/height to be a function. Closes
[folke#2184](folke#2184)
([c757d4d](folke@c757d4d))
* **lazygit:** allow extensible user args
([folke#789](folke#789))
([da655a3](folke@da655a3))
* **lazygit:** check if default config file exists before adding to
LG_CONFIG_FILE
([folke#2256](folke#2256))
([3731644](folke@3731644))
* **main:** get correct winid for prev window
([db399b1](folke@db399b1))
* **notifier:** include icon in padding in minimal style
([folke#2239](folke#2239))
([6daef52](folke@6daef52))
* **notifier:** keep filtered notifications in history
([folke#2209](folke#2209))
([ac61546](folke@ac61546))
* **picker.actions:** `<c-g>` in list view now prints file path instead
of cwd. Fallback to cwd
([0b0a58a](folke@0b0a58a))
* **picker.actions:** ensure the current window is updated after tabdrop
([folke#2326](folke#2326))
([b30121b](folke@b30121b))
* **picker.actions:** multi-action descriptions. Fixes
[folke#1501](folke#1501)
([4edf207](folke@4edf207))
* **picker.actions:** take into account if source is `recent` explicitly
([folke#1920](folke#1920))
([b9bd8ae](folke@b9bd8ae))
* **picker.core:** respect camelCase for scoring when ignorecase is true
([folke#1601](folke#1601))
([a32735b](folke@a32735b))
* **picker.format:** added min_width for truncated paths
([b7f8116](folke@b7f8116))
* **picker.format:** apply hidden file hl group last. Fixes
[folke#2127](folke#2127)
([0bf8fe4](folke@0bf8fe4))
* **picker.format:** correcter max_width for truncpath
([a5d2964](folke@a5d2964))
* **picker.format:** simplified resolvable formatters and more correct
([d5b6d30](folke@d5b6d30))
* **picker.git_diff:** use absolute path when adding buffer to avoid
duplicates ([folke#1819](folke#1819))
([a012f39](folke@a012f39))
* **picker.git:** add `ignorecase` for `git_grep`
([folke#1629](folke#1629))
([7502e77](folke@7502e77))
* **picker.git:** use unmerged icon for unmerged. Fixes
[folke#1531](folke#1531)
([abee3c9](folke@abee3c9))
* **picker.grep:** better line/col parsing. Closes
[folke#2126](folke#2126). Fixes
[folke#2123](folke#2123)
([1fee799](folke@1fee799))
* **picker.grep:** faulty rg cmd. Closes
[folke#2280](folke#2280)
([65a5c8b](folke@65a5c8b))
* **picker.list:** resize when needed. Closes
[folke#2290](folke#2290)
([df018ed](folke@df018ed))
* **picker.lsp_config:** cmd can be a function
([ba745ba](folke@ba745ba))
* **picker.lsp:** don't process lsp request results when aborted. Closes
[folke#2327](folke#2327)
([4e10708](folke@4e10708))
* **picker.lsp:** move get_clients inside vim.schedule to prevent issues
on Neovim 0.11. Closes
[folke#2320](folke#2320)
([79f3a8d](folke@79f3a8d))
* **picker.lsp:** trigger docs workflow
([6f1158f](folke@6f1158f))
* **picker.man:** make tab/split/vsplit work. Closes
[folke#2171](folke#2171)
([f39d114](folke@f39d114))
* **picker.marks:** fix buffer checking
([folke#2287](folke#2287))
([ca0858a](folke@ca0858a))
* **picker.preview:** better hack to deal with buffer local option
weirdness
([c968d4d](folke@c968d4d))
* **picker.preview:** directory preview should use cwd. Closes
[folke#2212](folke#2212). Fixes
[folke#2093](folke#2093)
([d050712](folke@d050712))
* **picker.preview:** don't record previeww searches in history and
prevent scrolling from the top. Closes
[folke#2305](folke#2305)
([080320b](folke@080320b))
* **picker.preview:** dont do win-local hack for floating windows
([12b2f0d](folke@12b2f0d))
* **picker.qflist:** error with qflist picker when the list contains
invalid items
([folke#2293](folke#2293))
([6af1e76](folke@6af1e76))
* **picker.recent:** include closed / unlisted buffers in recent. Closes
[folke#1745](folke#1745)
([5959631](folke@5959631))
* **picker:** add type field to qflist item
([folke#1538](folke#1538))
([folke#1539](folke#1539))
([125978b](folke@125978b))
* **picker:** added show_delay to config max ms to wait to show if no
results found yet. Closes
[folke#2206](folke#2206)
([64583a0](folke@64583a0))
* **picker:** allow some sources to use the current window as main.
Closes [folke#2012](folke#2012). See
[folke#1941](folke#1941)
([5cda953](folke@5cda953))
* **picker:** correct z-index for preview="main" layout
([e796aef](folke@e796aef))
* **picker:** do not record consecutive duplicate history
([folke#2040](folke#2040))
([d0a5310](folke@d0a5310))
* **picker:** fixup for pickers that dont display files
([1b4205e](folke@1b4205e))
* **picker:** load correct actions in list of action names. Closes
[folke#1501](folke#1501)
([b064be2](folke@b064be2))
* **picker:** lsp_config now includes any configfured LSP and excludes
deprecated servers
([a0d6eba](folke@a0d6eba))
* **picker:** prevent WinEnter handling during startup
([756a791](folke@756a791))
* **picker:** show_delay config value
([67bb3a7](folke@67bb3a7))
* **picker:** show_delay is in ms. Also increase it to allow
auto_confirm to work properly
([924a930](folke@924a930))
* **picker:** use nvim_paste instead of nvim_put. Closes
[folke#1941](folke#1941)
([021e04f](folke@021e04f))
* **projects:** normalize item.text for correct Windows support
([folke#2275](folke#2275))
([457596b](folke@457596b))
* **rename:** made rename more robust and make sure target directory
exists. Closes [folke#2252](folke#2252)
([c494447](folke@c494447))
* **scope:** allow user to disable keys
([folke#1918](folke#1918))
([bebf0bd](folke@bebf0bd))
* **scratch:** branch fallback for detached head
([folke#1519](folke#1519))
([98345c7](folke@98345c7))
* **scratch:** hide buffer after formatting when close
([folke#1523](folke#1523))
([4379085](folke@4379085))
* **scratch:** use icon[1] when icon is a table to avoid table.concat
error ([folke#2242](folke#2242))
([ba90011](folke@ba90011))
* **scroll:** don't animate 1 line scrolls (jk). Closes
[folke#1620](folke#1620)
([d293b21](folke@d293b21))
* **scroll:** stop anim and reset state when win has new buf, or buf was
changed. Closes
[folke#1820](folke#1820). Closes
[folke#2221](folke#2221)
([766f7b8](folke@766f7b8))
* **statuscolumn:** show open folds in consecutive levels
([folke#1534](folke#1534))
([7bcd3ba](folke@7bcd3ba))
* **terminal:** check win valid before creating a new terminal
([folke#1927](folke#1927))
([ba7bbcd](folke@ba7bbcd))
* **terminal:** make sure terminals opend with `open()` can be found
with `list()`. Closes
[folke#2172](folke#2172). Closes
[folke#2173](folke#2173)
([13f3006](folke@13f3006))
* **terminal:** set buffer when opening terminal with position='current'
([folke#2162](folke#2162))
([2aacf55](folke@2aacf55)),
closes [folke#2148](folke#2148)
* **terminal:** stack only terminal splits by default. Closes
[folke#2137](folke#2137)
([8c50196](folke@8c50196))
* **util:** fix invalid window error
([folke#1996](folke#1996))
([32e5bf1](folke@32e5bf1))
* **util:** only use mini.icons if it has been setup. Closes
[folke#2199](folke#2199)
([774bf9d](folke@774bf9d))
* **win:** check parent win is valid before getting size
([folke#2315](folke#2315))
([471eb03](folke@471eb03))
* **zen:** make zoom and minimizing work in terminal mode
([folke#1912](folke#1912))
([fb54927](folke@fb54927))


### Performance Improvements

* **dashboard:** add basic OSC11 and CSI6n support to terminal sections
(gh 10 seconds faster)
([fb016d2](folke@fb016d2))
* **git:** invoke `git status` with `--no-optional-locks`
([folke#2175](folke#2175))
([e441c64](folke@e441c64))
* **grep:** move match parsing to resolve and fix an issue with `.*`
results. Closes
[folke#2308](folke#2308)
([1417701](folke@1417701))
* **picker:** set `limit_live=10000` by default. Makes no sense to load
millions of matches when doing live searches.
([04990d0](folke@04990d0))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs docs-vim picker size/xl Extra large PR (100+ lines changed)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants