Skip to content
This repository was archived by the owner on Dec 4, 2025. It is now read-only.

Conversation

@Dwarf1er
Copy link

@Dwarf1er Dwarf1er commented Aug 8, 2025

As discussed in #92 this PR is adding more documentation to the README and is adding a configuration example for the up and coming vim.pack added to neovim 0.12+.

The original configuration example and the new example are found in doc/CONFIGURATION.md

Hopefully this is good!

Summary by CodeRabbit

  • Documentation
    • Reorganized into a modular Table of Contents with consistent section names and navigation.
    • Corrected typos and tightened wording (semantic highlight guidance, Known Issues, Contributing); added License and community mention.
    • Clarified dependencies and streamlined installation/integration guidance with concise examples and a simplified roslyn ↔ rzls wiring.
    • Added a separate CONFIGURATION guide with multiple setup styles and explicit Razor filetype registration.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Aug 8, 2025

Walkthrough

Major documentation overhaul: README reorganized to center rzls.nvim and seblyng/roslyn.nvim, fixed typos/naming, reorganized installation/configuration examples (lazy.nvim and vim.pack), added License and Known Issues edits, and introduced doc/CONFIGURATION.md with full integration examples and Razor filetype guidance.

Changes

Cohort / File(s) Summary of Changes
README restructure & edits
README.md
Rewrote installation and configuration to focus on rzls.nvim and seblyng/roslyn.nvim; added Table of Contents; renamed/moved sections (Installing rzls.nvim, Configuring rzls.nvim, Configuring seblyng/roslyn.nvim); fixed typos (Diagnostics), tightened semantic highlight note, adjusted feature table, code blocks, regex escaping, diagnostics filtering references, added License and Discord note, and linked doc/CONFIGURATION.md.
New detailed config guide
doc/CONFIGURATION.md
Added full integration examples: lazy.nvim (Manual & Mason variants) and vim.pack (Neovim 0.12+) layouts; plugin specs for seblyng/roslyn.nvim and tris203/rzls.nvim, Razor filetype registration, Roslyn CLI composition (manual & Mason), wiring rzls.nvim handlers into seblyng/roslyn.nvim, and sample LSP settings (inlay hints, code lens, completion, background analysis).
Minor inline documentation tweaks
README.md (inlined fixes)
Compactified notes, refined wording/spacing, normalized naming across examples, fixed Lua pattern escaping in examples (Telescope/Trouble), and adjusted small markup/formatting issues.

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant Neovim
  participant PluginMgr as Plugin Manager (lazy.nvim / vim.pack)
  participant rzls as rzls.nvim
  participant Roslyn as seblyng/roslyn.nvim

  User->>Neovim: Open project/file
  Neovim->>PluginMgr: Load plugins (rzls.nvim, roslyn.nvim)
  PluginMgr->>rzls: require("rzls").setup()
  rzls-->>Neovim: Register handlers & capabilities
  Neovim->>Roslyn: Start LSP (cmd composed manually or via Mason) with handlers & settings
  Roslyn-->>Neovim: Initialize and provide LSP features (diagnostics, inlay hints, code lens, completion)
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related PRs

Suggested reviewers

  • tris203
  • seblyng

Poem

I hop through README, fluff my ears,
I fix the typos, line the gears.
rzls and Roslyn, hand in hand,
Configs tidy across the land.
A carrot for docs — neat and grand. 🥕

Tip

🔌 Remote MCP (Model Context Protocol) integration is now available!

Pro plan users can now connect to remote MCP servers from the Integrations page. Connect with popular remote MCPs such as Notion and Linear to add more context to your reviews and chats.

✨ Finishing Touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbitai help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@Dwarf1er Dwarf1er changed the base branch from 0.12 to main August 11, 2025 01:24
@tris203
Copy link
Owner

tris203 commented Aug 12, 2025

Thanks for the contribution.

Although I like the general feel of this, I'm not sure I like the added recommendation for mason-tool-installer

It also feels like it takes too long to get to the point. I don't think we need to concern ourselves too much with telling people how to install the other LSPs, etc.

I will take another look when you either ping me or mark this ready for review

@Dwarf1er
Copy link
Author

Thanks @tris203 for the feedback!

After reading back what I had written I agree that it wasn't concise enough. I removed all of the Mason examples as well and only kept the configuration that was relevant to the rzls.nvim.

If there are any other improvements you'd like me to make let me know.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 5

🧹 Nitpick comments (8)
doc/CONFIGURATION.md (3)

29-54: Clarify Neovim version requirement for vim.lsp.config/enable

This example uses the new LSP API (vim.lsp.config, vim.lsp.enable) that ships with newer Neovim. Make the version requirement explicit so users on older versions don’t cargo-cult this and fail.

Proposed inline note:

