Skip to content

Commit 81ae1fc

Browse files
authored
feat: support process plugin schema v4 (#4)
1 parent 0a1ef79 commit 81ae1fc

40 files changed

+2129
-913
lines changed

.github/workflows/ci.yml

+27-10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
name: CI
22

3-
on: [push, pull_request]
3+
on:
4+
pull_request:
5+
branches: [main]
6+
push:
7+
branches: [main]
8+
tags:
9+
- '*'
410

511
jobs:
612
build:
@@ -10,27 +16,38 @@ jobs:
1016
steps:
1117
- name: Checkout
1218
uses: actions/checkout@v2
13-
- name: Setup .net
14-
uses: actions/setup-dotnet@v1
19+
- uses: denoland/setup-deno@v1
20+
- uses: dtolnay/rust-toolchain@stable
21+
- uses: Swatinem/rust-cache@v1
22+
- uses: actions/setup-dotnet@v1
1523
with:
16-
dotnet-version: '3.1.x'
24+
dotnet-version: '6.0.x'
1725

18-
- name: Build
26+
- name: Build (Debug)
27+
run: dotnet build DprintPluginRoslyn
28+
29+
- name: Test
30+
run: dotnet test
31+
32+
- name: Test Exe
33+
run: cd test && cargo test
34+
35+
- name: Build (Release)
1936
run: |
20-
dotnet build -c Release --runtime win-x64
21-
dotnet build -c Release --runtime linux-x64
22-
dotnet build -c Release --runtime osx-x64
37+
dotnet build DprintPluginRoslyn -c Release --runtime win-x64
38+
dotnet build DprintPluginRoslyn -c Release --runtime linux-x64
39+
dotnet build DprintPluginRoslyn -c Release --runtime osx-x64
2340
2441
- name: Package
2542
run: |
26-
cd DprintPluginRoslyn/bin/Release/netcoreapp3.1/osx-x64
43+
cd DprintPluginRoslyn/bin/Release/net6.0/osx-x64
2744
zip -r ../../../../../dprint-plugin-roslyn-x86_64-apple-darwin.zip ./*
2845
cd ../linux-x64
2946
zip -r ../../../../../dprint-plugin-roslyn-x86_64-unknown-linux-gnu.zip ./*
3047
cd ../win-x64
3148
zip -r ../../../../../dprint-plugin-roslyn-x86_64-pc-windows-msvc.zip ./*
3249
- name: Create plugin file
33-
run: node scripts/createPluginFile.js
50+
run: deno run --allow-read=. --allow-write=. scripts/create_plugin_file.ts
3451

3552
- name: Get tag version
3653
if: startsWith(github.ref, 'refs/tags/')

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
.vs
22
bin
33
obj
4+
test/target

.rustfmt.toml

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
max_width = 160
2+
tab_spaces = 2

.vscode/settings.json

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"deno.enable": true,
3+
"deno.lint": false,
4+
"deno.unstable": false
5+
}

DprintPluginRoslyn.Tests/Configuration/ConfigurationHelperTests.cs

+32-33
Original file line numberDiff line numberDiff line change
@@ -4,48 +4,47 @@
44
using System.Collections.Generic;
55
using System.Linq;
66

7-
namespace Dprint.Plugins.Roslyn.Configuration
7+
namespace Dprint.Plugins.Roslyn.Configuration;
8+
9+
[TestFixture]
10+
public class ConfigurationHelperTests
811
{
9-
[TestFixture]
10-
public class ConfigurationHelperTests
11-
{
1212
[Test]
1313
public void HandlePluginConfig_VariousCorrectInput_Handles()
1414
{
15-
var pluginConfig = new Dictionary<string, object>()
16-
{
17-
{ "csharp.indentBlock", true },
18-
{ "csharp.labelPositioning", "noIndent" },
19-
};
20-
var context = new ConfigurationResolutionContext(pluginConfig, new AdhocWorkspace().Options);
21-
ConfigurationHelpers.HandlePluginConfig(context, typeof(CSharpFormattingOptions), "csharp.");
22-
var options = context.GetOptions();
15+
var pluginConfig = new Dictionary<string, object>()
16+
{
17+
{ "csharp.indentBlock", true },
18+
{ "csharp.labelPositioning", "noIndent" },
19+
};
20+
var context = new ConfigurationResolutionContext(pluginConfig, new AdhocWorkspace().Options);
21+
ConfigurationHelpers.HandlePluginConfig(context, typeof(CSharpFormattingOptions), "csharp.");
22+
var options = context.GetOptions();
2323

24-
Assert.That(options.GetOption(CSharpFormattingOptions.IndentBlock), Is.True);
25-
Assert.That(options.GetOption(CSharpFormattingOptions.LabelPositioning), Is.EqualTo(LabelPositionOptions.NoIndent));
26-
Assert.That(pluginConfig.Count, Is.EqualTo(0)); // should have cleared the plugin config
24+
Assert.That(options.GetOption(CSharpFormattingOptions.IndentBlock), Is.True);
25+
Assert.That(options.GetOption(CSharpFormattingOptions.LabelPositioning), Is.EqualTo(LabelPositionOptions.NoIndent));
26+
Assert.That(pluginConfig.Count, Is.EqualTo(0)); // should have cleared the plugin config
2727
}
2828

2929
[Test]
3030
public void HandlePluginConfig_IncorrectInput_Diagnostics()
3131
{
32-
var pluginConfig = new Dictionary<string, object>()
33-
{
34-
{ "csharp.indentBlock", "asdf" },
35-
{ "csharp.labelPositioning", "testing" },
36-
{ "csharp.unknown", true }
37-
};
38-
var context = new ConfigurationResolutionContext(pluginConfig, new AdhocWorkspace().Options);
39-
ConfigurationHelpers.HandlePluginConfig(context, typeof(CSharpFormattingOptions), "csharp.");
40-
var diagnostics = context.GetDiagnostics().ToList();
41-
Assert.That(diagnostics.Count, Is.EqualTo(3));
42-
Assert.That(diagnostics[0].PropertyName, Is.EqualTo("csharp.indentBlock"));
43-
Assert.That(diagnostics[0].Message, Is.EqualTo("Property value was expected to be Boolean, but was String."));
44-
Assert.That(diagnostics[1].PropertyName, Is.EqualTo("csharp.labelPositioning"));
45-
Assert.That(diagnostics[1].Message, Is.EqualTo("Could not parse string 'testing' to enum: Microsoft.CodeAnalysis.CSharp.Formatting.LabelPositionOptions"));
46-
Assert.That(diagnostics[2].PropertyName, Is.EqualTo("csharp.unknown"));
47-
Assert.That(diagnostics[2].Message, Is.EqualTo("Could not find property on CSharpFormattingOptions with name 'Unknown'"));
48-
Assert.That(pluginConfig.Count, Is.EqualTo(0)); // should have cleared the plugin config
32+
var pluginConfig = new Dictionary<string, object>()
33+
{
34+
{ "csharp.indentBlock", "asdf" },
35+
{ "csharp.labelPositioning", "testing" },
36+
{ "csharp.unknown", true }
37+
};
38+
var context = new ConfigurationResolutionContext(pluginConfig, new AdhocWorkspace().Options);
39+
ConfigurationHelpers.HandlePluginConfig(context, typeof(CSharpFormattingOptions), "csharp.");
40+
var diagnostics = context.GetDiagnostics().ToList();
41+
Assert.That(diagnostics.Count, Is.EqualTo(3));
42+
Assert.That(diagnostics[0].PropertyName, Is.EqualTo("csharp.indentBlock"));
43+
Assert.That(diagnostics[0].Message, Is.EqualTo("Property value was expected to be Boolean, but was String."));
44+
Assert.That(diagnostics[1].PropertyName, Is.EqualTo("csharp.labelPositioning"));
45+
Assert.That(diagnostics[1].Message, Is.EqualTo("Could not parse string 'testing' to enum: Microsoft.CodeAnalysis.CSharp.Formatting.LabelPositionOptions"));
46+
Assert.That(diagnostics[2].PropertyName, Is.EqualTo("csharp.unknown"));
47+
Assert.That(diagnostics[2].Message, Is.EqualTo("Could not find property on CSharpFormattingOptions with name 'Unknown'"));
48+
Assert.That(pluginConfig.Count, Is.EqualTo(0)); // should have cleared the plugin config
4949
}
50-
}
5150
}

DprintPluginRoslyn.Tests/DprintPluginRoslyn.Tests.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>netcoreapp3.1</TargetFramework>
4+
<TargetFramework>net6.0</TargetFramework>
55

66
<IsPackable>false</IsPackable>
77

+30-27
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,48 @@
1-
using NUnit.Framework;
1+
using Dprint.Plugins.Roslyn.Configuration;
2+
using NUnit.Framework;
23
using System.Collections.Generic;
4+
using System.Text;
35

4-
namespace Dprint.Plugins.Roslyn
6+
namespace Dprint.Plugins.Roslyn;
7+
8+
[TestFixture]
9+
public class WorkspaceTests
510
{
6-
[TestFixture]
7-
public class WorkspaceTests
8-
{
911
[Test]
1012
public void GetDiagnostics_UnhandledPropertyNames_Diagnostics()
1113
{
12-
var workspace = new Workspace();
13-
var pluginConfig = new Dictionary<string, object>()
14-
{
15-
{ "csharp.indentBlock", true },
16-
{ "csharp.labelPositioning", "noIndent" },
17-
{ "unknownProp", false }
18-
};
19-
workspace.SetPluginConfig(pluginConfig);
20-
var diagnostics = workspace.GetDiagnostics();
21-
Assert.That(diagnostics.Count, Is.EqualTo(1));
22-
Assert.That(diagnostics[0].PropertyName, Is.EqualTo("unknownProp"));
23-
Assert.That(diagnostics[0].Message, Is.EqualTo("Unknown configuration property name."));
14+
var workspace = new Workspace();
15+
var pluginConfig = new Dictionary<string, object>()
16+
{
17+
{ "csharp.indentBlock", true },
18+
{ "csharp.labelPositioning", "noIndent" },
19+
{ "unknownProp", false }
20+
};
21+
workspace.SetConfig(1, new(), pluginConfig);
22+
var diagnostics = workspace.GetDiagnostics(1);
23+
Assert.That(diagnostics.Count, Is.EqualTo(1));
24+
Assert.That(diagnostics[0].PropertyName, Is.EqualTo("unknownProp"));
25+
Assert.That(diagnostics[0].Message, Is.EqualTo("Unknown configuration property name."));
2426
}
2527

2628
[Test]
2729
public void GetResolvedConfig_Default_Gets()
2830
{
29-
var workspace = new Workspace();
30-
var resolvedConfig = workspace.GetResolvedConfig();
31-
Assert.That(resolvedConfig["csharp.indentBlock"], Is.EqualTo(true));
32-
Assert.That(resolvedConfig["visualBasic.indentationSize"], Is.EqualTo(4));
31+
var workspace = new Workspace();
32+
workspace.SetConfig(1, new(), new());
33+
var resolvedConfig = workspace.GetFormatters(1).GetResolvedConfig();
34+
Assert.That(resolvedConfig["csharp.indentBlock"], Is.EqualTo(true));
35+
Assert.That(resolvedConfig["visualBasic.indentationSize"], Is.EqualTo(4));
3336
}
3437

3538
[Test]
3639
public void Issue3_SetIndentWidth()
3740
{
38-
var workspace = new Workspace();
39-
var pluginConfig = new Serialization.JsonSerializer().Deserialize<Dictionary<string, object>>("{\"indentWidth\": 2 }");
40-
workspace.SetPluginConfig(pluginConfig);
41-
var diagnostics = workspace.GetDiagnostics();
42-
Assert.That(diagnostics.Count, Is.EqualTo(0));
41+
var workspace = new Workspace();
42+
var textBytes = Encoding.UTF8.GetBytes("{\"indentWidth\": 2 }");
43+
var pluginConfig = new Serialization.JsonSerializer().Deserialize<Dictionary<string, object>>(textBytes);
44+
workspace.SetConfig(2, new(), pluginConfig);
45+
var diagnostics = workspace.GetDiagnostics(2);
46+
Assert.That(diagnostics.Count, Is.EqualTo(0));
4347
}
44-
}
4548
}

DprintPluginRoslyn.sln

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
Microsoft Visual Studio Solution File, Format Version 12.00
3-
# Visual Studio Version 16
4-
VisualStudioVersion = 16.0.30204.135
3+
# Visual Studio Version 17
4+
VisualStudioVersion = 17.1.32319.34
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DprintPluginRoslyn", "DprintPluginRoslyn\DprintPluginRoslyn.csproj", "{BF479150-5FBD-43A1-A332-EB5468E28935}"
77
EndProject
@@ -12,7 +12,6 @@ EndProject
1212
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{511546F0-D3AD-4F0D-86C7-195FB2890981}"
1313
ProjectSection(SolutionItems) = preProject
1414
.github\workflows\ci.yml = .github\workflows\ci.yml
15-
.github\workflows\publish.yml = .github\workflows\publish.yml
1615
EndProjectSection
1716
EndProject
1817
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{F99ED3AC-E082-4923-9A28-014BD79BE864}"

DprintPluginRoslyn/ArgParser.cs

+16-17
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,27 @@
11
using System;
22

3-
namespace Dprint.Plugins.Roslyn
3+
namespace Dprint.Plugins.Roslyn;
4+
5+
public struct CliArguments
46
{
5-
public struct CliArguments
6-
{
77
public int ParentProcessId { get; set; }
8-
}
8+
}
99

10-
public class ArgParser
11-
{
10+
public class ArgParser
11+
{
1212
public CliArguments ParseArgs(string[] args)
1313
{
14-
// very simple and not smart for now
15-
for (var i = 0; i < args.Length; i++)
16-
{
17-
if (args[i] == "--parent-pid" && i + 1 < args.Length)
14+
// very simple and not smart for now
15+
for (var i = 0; i < args.Length; i++)
1816
{
19-
return new CliArguments
20-
{
21-
ParentProcessId = int.Parse(args[i + 1]),
22-
};
17+
if (args[i] == "--parent-pid" && i + 1 < args.Length)
18+
{
19+
return new CliArguments
20+
{
21+
ParentProcessId = int.Parse(args[i + 1]),
22+
};
23+
}
2324
}
24-
}
25-
throw new Exception("Failed parsing arguments. Expected --parent-pid");
25+
throw new Exception("Failed parsing arguments. Expected --parent-pid");
2626
}
27-
}
2827
}
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,23 @@
11
using System;
22

3-
namespace Dprint.Plugins.Roslyn.Communication
4-
{
5-
// the cli uses uints and big endian
3+
namespace Dprint.Plugins.Roslyn.Communication;
64

7-
public static class BigEndianBitConverter
8-
{
5+
// the cli uses uints and big endian
6+
public static class BigEndianBitConverter
7+
{
98
public static uint GetUInt(byte[] bytes)
109
{
11-
if (BitConverter.IsLittleEndian)
12-
Array.Reverse(bytes);
10+
if (BitConverter.IsLittleEndian)
11+
Array.Reverse(bytes);
1312

14-
return BitConverter.ToUInt32(bytes);
13+
return BitConverter.ToUInt32(bytes);
1514
}
1615

1716
public static byte[] GetBytes(uint value)
1817
{
19-
var bytes = BitConverter.GetBytes(value);
20-
if (BitConverter.IsLittleEndian)
21-
Array.Reverse(bytes);
22-
return bytes;
18+
var bytes = BitConverter.GetBytes(value);
19+
if (BitConverter.IsLittleEndian)
20+
Array.Reverse(bytes);
21+
return bytes;
2322
}
24-
}
2523
}

0 commit comments

Comments
 (0)