Skip to content
Open
Show file tree
Hide file tree
Changes from 45 commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
04592f3
refactor(APIGenerator): fix diagnostics, more idiomatic csharp
Dec 27, 2025
702e00b
refactor(NvimPluginHost): use nullable fix warnings
Dec 27, 2025
6393118
refactor(NvimClient): fix warnigs and diagnostics
Dec 27, 2025
14088a0
refactor(NvimClient.API): fix warnings and diagnostics
Dec 27, 2025
6605e84
refactor(NvimClient.APIGenerator): fix warnings and diagnostics
Dec 27, 2025
a29ebd0
chore: migrate to dotnet 10, annotate test plugin
Dec 27, 2025
bdd3fea
refactor(NvimClient.Test): update to latest packages fix diagnostics
Dec 27, 2025
31b1b9d
refactor: start basic testing of API generator
Dec 27, 2025
337cd1c
refactor(NvimClient.APIGenerator): clean up code start adding tests
Dec 28, 2025
725807f
refactor(NvimCient): fix models to be correct
Dec 29, 2025
a91d0d5
refactor(NvimClient.APIGenerator): wip towards a proper generator
Dec 29, 2025
8143eae
chore: update workflow to .net 10
Dec 29, 2025
1fd8ad1
chore: update packages and play around with code to be removed in the…
Dec 29, 2025
b6903ea
refactor: implement csharp argument
Dec 29, 2025
aa6238c
refactor: basic class writer
Dec 30, 2025
78388b2
refactor(NvimClient): overhaul model
Dec 31, 2025
051dd53
refactor: all around warning removals and code cleanup
Jan 2, 2026
96922f1
refactor: code clean up and documentation
Jan 2, 2026
338cb67
fix: correctly parse the package
Jan 2, 2026
a594a58
refactor: playing around with tests
Jan 2, 2026
6847750
refactor(NvimClient): consolidate message pack to object extensions
Jan 6, 2026
e22286a
refactor(NvimClient.APIGenerator): work on cleaner models
Jan 6, 2026
7e6632c
refactor(NvimClient.API): clear some warnings and provide basic shape
Jan 6, 2026
8ce0587
chore: play around with tests
Jan 6, 2026
d5cc6d4
refactor: reimplement cleaner code generation
Jan 8, 2026
28d046f
refactor: final small corrections to code generation
Jan 8, 2026
070d394
refactor: modularize generation and parsing
Jan 8, 2026
e18a3e8
docs: add function docs
Jan 8, 2026
1377a58
chore: continue work on auto documentation generation
Jan 15, 2026
9af30cb
feat: basic doc output
Jan 18, 2026
7abf896
feat: cs keyword management, obsolete attribute
Jan 20, 2026
a3c4576
refactor: basic testing
Jan 21, 2026
c192cb6
refactor: move test files under source directory
Jan 21, 2026
386f1bb
refactor: minor polishing
Jan 21, 2026
2222f74
chore: fix warnings and test timeouts
Jan 22, 2026
b5d7dd3
chore: cleaner output
Jan 24, 2026
72a7276
refactor: move files for better drectory structure
Jan 25, 2026
5ad209f
refactor: add comments and remove global build
Jan 25, 2026
da7bfa2
doc: small readme update
Jan 25, 2026
04904fd
refactor: api generation prints more info, includes obsolete attribute
Jan 25, 2026
36632ca
refactor: files are now generated in a directory tree
Jan 25, 2026
dd1655f
refactor: generated files now contain a comment
Jan 25, 2026
45a87be
refactor: fix erroneously generated code
Jan 25, 2026
e1075dc
refactor: refactor code generation to deal with compile errors
Jan 26, 2026
cf952f3
docs: update docs
Jan 26, 2026
8706766
docs: add basic readme for the APIGenerator
Jan 28, 2026
89bb869
chore: remove trash printing
Jan 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ jobs:
version: nightly

- name: Setup .NET
uses: actions/setup-dotnet@v1
uses: actions/setup-dotnet@v5
with:
dotnet-version: 8.0.x
dotnet-version: 10.0.x