-            vim.lsp.config("roslyn", {
+            -- Neovim 0.12+: using new LSP API
+            vim.lsp.config("roslyn", {

Please also confirm the minimum version intended for the lazy.nvim example (0.12+), as the vim.pack example already targets 0.12+.


95-96: Remove stray plugin require or add it to the structure

require("plugins.nvim-treesitter") is referenced but not part of the described tree. Either list it in the structure and provide a stub or drop the require to avoid confusion.

Apply this diff to remove it:

-require("plugins.nvim-treesitter")

101-116: Be consistent about Roslyn invocation strategy

Here you invoke the roslyn binary directly. In README you show dotnet <dll>. Both are valid depending on install method. Add a brief comment to help users choose and avoid mismatches.

For example:

 local cmd = {
-    "roslyn",
+    -- If you installed a roslyn binary, use "roslyn". Otherwise, prefer:
+    -- "dotnet", vim.fs.joinpath(roslyn_base_path, "Microsoft.CodeAnalysis.LanguageServer.dll"),
+    "roslyn",
README.md (5)

36-55: Fix TOC list indentation (MD007) and keep headings lean

Indentation of nested list items is off, triggering markdownlint MD007. Also consider trimming the TOC to keep the README snappy per maintainer feedback, with deep examples living in doc/CONFIGURATION.md.

Apply this diff to fix indentation:

-      - [lazy.nvim](#lazynvim)
-      - [vim.pack (neovim v0.12+)](#vimpack-neovim-v012)
+    - [lazy.nvim](#lazynvim)
+    - [vim.pack (neovim v0.12+)](#vimpack-neovim-v012)

123-143: Tighten wording and avoid plugin recommendations concern

Two small tweaks:

  • Grammar: use “etc.” (with a period).
  • Path guidance: avoid implying Mason-specific tooling; keep neutral.
-  A table describing what features your LSP client supports (like completion, hover, etc).  
+  A table describing what features your LSP client supports (like completion, hover, etc.).  
@@
-  If you installed `rzls` via Mason, you don't need to set this.  
-  But if you installed it manually, set this to the full path to your `rzls` binary.
+  If you installed `rzls` via a package manager that exposes it on PATH, you can omit this.  
+  Otherwise, set this to the full path of your `rzls` binary.

191-191: Minor wording: prefer concise phrasing

“A variety of custom methods” can be simplified.

-This plugin is still under construction. The Razor Language Server (`rzls`) uses a
-variety of custom methods that need to be understood and implemented. We are
+This plugin is still under construction. The Razor Language Server (`rzls`) uses
+several custom methods that need to be understood and implemented. We are

63-63: Style nit: “inside of” → “inside”

Smoother phrasing per LanguageTool suggestion.

-Provides completions and formatting for HTML inside of `.razor` files.
+Provides completions and formatting for HTML inside `.razor` files.

48-51: Trim ancillary sections to keep README focused (maintainer feedback)

Per maintainer’s comment about getting to the point, consider moving “Additional Configuration” (Telescope, Trouble) into doc/CONFIGURATION.md and linking to it, keeping the README concise.

I can provide a follow-up diff relocating those sections if you agree.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1798c64 and 325488a.

📒 Files selected for processing (2)
  • README.md (4 hunks)
  • doc/CONFIGURATION.md (1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (1)
doc/CONFIGURATION.md (1)
lua/rzls/init.lua (1)
  • M.setup (48-148)
🪛 LanguageTool
README.md

[style] ~63-~63: This phrase is redundant (‘L’ stands for ‘language’). Use simply “HTML”.
Context: ...icrosoft/vscode-html-languageservice) - The HTML language server. Provides completions and format...

(ACRONYM_TAUTOLOGY)


[style] ~63-~63: This phrase is redundant. Consider using “inside”.
Context: ...des completions and formatting for HTML inside of .razor files.
[-> Jump to in...

(OUTSIDE_OF)


[style] ~128-~128: In American English, abbreviations like “etc.” require a period.
Context: ...lient supports (like completion, hover, etc). If you're using a completion plug...

(ETC_PERIOD)


[style] ~191-~191: Consider using a more concise synonym.
Context: ...The Razor Language Server (rzls) uses a variety of custom methods that need to be understo...

(A_VARIETY_OF)

🪛 markdownlint-cli2 (0.17.2)
README.md

43-43: Unordered list indentation
Expected: 4; Actual: 6

(MD007, ul-indent)


44-44: Unordered list indentation
Expected: 4; Actual: 6

(MD007, ul-indent)


60-60: Link fragments should be valid

(MD051, link-fragments)


62-62: Link fragments should be valid

(MD051, link-fragments)


64-64: Link fragments should be valid

(MD051, link-fragments)


66-66: Link fragments should be valid

(MD051, link-fragments)


74-74: Heading levels should only increment by one level at a time
Expected: h3; Actual: h4

(MD001, heading-increment)

🔇 Additional comments (6)
doc/CONFIGURATION.md (2)

55-63: Razor filetypes registration looks good

Pre-registering razor/cshtml filetypes in init is correct and prevents late-detection issues.


118-123: Verify root_markers usage with new LSP API

Double-check that root_markers = { { ".sln", ".csproj", "project.json" }, ".git" } matches the expected schema for vim.lsp.config in Neovim 0.12. If the API expects a flat list or different key (e.g., root_dir pattern), this may be ignored.

Would you like me to generate a small script to scan for existing usages of vim.lsp.config keys in the repo to ensure consistency?

README.md (4)

90-121: Confirm handler placement for roslyn.nvim and version expectations

Placing handlers = require("rzls.roslyn_handlers") under config = { ... } assumes roslyn.nvim passes-through LSP config as-is. Verify against current roslyn.nvim API so users don’t end up with silently ignored handlers. If handlers are top-level in roslyn.nvim’s setup, move accordingly.

If roslyn.nvim requires Neovim 0.12’s vim.lsp.config, consider noting that here too for consistency with doc/CONFIGURATION.md.


16-29: Reconcile CodeLens support status with configuration examples

The Features table marks CodeLens as unsupported (❌) while examples enable ["csharp|code_lens"]. Confirm current support and align the table and examples accordingly.

Would you like me to update the table and examples once you confirm the current behavior for Razor and C# buffers?


180-183: Nice cross-link to examples

Linking out to detailed examples keeps the README focused and discoverable. Good direction.


187-187: Validate currency of this Known Issue

“Opening a CS file first means that roslyn and rzls don't connect properly.” If this has been addressed recently in rzls.nvim or roslyn integration, consider removing or scoping with version notes.

I can search the repo for related issues/commits to verify and update this note—let me know.

Comment on lines 169 to 181
```lua
vim.api.nvim_create_autocmd('LspAttach', {
callback = function(ev)
local client = vim.lsp.get_client_by_id(ev.data.client_id)
if client and client:supports_method(vim.lsp.protocol.Methods.textDocument_completion) then
vim.opt.completeopt = { 'menu', 'menuone', 'noinsert', 'fuzzy', 'popup' }
vim.lsp.completion.enable(true, client.id, ev.buf, { autotrigger = true })
vim.keymap.set('i', '<C-Space>', function()
vim.lsp.completion.get()
end)
end
end,
})
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Scope completion keymap to the buffer and set opts properly

The <C-Space> mapping is currently global and missing options. Also prefer vim.opt_local when adjusting options per-buffer.

Apply this diff:

-    if client and client:supports_method(vim.lsp.protocol.Methods.textDocument_completion) then
-        vim.opt.completeopt = { 'menu', 'menuone', 'noinsert', 'fuzzy', 'popup' }
-        vim.lsp.completion.enable(true, client.id, ev.buf, { autotrigger = true })
-        vim.keymap.set('i', '<C-Space>', function()
-        vim.lsp.completion.get()
-      end)
+    if client and client:supports_method(vim.lsp.protocol.Methods.textDocument_completion) then
+        vim.opt_local.completeopt = { 'menu', 'menuone', 'noinsert', 'fuzzy', 'popup' }
+        vim.lsp.completion.enable(true, client.id, ev.buf, { autotrigger = true })
+        vim.keymap.set('i', '<C-Space>', function()
+            vim.lsp.completion.get()
+        end, { buffer = ev.buf, silent = true, desc = 'LSP: Trigger completion' })
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
```lua
vim.api.nvim_create_autocmd('LspAttach', {
callback = function(ev)
local client = vim.lsp.get_client_by_id(ev.data.client_id)
if client and client:supports_method(vim.lsp.protocol.Methods.textDocument_completion) then
vim.opt.completeopt = { 'menu', 'menuone', 'noinsert', 'fuzzy', 'popup' }
vim.lsp.completion.enable(true, client.id, ev.buf, { autotrigger = true })
vim.keymap.set('i', '<C-Space>', function()
vim.lsp.completion.get()
end)
end
end,
})
vim.api.nvim_create_autocmd('LspAttach', {
callback = function(ev)
local client = vim.lsp.get_client_by_id(ev.data.client_id)
if client and client:supports_method(vim.lsp.protocol.Methods.textDocument_completion) then
vim.opt_local.completeopt = { 'menu', 'menuone', 'noinsert', 'fuzzy', 'popup' }
vim.lsp.completion.enable(true, client.id, ev.buf, { autotrigger = true })
vim.keymap.set('i', '<C-Space>', function()
vim.lsp.completion.get()
end, { buffer = ev.buf, silent = true, desc = 'LSP: Trigger completion' })
end
end,
})
🤖 Prompt for AI Agents
In doc/CONFIGURATION.md around lines 169 to 181, the LspAttach snippet sets
completeopt globally and creates a global <C-Space> mapping without options;
change vim.opt.completeopt to vim.opt_local.completeopt so the option is set
per-buffer, and scope the keymap to the buffer by passing mapping options like
{buffer = ev.buf, noremap = true, silent = true} to vim.keymap.set (keep mode
'i' and the callback), ensuring the mapping is local to the attached buffer and
non-recursive/silent.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🔭 Outside diff range comments (3)
README.md (3)

175-179: Fix Telescope ignore pattern (Lua patterns).

The current pattern “%__virtual.cs$” won’t behave as intended:

  • “%_” is unnecessary (underscore isn’t magic).
  • “.” must be escaped to match a literal dot.

Use a Lua pattern that matches the literal “__virtual.cs” suffix.

-        file_ignore_patterns = { "%__virtual.cs$" },
+        file_ignore_patterns = { "__virtual%.cs$" },

191-195: Fix Trouble filter pattern (Lua patterns).

Same issue as above: escape the dot; no need to escape underscore.

-                    return not string.match(item.basename, [[%__virtual.cs$]])
+                    return not string.match(item.basename, [[__virtual%.cs$]])

115-131: Use mason-registry API for rzls path instead of $MASON

To avoid relying on an environment variable and to actually use the required module, update the Mason example in README.md (lines 115–131) as follows:

• File: README.md
• Section: “#### Mason” code snippet

-local mason_registry = require("mason-registry")
-
-local rzls_path = vim.fn.expand("$MASON/packages/rzls/libexec")
+local mason_registry = require("mason-registry")
+local rzls_pkg = mason_registry.get_package("rzls")
+local rzls_path = vim.fs.joinpath(rzls_pkg:get_install_path(), "libexec")

 local cmd = {
     "roslyn",
     "--stdio",
     "--logLevel=Information",
     "--extensionLogDirectory=" .. vim.fs.dirname(vim.lsp.get_log_path()),
     "--razorSourceGenerator=" .. vim.fs.joinpath(rzls_path, "Microsoft.CodeAnalysis.Razor.Compiler.dll"),
     "--razorDesignTimePath=" .. vim.fs.joinpath(rzls_path, "Targets", "Microsoft.NET.Sdk.Razor.DesignTime.targets"),
     "--extension",
     vim.fs.joinpath(rzls_path, "RazorExtension", "Microsoft.VisualStudioCode.RazorExtension.dll"),
 }

If you prefer to remove Mason usage from the README entirely, consider moving this snippet to doc/CONFIGURATION.md and linking to it instead.

♻️ Duplicate comments (1)
README.md (1)

61-64: Clarify HTML-LSP reference and fix wording (“inside of”).

  • The link currently points to the HTML language service library; most users need a distributable server (often from “vscode-langservers-extracted”).
  • Replace “inside of” with “inside”.
-- [`html-lsp`](https://github.com/microsoft/vscode-html-languageservice) - The HTML language server. Provides completions and formatting for HTML inside of `.razor` files.<br/>
+- [`html-lsp`](https://github.com/microsoft/vscode-html-languageservice) - HTML language server components. Provides completions and formatting for HTML inside `.razor` files. If you need a ready‑to‑run server, consider using the “vscode-langservers-extracted” package.<br/>
🧹 Nitpick comments (4)
README.md (4)

44-44: Capitalize “Neovim” for consistency in the TOC.

Use the proper casing.

-    - [vim.pack (neovim v0.12+)](#vimpack-neovim-v012)
+    - [vim.pack (Neovim v0.12+)](#vimpack-neovim-v012)

80-80: Capitalize “Neovim” in the section heading.

Aligns with project naming and the TOC change above.

-### vim.pack (neovim v0.12+)
+### vim.pack (Neovim v0.12+)

148-151: Punctuation: add period to “etc.”

American English uses “etc.” with a period, even inside parentheses.

-  A table describing what features your LSP client supports (like completion, hover, etc).  
+  A table describing what features your LSP client supports (like completion, hover, etc.).  

212-214: Tighten wording (“a variety of” → concise).

Streamline phrasing for clarity.

-This plugin is still under construction. The Razor Language Server (`rzls`) uses a
-variety of custom methods that need to be understood and implemented. We are
+This plugin is still under construction. The Razor Language Server (`rzls`) uses
+several custom methods that need to be implemented. We are
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 325488a and 01079b6.

📒 Files selected for processing (2)
  • README.md (5 hunks)
  • doc/CONFIGURATION.md (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • doc/CONFIGURATION.md
🧰 Additional context used
🪛 LanguageTool
README.md

[style] ~63-~63: This phrase is redundant (‘L’ stands for ‘language’). Use simply “HTML”.
Context: ...icrosoft/vscode-html-languageservice) - The HTML language server. Provides completions and format...

(ACRONYM_TAUTOLOGY)


[style] ~63-~63: This phrase is redundant. Consider using “inside”.
Context: ...des completions and formatting for HTML inside of .razor files.
- [`seblyng/roslyn...

(OUTSIDE_OF)


[style] ~149-~149: In American English, abbreviations like “etc.” require a period.
Context: ...lient supports (like completion, hover, etc). If you're using a completion plug...

(ETC_PERIOD)


[style] ~212-~212: Consider using a more concise synonym.
Context: ...The Razor Language Server (rzls) uses a variety of custom methods that need to be understo...

(A_VARIETY_OF)

🔇 Additional comments (2)
README.md (2)

72-85: Heading level fix looks good (MD001 resolved).

The installation section now uses H3 under H2, avoiding heading jumps. Thanks for addressing this.


36-57: TOC structure and links look good.

Overall navigation is clear and internally consistent after the restructure.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🔭 Outside diff range comments (1)
README.md (1)

103-113: Manual Roslyn cmd missing Razor extension argument — add --extension to avoid Razor features not loading

Without the Razor VSCode extension DLL, Roslyn won't activate Razor support. The Mason example includes it; the manual one should, too.

Apply this diff to the manual cmd example:

 local cmd = {
     "dotnet",
     vim.fs.joinpath(roslyn_base_path, "Microsoft.CodeAnalysis.LanguageServer.dll"),
     "--stdio",
     "--logLevel=Information",
     "--extensionLogDirectory=" .. vim.fs.dirname(vim.lsp.get_log_path()),
     "--razorSourceGenerator=" .. vim.fs.joinpath(rzls_base_path, "Microsoft.CodeAnalysis.Razor.Compiler.dll"),
     "--razorDesignTimePath="
         .. vim.fs.joinpath(rzls_base_path, "Targets", "Microsoft.NET.Sdk.Razor.DesignTime.targets"),
+    "--extension",
+    vim.fs.joinpath(
+        rzls_base_path,
+        "RazorExtension",
+        "Microsoft.VisualStudioCode.RazorExtension.dll"
+    ),
 }
🧹 Nitpick comments (4)
README.md (4)

61-64: Reference the actual HTML language server package (not the library repo)

Linking to the library repo can mislead users. Point to the extracted LSP package most setups use.

-- [`html-lsp`](https://github.com/microsoft/vscode-html-languageservice) - The HTML language server. Provides completions and formatting for HTML inside `.razor` files.<br/>
+- [`vscode-langservers-extracted` (HTML)](https://github.com/hrsh7th/vscode-langservers-extracted) - HTML language server. Provides completions and formatting for HTML inside `.razor` files.<br/>

32-35: Tighten wording in the semantic highlighting note

Shorter and clearer phrasing helps readers quickly understand what to do.

-> Semantic highlight groups need more configuration. If you find a
-> property that isn't highlighted properly and is identified with `:Inspect`
-> please raise an issue or a PR to link it to a highlight group.
+> Semantic highlight groups may need extra configuration. If `:Inspect` shows a token that's not highlighted correctly, please open an issue or PR to map it to an appropriate highlight group.

149-161: Consider adding a concrete capabilities example (nvim-cmp) to reduce setup friction

Many users will copy-paste this; including a short example avoids common questions.

For example (place after the bullets or near the minimal setup()):

local capabilities = vim.lsp.protocol.make_client_capabilities()
local ok_cmp, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp")
if ok_cmp then
  capabilities = cmp_nvim_lsp.default_capabilities(capabilities)
end

require("rzls").setup({
  capabilities = capabilities,
})

202-205: Pluralize and tighten the link text

Reflect that the target doc has multiple examples.

-For detailed configuration examples, see our [example configuration](./doc/CONFIGURATION.md)
+For detailed setup, see the [configuration examples](./doc/CONFIGURATION.md).
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 01079b6 and 7c2d7df.

📒 Files selected for processing (2)
  • README.md (6 hunks)
  • doc/CONFIGURATION.md (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • doc/CONFIGURATION.md
🧰 Additional context used
🪛 LanguageTool
README.md

[style] ~63-~63: This phrase is redundant (‘L’ stands for ‘language’). Use simply “HTML”.
Context: ...icrosoft/vscode-html-languageservice) - The HTML language server. Provides completions and format...

(ACRONYM_TAUTOLOGY)

🔇 Additional comments (4)
README.md (4)

36-45: TOC anchors and structure look good

Anchors match current headings (including emoji/punctuation slugging). Nice cleanup.


72-85: Installation sections are concise and correctly structured

Heading levels are consistent (H2 → H3). The lazy.nvim and vim.pack snippets are accurate.


176-181: Telescope ignore pattern is correct

Good use of Lua patterns for ignoring generated virtual C# files.


189-196: Confirm Trouble.nvim API compatibility for custom diagnostics filter

This callback shape matches Trouble v3’s new API. If users are on Trouble v2, modes.diagnostics.filter and item.basename won’t exist.

Please verify the docs assume Trouble v3+ (or add a brief note). If you want, I can draft a small note indicating v3 is required for this snippet.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (1)
README.md (1)

60-63: Fix redundant "HTML language server" phrasing.

The term "HTML language server" is redundant since "LSP" already stands for "Language Server Protocol".

Apply this diff to improve the phrasing:

-- [`html-lsp`](https://github.com/microsoft/vscode-html-languageservice) - The HTML language server. Provides completions and formatting for HTML inside `.razor` files.<br/>
+- [`html-lsp`](https://github.com/microsoft/vscode-html-languageservice) - The HTML LSP. Provides completions and formatting for HTML inside `.razor` files.<br/>
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 7c2d7df and 778b55a.

📒 Files selected for processing (2)
  • README.md (6 hunks)
  • doc/CONFIGURATION.md (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • doc/CONFIGURATION.md
🧰 Additional context used
🪛 LanguageTool
README.md

[style] ~62-~62: This phrase is redundant (‘L’ stands for ‘language’). Use simply “HTML”.
Context: ...icrosoft/vscode-html-languageservice) - The HTML language server. Provides completions and format...

(ACRONYM_TAUTOLOGY)

🔇 Additional comments (16)
README.md (16)

16-29: LGTM! Well-formatted feature table.

The feature table is clear and comprehensive, providing a good overview of what's supported and what's not. The checkmarks and X marks make it easy to scan.


32-34: LGTM! Clear guidance for semantic highlighting issues.

The note provides helpful guidance for users encountering semantic highlighting issues and encourages community contributions.


35-56: LGTM! Comprehensive table of contents.

The table of contents is well-structured and provides good navigation for the documentation.


66-67: LGTM! Clear caution about required configuration.

The caution message effectively alerts users to the required configuration and provides a helpful link.


71-83: LGTM! Clear installation instructions for both package managers.

The installation examples for both lazy.nvim and vim.pack are concise and correct. The vim.pack example is particularly valuable for users wanting to use Neovim's built-in package manager.


87-92: LGTM! Excellent introduction to roslyn.nvim configuration.

This section provides clear context about why specific configuration is needed and what the examples will demonstrate. The explanation helps users understand the relationship between the components.


107-110: LGTM! Proper manual installation command structure.

The command structure correctly includes all necessary arguments for manual rzls integration with roslyn.


116-130: LGTM! Clean Mason-based installation example.

The Mason configuration properly uses the Mason registry to locate the rzls installation path and constructs the command correctly.


132-141: LGTM! Clear setup example with handlers.

The final setup example effectively shows how to use the composed command with the required rzls handlers.


145-163: LGTM! Well-documented configuration options.

The configuration section clearly explains each option and provides helpful guidance about when to use them. The simple setup example at the end is perfect.


176-176: LGTM! Correct Telescope ignore pattern.

The file ignore pattern correctly targets the virtual C# files generated by rzls.


192-192: LGTM! Proper Trouble.nvim filtering.

The filter correctly excludes virtual C# files from diagnostics display.


200-203: LGTM! Good reference to detailed configuration.

The reference to the separate configuration documentation is helpful and keeps the README concise while providing access to more detailed examples.


207-208: LGTM! Clear documentation of known issues.

The known issues section clearly states the current limitations, which helps set proper expectations for users.


211-228: LGTM! Encouraging and comprehensive contributing section.

The contributing section strikes a good balance between being welcoming to contributors and being realistic about the current state of the project. The reference to the Discord community is a nice touch.


229-231: LGTM! Added license section.

Good addition of the license section for clarity.

@Dwarf1er Dwarf1er marked this pull request as draft August 13, 2025 00:28
@Dwarf1er Dwarf1er force-pushed the main branch 2 times, most recently from f70740a to 5dd2819 Compare August 13, 2025 01:05
@Dwarf1er Dwarf1er marked this pull request as ready for review August 13, 2025 01:06
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

♻️ Duplicate comments (1)
README.md (1)

60-63: Point to the actual HTML language server (not the library repo)

The link currently targets the vscode-html-languageservice library, not an installable server. Suggest referencing vscode-langservers-extracted (html-languageserver) or lspconfig’s html docs.

-- [`html-lsp`](https://github.com/microsoft/vscode-html-languageservice) - The HTML LSP. Provides completions and formatting for HTML inside `.razor` files.<br/>
+- [`html-lsp`](https://github.com/hrsh7th/vscode-langserver-extracted) - The HTML language server (html-languageserver). Provides completions and formatting for HTML inside `.razor` files.<br/>
+  (Alternatively, see nvim-lspconfig’s html setup if you use it.)
🧹 Nitpick comments (7)
doc/CONFIGURATION.md (5)

28-31: Grammar: “dependency” (singular) and clearer phrasing

The comment reads awkwardly. Use singular and tighten wording.

-                -- By loading as a dependencies, we ensure that we are available to set
-                -- the handlers for Roslyn.
+                -- Load as a dependency so rzls.nvim is available to provide Roslyn handlers.

35-39: Explicitly state Neovim 0.12+ requirement for vim.lsp.config/enable

This snippet uses vim.lsp.config/vim.lsp.enable which are 0.12+ only. Make the requirement obvious to avoid copy-paste confusion on 0.11 and earlier.

-            -- Adjust these paths to where you installed Roslyn and rzls.
+            -- Requires Neovim 0.12+ (uses vim.lsp.config / vim.lsp.enable).
+            -- Adjust these paths to where you installed Roslyn and rzls.

77-86: Avoid duplicating Razor filetype mappings provided by rzls.nvim

rzls.nvim already registers razor/cshtml filetypes internally. Repeating it here is redundant and can confuse readers. Consider removing this block to keep the example lean.

-        init = function()
-            -- We add the Razor file types before the plugin loads.
-            vim.filetype.add({
-                extension = {
-                    razor = "razor",
-                    cshtml = "razor",
-                },
-            })
-        end,
+        -- init = function() end, -- Not needed; rzls.nvim registers Razor filetypes.

96-104: Same grammar nit in the Mason example

Use “dependency” (singular) here too.

-                -- By loading as a dependencies, we ensure that we are available to set
-                -- the handlers for Roslyn.
+                -- Load as a dependency so rzls.nvim is available to provide Roslyn handlers.

147-156: Redundant Razor filetype mappings (Mason variant)

Same redundancy as in the manual variant; rzls.nvim already adds these mappings.

-        init = function()
-            -- We add the Razor file types before the plugin loads.
-            vim.filetype.add({
-                extension = {
-                    razor = "razor",
-                    cshtml = "razor",
-                },
-            })
-        end,
+        -- init = function() end, -- Not needed; rzls.nvim registers Razor filetypes.
README.md (2)

28-29: Clarify CodeLens support scope in Features

You enable Code Lens for C# in examples, while the table marks it unsupported. Clarify that Code Lens is currently for C# (via Roslyn), not Razor buffers.

-| CodeLens              | ❌       |
+| CodeLens              | ❌       |
@@
-> Semantic highlight groups may need extra configuration.
+> Semantic highlight groups may need extra configuration.
+> Note: Code Lens is available for C# buffers via Roslyn; Razor buffers currently do not show Code Lens.

Also applies to: 31-34


69-84: Optionally note the Neovim version requirement near install snippets

Because later examples rely on vim.lsp.config/enable (0.12+), consider a brief note in Installing rzls.nvim to set reader expectations.

-## Installing `rzls.nvim`
+## Installing `rzls.nvim`
+Note: Some configuration examples in this README target Neovim 0.12+ (vim.lsp.config / vim.lsp.enable).
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b34f63f and 5dd2819.

📒 Files selected for processing (2)
  • README.md (6 hunks)
  • doc/CONFIGURATION.md (1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (1)
doc/CONFIGURATION.md (1)
lua/rzls/init.lua (1)
  • M.setup (48-148)
🔇 Additional comments (2)
doc/CONFIGURATION.md (1)

210-246: root_markers is supported in Neovim 0.12’s declarative LSP API

We’ve confirmed that root_markers is a valid key (it’s the shorthand the runtime uses to derive root_dir). No changes are required to the examples in:

  • doc/CONFIGURATION.md lines 210–246
  • doc/CONFIGURATION.md lines 266–302
README.md (1)

132-141: Handlers belong under config as shown
Verified that roslyn.nvim’s setup API expects LSP handlers (along with on_attach, settings, capabilities, etc.) in the nested config table. The snippet in README.md is correct and will work as-is.

Comment on lines +121 to +146
vim.lsp.config("roslyn", {
cmd = cmd,
handlers = require("rzls.roslyn_handlers"),
settings = {
["csharp|inlay_hints"] = {
csharp_enable_inlay_hints_for_implicit_object_creation = true,
csharp_enable_inlay_hints_for_implicit_variable_types = true,

csharp_enable_inlay_hints_for_lambda_parameter_types = true,
csharp_enable_inlay_hints_for_types = true,
dotnet_enable_inlay_hints_for_indexer_parameters = true,
dotnet_enable_inlay_hints_for_literal_parameters = true,
dotnet_enable_inlay_hints_for_object_creation_parameters = true,
dotnet_enable_inlay_hints_for_other_parameters = true,
dotnet_enable_inlay_hints_for_parameters = true,
dotnet_suppress_inlay_hints_for_parameters_that_differ_only_by_suffix = true,
dotnet_suppress_inlay_hints_for_parameters_that_match_argument_name = true,
dotnet_suppress_inlay_hints_for_parameters_that_match_method_intent = true,
},
["csharp|code_lens"] = {
dotnet_enable_references_code_lens = true,
},
},
})
vim.lsp.enable("roslyn")
end,
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Constrain Roslyn to C# buffers and define project roots (Mason variant)

Mirror the manual example: restrict to C# and set root markers.

             vim.lsp.config("roslyn", {
                 cmd = cmd,
                 handlers = require("rzls.roslyn_handlers"),
+                filetypes = { "cs" },
+                root_markers = { { ".sln", ".csproj", "project.json" }, ".git" },
                 settings = {
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
vim.lsp.config("roslyn", {
cmd = cmd,
handlers = require("rzls.roslyn_handlers"),
settings = {
["csharp|inlay_hints"] = {
csharp_enable_inlay_hints_for_implicit_object_creation = true,
csharp_enable_inlay_hints_for_implicit_variable_types = true,
csharp_enable_inlay_hints_for_lambda_parameter_types = true,
csharp_enable_inlay_hints_for_types = true,
dotnet_enable_inlay_hints_for_indexer_parameters = true,
dotnet_enable_inlay_hints_for_literal_parameters = true,
dotnet_enable_inlay_hints_for_object_creation_parameters = true,
dotnet_enable_inlay_hints_for_other_parameters = true,
dotnet_enable_inlay_hints_for_parameters = true,
dotnet_suppress_inlay_hints_for_parameters_that_differ_only_by_suffix = true,
dotnet_suppress_inlay_hints_for_parameters_that_match_argument_name = true,
dotnet_suppress_inlay_hints_for_parameters_that_match_method_intent = true,
},
["csharp|code_lens"] = {
dotnet_enable_references_code_lens = true,
},
},
})
vim.lsp.enable("roslyn")
end,
vim.lsp.config("roslyn", {
cmd = cmd,
handlers = require("rzls.roslyn_handlers"),
filetypes = { "cs" },
root_markers = { { ".sln", ".csproj", "project.json" }, ".git" },
settings = {
["csharp|inlay_hints"] = {
csharp_enable_inlay_hints_for_implicit_object_creation = true,
csharp_enable_inlay_hints_for_implicit_variable_types = true,
csharp_enable_inlay_hints_for_lambda_parameter_types = true,
csharp_enable_inlay_hints_for_types = true,
dotnet_enable_inlay_hints_for_indexer_parameters = true,
dotnet_enable_inlay_hints_for_literal_parameters = true,
dotnet_enable_inlay_hints_for_object_creation_parameters = true,
dotnet_enable_inlay_hints_for_other_parameters = true,
dotnet_enable_inlay_hints_for_parameters = true,
dotnet_suppress_inlay_hints_for_parameters_that_differ_only_by_suffix = true,
dotnet_suppress_inlay_hints_for_parameters_that_match_argument_name = true,
dotnet_suppress_inlay_hints_for_parameters_that_match_method_intent = true,
},
["csharp|code_lens"] = {
dotnet_enable_references_code_lens = true,
},
},
})
vim.lsp.enable("roslyn")
end,
🤖 Prompt for AI Agents
doc/CONFIGURATION.md around lines 121-146: the roslyn LSP setup needs to be
constrained to C# buffers and supply project root detection (Mason/lspconfig
style); update the config block to include filetypes = { "cs" } and add a
root_dir using lspconfig.util.root_pattern (for example root_pattern("*.sln",
"*.csproj", ".git")) so the server only attaches to C# projects and resolves
workspace roots correctly.

Comment on lines +319 to +323
vim.pack.add({ "https://github.com/seblyng/roslyn.nvim.git" })

require("roslyn").setup({
ft = { "cs", "razor" }
})
```
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Avoid attaching Roslyn to Razor filetype

Roslyn should handle C# buffers; Razor is handled by rzls. Including "razor" here risks double-attaching or conflicts.

-require("roslyn").setup({
-    ft = { "cs", "razor" }
-})
+require("roslyn").setup({
+    ft = { "cs" }
+})
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
vim.pack.add({ "https://github.com/seblyng/roslyn.nvim.git" })
require("roslyn").setup({
ft = { "cs", "razor" }
})
```
vim.pack.add({ "https://github.com/seblyng/roslyn.nvim.git" })
require("roslyn").setup({
ft = { "cs" }
})
🤖 Prompt for AI Agents
In doc/CONFIGURATION.md around lines 319 to 324 the example config registers
roslyn for both "cs" and "razor"; this can cause roslyn to attach to Razor
buffers (which should be handled by rzls) and create double-attach/conflicts —
update the example to remove "razor" from the ft list so roslyn only targets C#
(e.g., ft = { "cs" }) and optionally add a brief comment noting that Razor is
handled by rzls to avoid confusion.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

♻️ Duplicate comments (5)
doc/CONFIGURATION.md (5)

25-25: Don’t attach Roslyn to Razor buffers

Roslyn should only target C#; Razor buffers are handled by rzls.nvim. Remove "razor" from the filetypes.

-        ft = { "cs", "razor" },
+        ft = { "cs" },

51-74: Constrain Roslyn by filetype and project roots (prevents misattachment)

Add filetypes and root markers so Roslyn attaches only to C# buffers and resolves the correct workspace root.

             vim.lsp.config("roslyn", {
                 cmd = cmd,
                 handlers = require("rzls.roslyn_handlers"),
+                filetypes = { "cs" },
+                root_markers = { { ".sln", ".csproj", "project.json" }, ".git" },
                 settings = {

96-96: Don’t attach Roslyn to Razor buffers (Mason/lazy example)

Keep Roslyn focused on C#; Razor is managed by rzls.

-        ft = { "cs", "razor" },
+        ft = { "cs" },

121-144: Constrain Roslyn by filetype and roots (Mason/lazy example)

Mirror the manual example: restrict to C# and define roots for predictable workspace detection.

             vim.lsp.config("roslyn", {
                 cmd = cmd,
                 handlers = require("rzls.roslyn_handlers"),
+                filetypes = { "cs" },
+                root_markers = { { ".sln", ".csproj", "project.json" }, ".git" },
                 settings = {

318-323: Avoid registering Roslyn for Razor in vim.pack plugin snippet

Ensure roslyn.nvim only targets C# to prevent double-attach with rzls.

-require("roslyn").setup({
-    ft = { "cs", "razor" }
-})
+require("roslyn").setup({
+    ft = { "cs" }
+})
🧹 Nitpick comments (5)
doc/CONFIGURATION.md (3)

251-253: Resolve rzls path via mason-registry instead of hardcoded $MASON

Using mason-registry is more robust than relying on an env var that may differ across systems.

-require("mason-registry")
-local rzls_path = vim.fn.expand("$MASON/packages/rzls/libexec")
+local mason_registry = require("mason-registry")
+local rzls_pkg = mason_registry.get_package("rzls")
+local rzls_path = vim.fs.joinpath(rzls_pkg:get_install_path(), "libexec")

28-31: Grammar nit: “a dependencies” → “a dependency”

Minor wording fix in the comment.

-                -- By loading as a dependencies, we ensure that we are available to set
+                -- By loading as a dependency, we ensure that we are available to set
                 -- the handlers for Roslyn.

99-101: Grammar nit: “a dependencies” → “a dependency” (Mason block)

Same wording adjustment as above.

-                -- By loading as a dependencies, we ensure that we are available to set
+                -- By loading as a dependency, we ensure that we are available to set
                 -- the handlers for Roslyn.
README.md (2)

62-62: Reference the actual HTML server package and simplify wording

Point to the commonly used server distribution and drop “LSP” tautology.

-- [`html-lsp`](https://github.com/microsoft/vscode-html-languageservice) - The HTML LSP. Provides completions and formatting for HTML inside `.razor` files.<br/>
+- [`vscode-langservers-extracted` (HTML)](https://github.com/hrsh7th/vscode-langservers-extracted) - The HTML language server. Provides completions and formatting for HTML inside `.razor` files.<br/>

131-139: Double-check roslyn.nvim setup shape (“config” nesting and handlers)

Confirm that roslyn.nvim expects handlers under a nested “config” table alongside “cmd”. If the plugin expects top-level keys (e.g., handlers = ... directly), adjust accordingly to match upstream API.

Would you like me to cross-check roslyn.nvim’s latest README and open a follow-up PR if the shape needs tweaking?

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 5dd2819 and 4567b1a.

📒 Files selected for processing (2)
  • README.md (6 hunks)
  • doc/CONFIGURATION.md (1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (1)
doc/CONFIGURATION.md (1)
lua/rzls/init.lua (1)
  • M.setup (48-148)
🪛 LanguageTool
README.md

[grammar] ~16-~16: There might be a mistake here.
Context: ...-- | | Hover | ✅ | | Diagnostics | ✅ | | Go...

(QB_NEW_EN)


[grammar] ~17-~17: There might be a mistake here.
Context: ... | | Diagnostics | ✅ | | Go To Definition | ✅ | | Go...

(QB_NEW_EN)


[grammar] ~18-~18: There might be a mistake here.
Context: ... | | Go To Definition | ✅ | | Go To References | ✅ | | Se...

(QB_NEW_EN)


[grammar] ~19-~19: There might be a mistake here.
Context: ... | | Go To References | ✅ | | Semantic Highlighting | ✅ | | Fo...

(QB_NEW_EN)


[grammar] ~20-~20: There might be a mistake here.
Context: ... | | Semantic Highlighting | ✅ | | Formatting | ✅ | | Re...

(QB_NEW_EN)


[grammar] ~21-~21: There might be a mistake here.
Context: ... | | Formatting | ✅ | | Rename Symbol | ✅ | | Si...

(QB_NEW_EN)


[grammar] ~22-~22: There might be a mistake here.
Context: ... | | Rename Symbol | ✅ | | Signature Help | ✅ | | Co...

(QB_NEW_EN)


[grammar] ~23-~23: There might be a mistake here.
Context: ... | | Signature Help | ✅ | | Completions | ✅ | | In...

(QB_NEW_EN)


[grammar] ~24-~24: There might be a mistake here.
Context: ... | | Completions | ✅ | | Inlay Hints | ✅ | | Co...

(QB_NEW_EN)


[grammar] ~25-~25: There might be a mistake here.
Context: ... | | Inlay Hints | ✅ | | Code Actions | ✅ | | Fo...

(QB_NEW_EN)


[grammar] ~26-~26: There might be a mistake here.
Context: ... | | Code Actions | ✅ | | Folding | ✅ | | Co...

(QB_NEW_EN)


[grammar] ~27-~27: There might be a mistake here.
Context: ... | | Folding | ✅ | | CodeLens | ❌ | | Fo...

(QB_NEW_EN)


[grammar] ~28-~28: There might be a mistake here.
Context: ... | | CodeLens | ❌ | | Format New Files | ❌ | > [...

(QB_NEW_EN)


[grammar] ~35-~35: There might be a mistake here.
Context: ... highlight group. ## Table of Contents - rzls.nvim 🚀 - [Descripti...

(QB_NEW_EN)


[grammar] ~37-~37: There might be a mistake here.
Context: ...tents - rzls.nvim 🚀 - Description 📄 - [Fea...

(QB_NEW_EN)


[grammar] ~38-~38: There might be a mistake here.
Context: ...Description 📄 - Features - [Table of Content...

(QB_NEW_EN)


[grammar] ~39-~39: There might be a mistake here.
Context: ...ion-) - Features - Table of Contents -...

(QB_NEW_EN)


[grammar] ~40-~40: There might be a mistake here.
Context: ... of Contents](#table-of-contents) - Dependencies - [Installi...

(QB_NEW_EN)


[grammar] ~41-~41: There might be a mistake here.
Context: ... - Dependencies - [Installing rzls.nvim](#installing-rzlsnv...

(QB_NEW_EN)


[grammar] ~42-~42: There might be a mistake here.
Context: ...ls.nvim`](#installing-rzlsnvim) - lazy.nvim - [vim.pack (Neo...

(QB_NEW_EN)


[grammar] ~43-~43: There might be a mistake here.
Context: ...m) - lazy.nvim - [vim.pack (Neovim v0.12+)](#vimpack-neovim-...

(QB_NEW_EN)


[grammar] ~44-~44: There might be a mistake here.
Context: ...im v0.12+)](#vimpack-neovim-v012) - [Plugin Configuration](#plugin-configuratio...

(QB_NEW_EN)


[grammar] ~45-~45: There might be a mistake here.
Context: ...uration](#plugin-configuration) - [Configuring seblyng/roslyn.nvim](#config...

(QB_NEW_EN)


[grammar] ~46-~46: There might be a mistake here.
Context: ...onfiguring-seblyngroslynnvim) - Manually - [Mason](#maso...

(QB_NEW_EN)


[grammar] ~47-~47: There might be a mistake here.
Context: ... - Manually - Mason - [Configuring `rzls.nv...

(QB_NEW_EN)


[grammar] ~48-~48: There might be a mistake here.
Context: ...nually) - Mason - [Configuring rzls.nvim](#configuring-rzls...

(QB_NEW_EN)


[grammar] ~49-~49: There might be a mistake here.
Context: ...zls.nvim`](#configuring-rzlsnvim) - [Additional Configuration](#additional-conf...

(QB_NEW_EN)


[grammar] ~50-~50: There might be a mistake here.
Context: ...ion](#additional-configuration) - Telescope.nvim - [Tro...

(QB_NEW_EN)


[grammar] ~51-~51: There might be a mistake here.
Context: ...Telescope.nvim](#telescopenvim) - Trouble.nvim - [Example C...

(QB_NEW_EN)


[grammar] ~52-~52: There might be a mistake here.
Context: ... - Trouble.nvim - [Example Configuration](#example-configurat...

(QB_NEW_EN)


[grammar] ~53-~53: There might be a mistake here.
Context: ...guration](#example-configuration) - Known Issues - [Contribu...

(QB_NEW_EN)


[grammar] ~54-~54: There might be a mistake here.
Context: ... - Known Issues - Contributing - [Helping ...

(QB_NEW_EN)


[grammar] ~55-~55: There might be a mistake here.
Context: ... - Contributing - Helping Out - [License](#...

(QB_NEW_EN)


[grammar] ~58-~58: There might be a mistake here.
Context: ...elping-out) - License ## Dependencies - [roslyn](https://github....

(QB_NEW_EN)


[grammar] ~65-~65: There might be a mistake here.
Context: ...lyn` language server.
> [!CAUTION] > Please see the [configuring seblyng/ro...

(QB_NEW_EN)


[grammar] ~66-~66: There might be a mistake here.
Context: ...r extra arguments that must be passed to > roslyn.nvim setup. ## Installing `r...

(QB_NEW_EN)


[grammar] ~205-~205: There might be a mistake here.
Context: ...at this time, due to path normalization. - Opening a CS file first means that `rosl...

(QB_NEW_EN)


[grammar] ~211-~211: There might be a mistake here.
Context: ...to be understood and implemented. We are actively working on this and appreciate ...

(QB_NEW_EN)


[grammar] ~214-~214: There might be a mistake here.
Context: ...nity for support of new features, fixing bugs, issues or things on the TODO-list ...

(QB_NEW_EN)


[grammar] ~215-~215: There might be a mistake here.
Context: ... (Grep the code for TODO). If you have experience with LSP or Razor and would l...

(QB_NEW_EN)


[grammar] ~216-~216: There might be a mistake here.
Context: ...ntribute, please open a Pull Request. If you encounter any issues or have suggest...

(QB_NEW_EN)

doc/CONFIGURATION.md

[grammar] ~3-~3: There might be a mistake here.
Context: ...figurations

(QB_NEW_EN)


[grammar] ~4-~4: There might be a mistake here.
Context: ...nfigurations)

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ...e](#1-lazynvim-example)
- Manually
- Mason

  • [2. vim.pack example...

(QB_NEW_EN)


[grammar] ~6-~6: There might be a mistake here.
Context: ... - Manually
- Mason

  • [2. vim.pack example (Neovim 0.12+)](#2-v...

(QB_NEW_EN)


[grammar] ~7-~7: There might be a mistake here.
Context: ... - 2. vim.pack example (Neovim 0.12+)
- Overall structure
...

(QB_NEW_EN)


[style] ~8-~8: ‘Overall structure’ might be wordy. Consider a shorter alternative.
Context: ...(#2-vimpack-example-neovim-012)
- Overall structure
- [init.lua...

(EN_WORDINESS_PREMIUM_OVERALL_STRUCTURE)


[grammar] ~11-~11: There might be a mistake here.
Context: ....lua](#lsproslynlua) - [Manually](#manually-1) - [Mason](#mason-1) - [lua/config/fil...

(QB_NEW_EN)


[style] ~165-~165: ‘Overall structure’ might be wordy. Consider a shorter alternative.
Context: ...th vim.pack in Neovim v0.12+

Overall structure

├── init.lua
├── lsp
│   ...

(EN_WORDINESS_PREMIUM_OVERALL_STRUCTURE)

</details>

</details>

</details>

<details>
<summary>🔇 Additional comments (1)</summary><blockquote>

<details>
<summary>README.md (1)</summary>

`201-202`: **Nice: clear pointer to detailed examples**

The link to CONFIGURATION.md is correct and helpful.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->

@Dwarf1er
Copy link
Author

@tris203 Sorry it took a bit, some things came up. I think this should be good, I removed any of the Mason stuff that wasn't in the original README, kept the same general structure that I had before. Should be ready to merge if you are still up for it

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

♻️ Duplicate comments (4)
doc/CONFIGURATION.md (3)

25-25: Do not register Roslyn for the Razor filetype

Including "razor" here risks double-attaching Roslyn to Razor buffers (rzls should own Razor). Limit Roslyn to C# only.

-        ft = { "cs", "razor" },
+        ft = { "cs" },

96-96: Repeat: limit Roslyn to C# in the Mason example

Same rationale as above; avoid attaching Roslyn to Razor buffers.

-        ft = { "cs", "razor" },
+        ft = { "cs" },

318-323: Repeat: avoid attaching Roslyn to Razor in vim.pack plugin setup

Keep this consistent with guidance above and with rzls owning Razor buffers.

-require("roslyn").setup({
-    ft = { "cs", "razor" }
-})
+require("roslyn").setup({
+    ft = { "cs" }
+})
README.md (1)

318-322: Do not include "razor" in roslyn.nvim’s ft list

To prevent double-attach/conflicts, keep Roslyn scoped to C# only; Razor buffers are handled by rzls.

 require("roslyn").setup({
-    ft = { "cs", "razor" }
+    ft = { "cs" }
 })
🧹 Nitpick comments (6)
doc/CONFIGURATION.md (3)

51-74: Constrain Roslyn LSP to C# and define project roots (consistency with later example)

The lazy.nvim “Manually” block starts Roslyn without filetype/root constraints. Mirror the later lsp/roslyn.lua example so Roslyn attaches only to C# buffers and resolves project roots consistently.

             vim.lsp.config("roslyn", {
                 cmd = cmd,
                 handlers = require("rzls.roslyn_handlers"),
+                filetypes = { "cs" },
+                -- Align with the lsp/roslyn.lua example:
+                root_markers = { { ".sln", ".csproj", "project.json" }, ".git" },
                 settings = {

121-147: Apply the same filetype/root constraints in the Mason variant

Keep the two lazy.nvim examples consistent and predictable by adding filetypes/root markers here as well.

             vim.lsp.config("roslyn", {
                 cmd = cmd,
                 handlers = require("rzls.roslyn_handlers"),
+                filetypes = { "cs" },
+                root_markers = { { ".sln", ".csproj", "project.json" }, ".git" },
                 settings = {

17-20: Add a short version note: Neovim 0.12+ required for vim.lsp.config/enable

These examples call vim.lsp.config()/vim.lsp.enable(), which are 0.12+ APIs. Add a one-line note to set expectations for users on older versions.

-## 1. lazy.nvim example
+## 1. lazy.nvim example
+Requires Neovim 0.12+ (uses vim.lsp.config / vim.lsp.enable).
README.md (3)

131-140: Add filetype scoping to the roslyn.nvim setup snippet

The “Configuring seblyng/roslyn.nvim” snippet does not limit Roslyn to C#; include ft = { "cs" } to align with the rest of the docs and avoid Razor attach.

 require("roslyn").setup({
+    -- Restrict Roslyn to C# buffers; Razor is handled by rzls.nvim.
+    ft = { "cs" },
     cmd = cmd,
     config = {
         -- The rest of your Roslyn configuration
         handlers = require("rzls.roslyn_handlers"),
     },
 })

116-118: Use mason-registry consistently or drop it

This example requires("mason-registry") but then reads $MASON directly. Prefer a single approach; using mason-registry provides a robust, portable install path.

-require("mason-registry")
-local rzls_path = vim.fn.expand("$MASON/packages/rzls/libexec")
+local mason_registry = require("mason-registry")
+local rzls_pkg = mason_registry.get_package("rzls")
+local rzls_path = vim.fs.joinpath(rzls_pkg:get_install_path(), "libexec")

69-84: Minor: call out Neovim version where relevant

The install blocks are fine, but the later configuration relies on Neovim 0.12+ APIs. Consider a brief reminder here (or at the start of “Plugin Configuration”) to reduce support questions from users on older versions.

-## Plugin Configuration
+## Plugin Configuration
+Note: Examples below use Neovim 0.12+ (vim.lsp.config / vim.lsp.enable).
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 38e16d3 and b24d43e.

📒 Files selected for processing (2)
  • README.md (6 hunks)
  • doc/CONFIGURATION.md (1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (2)
README.md (2)
lua/rzls/refresh.lua (1)
  • refresh_diagnostics (69-86)
lua/rzls/roslyn_handlers/provideDynamicFileInfo.lua (1)
  • refresh_roslyn_diagnostics (5-14)
doc/CONFIGURATION.md (1)
lua/rzls/init.lua (1)
  • M.setup (48-148)
🪛 LanguageTool
README.md

[grammar] ~16-~16: There might be a mistake here.
Context: ...-- | | Hover | ✅ | | Diagnostics | ✅ | | Go...

(QB_NEW_EN)


[grammar] ~17-~17: There might be a mistake here.
Context: ... | | Diagnostics | ✅ | | Go To Definition | ✅ | | Go...

(QB_NEW_EN)


[grammar] ~18-~18: There might be a mistake here.
Context: ... | | Go To Definition | ✅ | | Go To References | ✅ | | Se...

(QB_NEW_EN)


[grammar] ~19-~19: There might be a mistake here.
Context: ... | | Go To References | ✅ | | Semantic Highlighting | ✅ | | Fo...

(QB_NEW_EN)


[grammar] ~20-~20: There might be a mistake here.
Context: ... | | Semantic Highlighting | ✅ | | Formatting | ✅ | | Re...

(QB_NEW_EN)


[grammar] ~21-~21: There might be a mistake here.
Context: ... | | Formatting | ✅ | | Rename Symbol | ✅ | | Si...

(QB_NEW_EN)


[grammar] ~22-~22: There might be a mistake here.
Context: ... | | Rename Symbol | ✅ | | Signature Help | ✅ | | Co...

(QB_NEW_EN)


[grammar] ~23-~23: There might be a mistake here.
Context: ... | | Signature Help | ✅ | | Completions | ✅ | | In...

(QB_NEW_EN)


[grammar] ~24-~24: There might be a mistake here.
Context: ... | | Completions | ✅ | | Inlay Hints | ✅ | | Co...

(QB_NEW_EN)


[grammar] ~25-~25: There might be a mistake here.
Context: ... | | Inlay Hints | ✅ | | Code Actions | ✅ | | Fo...

(QB_NEW_EN)


[grammar] ~26-~26: There might be a mistake here.
Context: ... | | Code Actions | ✅ | | Folding | ✅ | | Co...

(QB_NEW_EN)


[grammar] ~27-~27: There might be a mistake here.
Context: ... | | Folding | ✅ | | CodeLens | ❌ | | Fo...

(QB_NEW_EN)


[grammar] ~28-~28: There might be a mistake here.
Context: ... | | CodeLens | ❌ | | Format New Files | ❌ | > [...

(QB_NEW_EN)


[grammar] ~35-~35: There might be a mistake here.
Context: ... highlight group. ## Table of Contents - rzls.nvim 🚀 - [Descripti...

(QB_NEW_EN)


[grammar] ~37-~37: There might be a mistake here.
Context: ...tents - rzls.nvim 🚀 - Description 📄 - [Fea...

(QB_NEW_EN)


[grammar] ~38-~38: There might be a mistake here.
Context: ...Description 📄 - Features - [Table of Content...

(QB_NEW_EN)


[grammar] ~39-~39: There might be a mistake here.
Context: ...ion-) - Features - Table of Contents -...

(QB_NEW_EN)


[grammar] ~40-~40: There might be a mistake here.
Context: ... of Contents](#table-of-contents) - Dependencies - [Installi...

(QB_NEW_EN)


[grammar] ~41-~41: There might be a mistake here.
Context: ... - Dependencies - [Installing rzls.nvim](#installing-rzlsnv...

(QB_NEW_EN)


[grammar] ~42-~42: There might be a mistake here.
Context: ...ls.nvim`](#installing-rzlsnvim) - lazy.nvim - [vim.pack (Neo...

(QB_NEW_EN)


[grammar] ~43-~43: There might be a mistake here.
Context: ...m) - lazy.nvim - [vim.pack (Neovim v0.12+)](#vimpack-neovim-...

(QB_NEW_EN)


[grammar] ~44-~44: There might be a mistake here.
Context: ...im v0.12+)](#vimpack-neovim-v012) - [Plugin Configuration](#plugin-configuratio...

(QB_NEW_EN)


[grammar] ~45-~45: There might be a mistake here.
Context: ...uration](#plugin-configuration) - [Configuring seblyng/roslyn.nvim](#config...

(QB_NEW_EN)


[grammar] ~46-~46: There might be a mistake here.
Context: ...onfiguring-seblyngroslynnvim) - Manually - [Mason](#maso...

(QB_NEW_EN)


[grammar] ~47-~47: There might be a mistake here.
Context: ... - Manually - Mason - [Configuring `rzls.nv...

(QB_NEW_EN)


[grammar] ~48-~48: There might be a mistake here.
Context: ...nually) - Mason - [Configuring rzls.nvim](#configuring-rzls...

(QB_NEW_EN)


[grammar] ~49-~49: There might be a mistake here.
Context: ...zls.nvim`](#configuring-rzlsnvim) - [Additional Configuration](#additional-conf...

(QB_NEW_EN)


[grammar] ~50-~50: There might be a mistake here.
Context: ...ion](#additional-configuration) - Telescope.nvim - [Tro...

(QB_NEW_EN)


[grammar] ~51-~51: There might be a mistake here.
Context: ...Telescope.nvim](#telescopenvim) - Trouble.nvim - [Example C...

(QB_NEW_EN)


[grammar] ~52-~52: There might be a mistake here.
Context: ... - Trouble.nvim - [Example Configuration](#example-configurat...

(QB_NEW_EN)


[grammar] ~53-~53: There might be a mistake here.
Context: ...guration](#example-configuration) - Known Issues - [Contribu...

(QB_NEW_EN)


[grammar] ~54-~54: There might be a mistake here.
Context: ... - Known Issues - Contributing - [Helping ...

(QB_NEW_EN)


[grammar] ~55-~55: There might be a mistake here.
Context: ... - Contributing - Helping Out - [License](#...

(QB_NEW_EN)


[grammar] ~58-~58: There might be a mistake here.
Context: ...elping-out) - License ## Dependencies - [roslyn](https://github....

(QB_NEW_EN)


[style] ~62-~62: This phrase is redundant (‘L’ stands for ‘language’). Use simply “HTML”.
Context: ...icrosoft/vscode-html-languageservice) - The HTML language server. Provides completions and format...

(ACRONYM_TAUTOLOGY)


[grammar] ~65-~65: There might be a mistake here.
Context: ...lyn` language server.
> [!CAUTION] > Please see the [configuring seblyng/ro...

(QB_NEW_EN)


[grammar] ~66-~66: There might be a mistake here.
Context: ...r extra arguments that must be passed to > roslyn.nvim setup. ## Installing `r...

(QB_NEW_EN)


[grammar] ~205-~205: There might be a mistake here.
Context: ...at this time, due to path normalization. - Opening a CS file first means that `rosl...

(QB_NEW_EN)


[grammar] ~211-~211: There might be a mistake here.
Context: ...to be understood and implemented. We are actively working on this and appreciate ...

(QB_NEW_EN)


[grammar] ~214-~214: There might be a mistake here.
Context: ...nity for support of new features, fixing bugs, issues or things on the TODO-list ...

(QB_NEW_EN)


[grammar] ~215-~215: There might be a mistake here.
Context: ... (Grep the code for TODO). If you have experience with LSP or Razor and would l...

(QB_NEW_EN)


[grammar] ~216-~216: There might be a mistake here.
Context: ...ntribute, please open a Pull Request. If you encounter any issues or have suggest...

(QB_NEW_EN)

doc/CONFIGURATION.md

[grammar] ~3-~3: There might be a mistake here.
Context: ...figurations

(QB_NEW_EN)


[grammar] ~4-~4: There might be a mistake here.
Context: ...nfigurations)

(QB_NEW_EN)


[grammar] ~5-~5: There might be a mistake here.
Context: ...e](#1-lazynvim-example)
- Manually
- Mason

  • [2. vim.pack example...

(QB_NEW_EN)


[grammar] ~6-~6: There might be a mistake here.
Context: ... - Manually
- Mason

  • [2. vim.pack example (Neovim 0.12+)](#2-v...

(QB_NEW_EN)


[grammar] ~7-~7: There might be a mistake here.
Context: ... - 2. vim.pack example (Neovim 0.12+)
- Overall structure
...

(QB_NEW_EN)


[style] ~8-~8: ‘Overall structure’ might be wordy. Consider a shorter alternative.
Context: ...(#2-vimpack-example-neovim-012)
- Overall structure
- [init.lua...

(EN_WORDINESS_PREMIUM_OVERALL_STRUCTURE)


[grammar] ~11-~11: There might be a mistake here.
Context: ....lua](#lsproslynlua) - [Manually](#manually-1) - [Mason](#mason-1) - [lua/config/fil...

(QB_NEW_EN)


[style] ~165-~165: ‘Overall structure’ might be wordy. Consider a shorter alternative.
Context: ...th vim.pack in Neovim v0.12+

Overall structure

├── init.lua
├── lsp
│   ...

(EN_WORDINESS_PREMIUM_OVERALL_STRUCTURE)

</details>

</details>

</details>

<details>
<summary>🔇 Additional comments (2)</summary><blockquote>

<details>
<summary>doc/CONFIGURATION.md (1)</summary>

`193-246`: **Nice: vim.pack lsp/roslyn.lua example is scoped and complete**

This section cleanly composes the Roslyn cmd, wires rzls handlers, and limits filetypes/root markers. Good reference example.

</details>
<details>
<summary>README.md (1)</summary>

`199-202`: **Good cross-link to detailed configuration**

Pointing to doc/CONFIGURATION.md keeps the README lean and routes advanced users to complete examples. Nice touch.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants