Work toward upstreaming of features from my fork

Author: tuposCreated Sep 13, 2026Updated Sep 13, 2026

Issue Prelude

Please complete these steps and check these boxes (by putting an x inside the brackets) before filing your issue:

  • I have read and understood YCM's [CONTRIBUTING][cont] document.
  • I have read and understood YCM's [CODE_OF_CONDUCT][code] document.
  • I have read and understood YCM's [README][readme], especially the [Frequently Asked Questions][faq] section.
  • I have searched YCM's issue tracker to find issues similar to the one I'm about to report and couldn't find an answer to my problem. ([Example Google search.][search])
  • If filing a bug report, I have included the output of vim --version.
  • If filing a bug report, I have included the output of :YcmDebugInfo.
  • If filing a bug report, I have attached the contents of the logfiles using the :YcmToggleLogs command.
  • If filing a bug report, I have included which OS (including specific OS version) I am using.
  • If filing a bug report, I have included a minimal test case that reproduces my issue, using vim -Nu /path/to/YCM/vimrc_ycm_minimal, including what I expected to happen and what actually happened.
  • If filing a installation failure report, I have included the entire output of install.py (or cmake/make/ninja) including its invocation
  • I understand this is an open-source project staffed by volunteers and that any help I receive is a selfless, heartfelt gift of their free time. I know I am not entitled to anything and will be polite and courteous.
  • I understand my issue may be closed if it becomes obvious I didn't actually perform all of these steps.

Thank you for adhering to this process! It ensures your issue is resolved quickly and that neither your nor our time is needlessly wasted.

Issue Details

History: I use YCM as a daily driver since many years.

However some time ago I tried to use coc.nvim and was using it for several years. However, after they broke something that I did not investigate, which blocked the ui and the editor became unresponsive (this happens on some very large repos) I switched back to YCM and was using since them. However, coc has some features, which are not available in YCM, notably document/highlighting or progress indicator and for some time it was very painful not to have them in YCM. I had some time during my vacation and decided to implement the below list of features in YCM to have feature parity with coc.

Below you could find a list of features that are currently reside inside my fork. I would like to upstream them into the main YCM, such that I do not need to maintain my own fork. Since the below list is quite large I did not want to open a lot of PRs first and wanted to have your opinion first, of whether it is in principle interesting for the project.

If so then I would like to develop some plan on how can we proceed here.

The code in my fork is developed with the help of gpt 5.6 sol, however I do not consider it as AI slop. During development I used the standard approach that I use during my daily work. I reviewed all the changes and guided the development in the direction I like. I invested quite a lot of hours into the below work. Thus the list of changes is not governed by some promt: "go and implement the feature X" without any supervision or review.

Below is the list of changes:

YouCompleteMe changes

  1. Work-done progress UI

    • Track concurrent progress operations.
    • Display progress and an animated spinner through youcompleteme#GetStatus().
    • Emit YcmStatusChanged for statusline integrations.
    • Associate progress with ycmd connection generations.
    • Clear stale progress after crashes, restarts, and explicit server shutdown.
    • Correctly display zero percent and empty report messages.
  2. Neovim feature parity and UI abstraction

    Editor-independent controllers were separated from editor-specific rendering. Vim retains its popup/text-property implementations, while Neovim uses floating windows and extmarks.

    Added or completed Neovim support for:

    • Hover
    • Inlay hints
    • Semantic highlighting
    • Symbol finder
    • Type and call hierarchy
    • Detailed diagnostic popups
    • Diagnostic virtual text
    • Signature help
    • Completion information popups

    Shared list rendering is reused by finder and hierarchy.

  3. Vim/Neovim integration-test parity

    • Reorganized tests into test/shared, test/vim, and test/neovim.
    • All 16 portable integration suites now have Vim and Neovim entry points.
    • Vim has one additional runner-specific suite.
    • Added editor adapters instead of duplicating behavioral test bodies.
    • Expanded finder, hierarchy, hover, diagnostics, semantic-highlighting, inlay-hint, and signature-help coverage.
  4. Request cancellation

    • Added a shared operation manager and cancellable HTTP requests.

    • Integrated cancellation into completion, completion-item resolution, signature help, semantic tokens, inlay hints, commands, hierarchy operations, and FixIt resolution.

    • Preserve pending scrolling-range requests when they still cover the viewport.

    • Cancel requests when their document snapshot or visible range becomes obsolete.

    • Added client-side tracing correlated with ycmd tracing.

    Commits: 36cbdaefb through 458377711.

  5. Automatic document highlighting

    • Request highlights after CursorHold.

    • Track buffer number, changed tick, and cursor position.

    • Cancel or discard stale results.

    • Render with Vim text properties and Neovim extmarks.

    • Use isolated decorations so cleanup does not affect other features.

    • Keep document highlights above semantic highlighting and visible over Vim’s CursorLine.

    • Avoid duplicate requests and flicker after scrolling when the document and cursor snapshot are unchanged.

    • Provide global and buffer-local enablement options.

    • Add shared Vim/Neovim integration tests and documentation.

    Commits: cd2965437 through c633fc456.

  6. Supporting fixes and infrastructure

    • Fixed asynchronous finder request filtering and cursor-position races.
    • Fixed hierarchy redraw and kept its window visible during slow resolution.
    • Fixed polling of completed scrolling-range requests.
    • Stabilized completion tests against asynchronous clangd indexing.
    • Made diagnostic popup tests independent of Vim 9.1.0949 layout changes.
    • Fixed Vim test discovery for functions declared with abort.
    • Centralized Vim/Neovim feature-version checks.
    • Made documentation generation reproducible through Docker.
    • Updated README and generated Vim help for Neovim support and new features.

ycmd changes

  1. LSP work-done progress

    • Advertise work-done progress support.
    • Handle progress-token creation and validate begin/report/end transitions.
    • Forward progress notifications to clients.
    • Tag progress with language-server connection generations.
    • Emit cleanup markers when a connection terminates or is replaced.
    • Return cleanup metadata from StopServer.
    • Avoid additional pending state or locking by making generation-tagged cleanup idempotent.

    Commits: 000d4f3e through 4acdfaf6.

  2. Content-modified retries

    • Fix retry handling for semantic-token and inlay-hint requests.
    • Rebuild retries with fresh JSON-RPC IDs.
    • Retry only ContentModified, with bounded attempts.

    Commit: 728980ac.

  3. Transport safety and generic cancellation

    • Serialize complete TCP writes so concurrent partial writes cannot corrupt the JSON-RPC stream.

    • Introduce operation-scoped cancellation contexts.

    • Allow one client operation to own multiple downstream LSP request IDs.

    • Support $ /cancelRequest, including cancellation arriving before request registration.

    • Retire old cancellation state using a monotonic watermark.

    • Expose cancellation through optional HTTP metadata and an endpoint.

    • Preserve compatibility for other ycmd clients: requests without operation metadata use the original path.

    • Add debug tracing that correlates client operation IDs, handlers, and LSP request IDs.

    Commits: 66284f16 through 5e606fca.

  4. LSP document highlights

    • Advertise document-highlight client support.
    • Send textDocument/documentHighlight using UTF-16 positions.
    • Convert returned ranges to YCM byte-based coordinates.
    • Preserve Text, Read, and Write kinds and normalize missing or unknown kinds to Text.
    • Handle unsupported servers and null responses with stable empty results.
    • Apply ContentModified retries and generic cancellation.
    • Expose a cancellable /document_highlights endpoint.

    Commit: b3cfc851.