- name: Restore dependencies
run: dotnet restore
Expand Down
5 changes: 0 additions & 5 deletions Directory.Build.props

This file was deleted.

126 changes: 97 additions & 29 deletions NvimClient.sln
Original file line number Diff line number Diff line change
@@ -1,49 +1,117 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27703.2000
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NvimClient", "src\NvimClient\NvimClient.csproj", "{C1607C33-51D5-4F92-80D6-C346961B3C3F}"
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{827E0CD3-B72D-47B6-A68D-7590B98EB39B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NvimClient.Test", "test\NvimClient.Test\NvimClient.Test.csproj", "{B61BB5E7-B7AF-46FB-92D3-09CFA056E60D}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NvimClient", "src\NvimClient\NvimClient.csproj", "{9B62F5EE-6A81-4CAF-9C4C-243FD1951A3C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NvimClient.API", "src\NvimClient.API\NvimClient.API.csproj", "{5C90A3BE-4C28-41DB-95F0-4362CA94167F}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NvimClient.API", "src\NvimClient.API\NvimClient.API.csproj", "{F50ED250-5671-47D8-B433-32232CF97A30}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NvimClient.APIGenerator", "src\NvimClient.APIGenerator\NvimClient.APIGenerator.csproj", "{1569812F-AEC1-4B73-A15C-8C3AE26DB2BF}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NvimClient.APIGenerator", "src\NvimClient.APIGenerator\NvimClient.APIGenerator.csproj", "{A56F641C-CBC6-4B54-B98D-8941F98FF4C8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NvimPluginHost", "src\NvimPluginHost\NvimPluginHost.csproj", "{A51CEDA9-712A-4FD3-8412-76A251DFDD2E}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NvimPluginHost", "src\NvimPluginHost\NvimPluginHost.csproj", "{2DF3FC4B-7745-4015-9C7E-08542F298500}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{3E72BF5C-0B5E-D5BD-DCAE-6B991004B4A5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NvimClient.APIGenerator.Test", "src\test\NvimClient.APIGenerator.Test\NvimClient.APIGenerator.Test.csproj", "{310CABA7-630A-45E5-A51E-0459EB5EBC43}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NvimClient.Test", "src\test\NvimClient.Test\NvimClient.Test.csproj", "{6AFBA61A-903A-4396-BB71-3C89FA294958}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{C1607C33-51D5-4F92-80D6-C346961B3C3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C1607C33-51D5-4F92-80D6-C346961B3C3F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C1607C33-51D5-4F92-80D6-C346961B3C3F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C1607C33-51D5-4F92-80D6-C346961B3C3F}.Release|Any CPU.Build.0 = Release|Any CPU
{B61BB5E7-B7AF-46FB-92D3-09CFA056E60D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B61BB5E7-B7AF-46FB-92D3-09CFA056E60D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B61BB5E7-B7AF-46FB-92D3-09CFA056E60D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B61BB5E7-B7AF-46FB-92D3-09CFA056E60D}.Release|Any CPU.Build.0 = Release|Any CPU
{5C90A3BE-4C28-41DB-95F0-4362CA94167F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5C90A3BE-4C28-41DB-95F0-4362CA94167F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5C90A3BE-4C28-41DB-95F0-4362CA94167F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5C90A3BE-4C28-41DB-95F0-4362CA94167F}.Release|Any CPU.Build.0 = Release|Any CPU
{1569812F-AEC1-4B73-A15C-8C3AE26DB2BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1569812F-AEC1-4B73-A15C-8C3AE26DB2BF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1569812F-AEC1-4B73-A15C-8C3AE26DB2BF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1569812F-AEC1-4B73-A15C-8C3AE26DB2BF}.Release|Any CPU.Build.0 = Release|Any CPU
{A51CEDA9-712A-4FD3-8412-76A251DFDD2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A51CEDA9-712A-4FD3-8412-76A251DFDD2E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A51CEDA9-712A-4FD3-8412-76A251DFDD2E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A51CEDA9-712A-4FD3-8412-76A251DFDD2E}.Release|Any CPU.Build.0 = Release|Any CPU
{9B62F5EE-6A81-4CAF-9C4C-243FD1951A3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9B62F5EE-6A81-4CAF-9C4C-243FD1951A3C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9B62F5EE-6A81-4CAF-9C4C-243FD1951A3C}.Debug|x64.ActiveCfg = Debug|Any CPU
{9B62F5EE-6A81-4CAF-9C4C-243FD1951A3C}.Debug|x64.Build.0 = Debug|Any CPU
{9B62F5EE-6A81-4CAF-9C4C-243FD1951A3C}.Debug|x86.ActiveCfg = Debug|Any CPU
{9B62F5EE-6A81-4CAF-9C4C-243FD1951A3C}.Debug|x86.Build.0 = Debug|Any CPU
{9B62F5EE-6A81-4CAF-9C4C-243FD1951A3C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9B62F5EE-6A81-4CAF-9C4C-243FD1951A3C}.Release|Any CPU.Build.0 = Release|Any CPU
{9B62F5EE-6A81-4CAF-9C4C-243FD1951A3C}.Release|x64.ActiveCfg = Release|Any CPU
{9B62F5EE-6A81-4CAF-9C4C-243FD1951A3C}.Release|x64.Build.0 = Release|Any CPU
{9B62F5EE-6A81-4CAF-9C4C-243FD1951A3C}.Release|x86.ActiveCfg = Release|Any CPU
{9B62F5EE-6A81-4CAF-9C4C-243FD1951A3C}.Release|x86.Build.0 = Release|Any CPU
{F50ED250-5671-47D8-B433-32232CF97A30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F50ED250-5671-47D8-B433-32232CF97A30}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F50ED250-5671-47D8-B433-32232CF97A30}.Debug|x64.ActiveCfg = Debug|Any CPU
{F50ED250-5671-47D8-B433-32232CF97A30}.Debug|x64.Build.0 = Debug|Any CPU
{F50ED250-5671-47D8-B433-32232CF97A30}.Debug|x86.ActiveCfg = Debug|Any CPU
{F50ED250-5671-47D8-B433-32232CF97A30}.Debug|x86.Build.0 = Debug|Any CPU
{F50ED250-5671-47D8-B433-32232CF97A30}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F50ED250-5671-47D8-B433-32232CF97A30}.Release|Any CPU.Build.0 = Release|Any CPU
{F50ED250-5671-47D8-B433-32232CF97A30}.Release|x64.ActiveCfg = Release|Any CPU
{F50ED250-5671-47D8-B433-32232CF97A30}.Release|x64.Build.0 = Release|Any CPU
{F50ED250-5671-47D8-B433-32232CF97A30}.Release|x86.ActiveCfg = Release|Any CPU
{F50ED250-5671-47D8-B433-32232CF97A30}.Release|x86.Build.0 = Release|Any CPU
{A56F641C-CBC6-4B54-B98D-8941F98FF4C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A56F641C-CBC6-4B54-B98D-8941F98FF4C8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A56F641C-CBC6-4B54-B98D-8941F98FF4C8}.Debug|x64.ActiveCfg = Debug|Any CPU
{A56F641C-CBC6-4B54-B98D-8941F98FF4C8}.Debug|x64.Build.0 = Debug|Any CPU
{A56F641C-CBC6-4B54-B98D-8941F98FF4C8}.Debug|x86.ActiveCfg = Debug|Any CPU
{A56F641C-CBC6-4B54-B98D-8941F98FF4C8}.Debug|x86.Build.0 = Debug|Any CPU
{A56F641C-CBC6-4B54-B98D-8941F98FF4C8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A56F641C-CBC6-4B54-B98D-8941F98FF4C8}.Release|Any CPU.Build.0 = Release|Any CPU
{A56F641C-CBC6-4B54-B98D-8941F98FF4C8}.Release|x64.ActiveCfg = Release|Any CPU
{A56F641C-CBC6-4B54-B98D-8941F98FF4C8}.Release|x64.Build.0 = Release|Any CPU
{A56F641C-CBC6-4B54-B98D-8941F98FF4C8}.Release|x86.ActiveCfg = Release|Any CPU
{A56F641C-CBC6-4B54-B98D-8941F98FF4C8}.Release|x86.Build.0 = Release|Any CPU
{2DF3FC4B-7745-4015-9C7E-08542F298500}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2DF3FC4B-7745-4015-9C7E-08542F298500}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2DF3FC4B-7745-4015-9C7E-08542F298500}.Debug|x64.ActiveCfg = Debug|Any CPU
{2DF3FC4B-7745-4015-9C7E-08542F298500}.Debug|x64.Build.0 = Debug|Any CPU
{2DF3FC4B-7745-4015-9C7E-08542F298500}.Debug|x86.ActiveCfg = Debug|Any CPU
{2DF3FC4B-7745-4015-9C7E-08542F298500}.Debug|x86.Build.0 = Debug|Any CPU
{2DF3FC4B-7745-4015-9C7E-08542F298500}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2DF3FC4B-7745-4015-9C7E-08542F298500}.Release|Any CPU.Build.0 = Release|Any CPU
{2DF3FC4B-7745-4015-9C7E-08542F298500}.Release|x64.ActiveCfg = Release|Any CPU
{2DF3FC4B-7745-4015-9C7E-08542F298500}.Release|x64.Build.0 = Release|Any CPU
{2DF3FC4B-7745-4015-9C7E-08542F298500}.Release|x86.ActiveCfg = Release|Any CPU
{2DF3FC4B-7745-4015-9C7E-08542F298500}.Release|x86.Build.0 = Release|Any CPU
{310CABA7-630A-45E5-A51E-0459EB5EBC43}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{310CABA7-630A-45E5-A51E-0459EB5EBC43}.Debug|Any CPU.Build.0 = Debug|Any CPU
{310CABA7-630A-45E5-A51E-0459EB5EBC43}.Debug|x64.ActiveCfg = Debug|Any CPU
{310CABA7-630A-45E5-A51E-0459EB5EBC43}.Debug|x64.Build.0 = Debug|Any CPU
{310CABA7-630A-45E5-A51E-0459EB5EBC43}.Debug|x86.ActiveCfg = Debug|Any CPU
{310CABA7-630A-45E5-A51E-0459EB5EBC43}.Debug|x86.Build.0 = Debug|Any CPU
{310CABA7-630A-45E5-A51E-0459EB5EBC43}.Release|Any CPU.ActiveCfg = Release|Any CPU
{310CABA7-630A-45E5-A51E-0459EB5EBC43}.Release|Any CPU.Build.0 = Release|Any CPU
{310CABA7-630A-45E5-A51E-0459EB5EBC43}.Release|x64.ActiveCfg = Release|Any CPU
{310CABA7-630A-45E5-A51E-0459EB5EBC43}.Release|x64.Build.0 = Release|Any CPU
{310CABA7-630A-45E5-A51E-0459EB5EBC43}.Release|x86.ActiveCfg = Release|Any CPU
{310CABA7-630A-45E5-A51E-0459EB5EBC43}.Release|x86.Build.0 = Release|Any CPU
{6AFBA61A-903A-4396-BB71-3C89FA294958}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6AFBA61A-903A-4396-BB71-3C89FA294958}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6AFBA61A-903A-4396-BB71-3C89FA294958}.Debug|x64.ActiveCfg = Debug|Any CPU
{6AFBA61A-903A-4396-BB71-3C89FA294958}.Debug|x64.Build.0 = Debug|Any CPU
{6AFBA61A-903A-4396-BB71-3C89FA294958}.Debug|x86.ActiveCfg = Debug|Any CPU
{6AFBA61A-903A-4396-BB71-3C89FA294958}.Debug|x86.Build.0 = Debug|Any CPU
{6AFBA61A-903A-4396-BB71-3C89FA294958}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6AFBA61A-903A-4396-BB71-3C89FA294958}.Release|Any CPU.Build.0 = Release|Any CPU
{6AFBA61A-903A-4396-BB71-3C89FA294958}.Release|x64.ActiveCfg = Release|Any CPU
{6AFBA61A-903A-4396-BB71-3C89FA294958}.Release|x64.Build.0 = Release|Any CPU
{6AFBA61A-903A-4396-BB71-3C89FA294958}.Release|x86.ActiveCfg = Release|Any CPU
{6AFBA61A-903A-4396-BB71-3C89FA294958}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {136FB3C1-452B-4930-AB99-87AD2F0D9E3D}
GlobalSection(NestedProjects) = preSolution
{9B62F5EE-6A81-4CAF-9C4C-243FD1951A3C} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{F50ED250-5671-47D8-B433-32232CF97A30} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{A56F641C-CBC6-4B54-B98D-8941F98FF4C8} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{2DF3FC4B-7745-4015-9C7E-08542F298500} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{3E72BF5C-0B5E-D5BD-DCAE-6B991004B4A5} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{310CABA7-630A-45E5-A51E-0459EB5EBC43} = {3E72BF5C-0B5E-D5BD-DCAE-6B991004B4A5}
{6AFBA61A-903A-4396-BB71-3C89FA294958} = {3E72BF5C-0B5E-D5BD-DCAE-6B991004B4A5}
EndGlobalSection
EndGlobal
38 changes: 21 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,17 @@ Nvim.NET

