Skip to content

Latest commit

 

History

History
133 lines (109 loc) · 8.26 KB

notes.md

File metadata and controls

133 lines (109 loc) · 8.26 KB

Things to check or do

Plugins

Git plugins

  • neogit Fugitive replacement? (I don't really have any issues with Fugitive though. Maybe I should just learn to use it before maybe)
  • vgit.nvim. Looks interesting
  • diffview.nvim. Interesting looking merge tool and other visual git tools.

LSP related plugins

  • nvim-code-action-menu Shows not only the available code actions but also their effect in a handy diff float. NOTE: Finally got around to testing this and am I not even surprised that it doesn't work with Omnisharp... But it does work with csharp-language-server. Now that I think about it, it's possible that the OmniSharp server has an endpoint under "o#/v2" or just "o#" NOTE: I searched for it. Didn't find anything conclusive. I don't even know if that's a feature in VSCode? I know it is in Visual Studio, but that might not even come from an endpoint. Maybe a diff could be made with the current buffer and a new temporary buffer with the code action applied? Is that even possible or does it directly change the current buffer?
  • sqls.nvim Language server for SQL in Neovim NOTES: Took the time to try it. It works, which is already a good thing, but it's missing a lot of things to be usable. Completion is very lacking for MSSQL (for example I couldn't get any results when search for a user defined table valued function, EXEC is not a keyword, functions are not recognized, etc.). The treesitter syntax is also very incomplete for MSSQL.
  • document-color.nvim Colorizer for LSP colors specifically.
  • lspsaga. I decided against using it some time ago, but it has gotten so much better that it's worth looking into again.

Other

  • nvim-spectre An alternative to CtrlsF (which I've never really taken the time to learn and use properly. Last time I checked it also had issues with Neovim)
  • refactoring.nvim Refactoring library
  • other.nvim Better than my "switcher" thing?
  • nvim-quick-switcher Yet another "switcher" thing.
  • nvim-ufo Better & faster folds. NOTES: Tried it. Looks amazing. Exactly what I want. But. It's buggy and doesn't behave nearly the same as with normal folds. Will be worth checking again later (just like how indent-blankline was unusable until it got to the point where it did exactly what I needed it to do)
  • exrc.nvim Per project config in lua
  • vim-sleuth Detect file indentation automatically
  • recipe.nvim Load workspace local "recipes" (similar to vscode "tasks").
  • nvim-hlslens Improve "*" and "#" motions
  • persistent-breakpoints.nvim Keep breakpoints after closing and reopening neovim.
  • colortils.nvim. Color utilities.
  • :h foldminlines & :h foldnestmax
  • Use one of the ts rainbow forks that's actually maintained: this or this
  • Automatically enable and disable hlsearch. Either using auto-hlsearch.nvim, hlsearch.nvim or simply this snippet from TWiN.
  • oil.nvim
  • nvim-tree-docs. Documentation generator
  • coq_nvim. Surprisingly fast, but until it has better visual customization, I can't really replace cmp :/ See this issue for more info. Also requires python3 and sqlite to be installed. Very annoying tbh.

OmniSharp-nvim plugin ideas/wishlist

These ideas mostly come from the OmniSharp-vim plugin

  • Create file with namespace. Could be based on path relative to Solution (or csproj) (csproj or solution file needs to be read for a Namespace too, maybe the LSP would have something for this?) See here and here (newer version). Maybe it would be a good idea to have advanced snippets using something like LuaSnip? Maybe we could have snippets that can create everything.
  • Completion float multiple implementations (hover). Handle overloaded methods. See here. This already kind of works thanks to the signature plugin.
  • Run unit tests and navigate to failing assertions
  • Ability to use dotnet or mono version. Could be also great if csharp_ls could also be used. It would be even better if the choice of language server could be made by project. Especially since csharp_ls should be good enough for simple projects while omnisharp would be better for more complex projects and the mono version would be great to work on anything .NET Framework related.
  • Ability to show diagnostic id This is possible when using o#/codecheck. So it would have to be integrated into the current diagnostics somehow.
  • Ability to exclude files/paths from diagnostics

Additional information

  • The o#/project and o#/projects endpoints have some interesting and useful information about the current project and workspace respectively

Done or started

  • Semantic highlighting when this PR is merged (I swear it will happen one day, or not...) Tried to request textDocument/semanticTokens/full handler and it is marked as "not implemented" even though omnisharp-vim has it??? Is this some kind of custom thing again?? Of course it's custom. Why would it use the specification that they made themselves?? Instead you'll need to use the o#/v2/highlight request.
  • Debugging using netcoredbg (cause, you know, vsdbg, the "working" debugger is still closed source. So much for going "open source")
  • For some time, the lsp highlight provider for the current symbol under the cursor didn't work with Omnisharp, is this still the case? If yes, would it be possible to implement it using the o# endpoints? Seems like it works using vim-illuminate.

Won't do

  • Support for multiple completion engines (as long as the engine supports Neovim's built-in LSP, this should not be a problem) This shouldn't have to be implemented by this plugin.
  • Loading status for status line and/or notification (similar to the "progress" endpoint?). Found in vim-sharpenup Turns out this looks pretty much custom with how OmniSharp-vim internally works
  • Fix using statements (sort, remove and add missing) This can be done using the format option that fixes the usings.

Treesitter issues

CSharp

Current

  • Indentation:
    • Type parameter constraint clause needs to be idented
    • Things like Where(a =>\n{\n\treturn true;\n}); does not get indented as I would expect (but it still makes sense) The correct fix for this would be to always have the brackets always be ignored for identation? Maybe like the comments?
    • Indentation does not work properly on binary expressions
    • One line "ifs" are not indented properly
    • Single line methods indentation
  • Highlighting:
    • is expression not highlighting type
    • catch's "when" keyword not highlighted
    • maybe "default" should be highlighted as a "keyword operator" instead of a "keyword"
    • : and ?? are not highlighted
    • In new Type(), "Type" should be highlighted as constructor
    • where T : EntityBase, "EntityBase" is not highlighted, it should be "type"

Ayu

TODO

  • Update support for rainbow parens
  • Add support for new Indent blankline