[![Test Workflow Status](https://github.com/neovim/nvim.net/actions/workflows/test.yml/badge.svg)](https://github.com/neovim/nvim.net/actions/workflows/test.yml)

.NET client for [Neovim](https://github.com/neovim/neovim)
This repository contains a set of C# projects that constitute the .NET client for
[Neovim](https://github.com/neovim/neovim) this repository contains the
following C# projects:

1. `NvimClient` a common implementation of nvim primitives and models for .net
types like `NvimRequest` and `NvimResponse`
1. `NvimClient.API` An nvim API implementation. This is the API that is called from
C# source code (i.e Plugin code) in order to interact with a neovim instance.
1. `NvimClient.APIGenerator` An API generator that generates source code for the
`NvimClient.API` project.
1. `NvimPluginHost` a .net plugin that loads the produced plugin dll.

Plugin Host Install
------------------------
Expand All @@ -17,12 +27,16 @@ Quickstart for Linux

1. [Install dotnet](https://www.microsoft.com/net/download/linux-package-manager/ubuntu16-04/sdk-current)
2. Clone the Nvim .NET client (this repo):
```
```bash
git clone https://github.com/neovim/nvim.net
```
3. Run the tests, to check that everything is working:
3. Change to the newly created directory:
```bash
cd nvim.net
```
dotnet test test/NvimClient.Test/NvimClient.Test.csproj
3. Run the tests, to check that everything is working:
```bash
dotnet test
```

Plugin Development with C#
Expand Down Expand Up @@ -92,24 +106,14 @@ Build
Generate API
-----

The API generator takes two arguments: the output path of the generated C# class
file and the path to the Neovim source directory. `nvim` and `doxygen` must be
in the `PATH`.
The API generator takes two arguments: and output directory where the generated C#
source files will be placed and the path to the Neovim source directory. `nvim` and
`doxygen` must be in the `PATH`.

dotnet run --project src/NvimClient.APIGenerator/NvimClient.APIGenerator.csproj
src/NvimClient.API/NvimAPI.generated.cs
/usr/local/src/neovim/

Test
----

Run all tests (`nvim` must be in the `PATH`):

dotnet test test/NvimClient.Test/NvimClient.Test.csproj

Run only the `TestMessageDeserialization` test:

dotnet test --filter TestMessageDeserialization test/NvimClient.Test/NvimClient.Test.csproj

Release
-----
Expand Down
Loading
Loading