Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
26 changes: 23 additions & 3 deletions GitHubIssueFormsParser/.editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,8 @@ dotnet_analyzer_diagnostic.severity = warning
dotnet_diagnostic.CA1014.severity = none # CA1014: Mark assemblies with CLSCompliantAttribute
dotnet_diagnostic.CA1030.severity = silent # CA1030: Use events where appropriate
dotnet_diagnostic.CA1032.severity = none # CA1032: Implement standard exception constructors
dotnet_diagnostic.CA1054.severity = none # CA1054: URI parameters should not be strings
dotnet_diagnostic.CA1056.severity = none # CA1056: URI properties should not be strings
# Globalization rules https://docs.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/globalization-warnings
dotnet_diagnostic.CA1303.severity = none # CA1303: Do not pass literals as localized parameters
dotnet_diagnostic.CA1308.severity = none # CA1308: Normalize strings to uppercase
Expand All @@ -115,7 +117,7 @@ dotnet_diagnostic.IDE0010.severity = silent # Add missing cases to switch st
dotnet_style_prefer_conditional_expression_over_assignment = true:silent
dotnet_diagnostic.IDE0045.severity = suggestion # Use conditional expression for assignment (IDE0045)
dotnet_style_prefer_conditional_expression_over_return = true:silent
dotnet_diagnostic.IDE0046.severity = none # Use conditional expression for return (IDE0046)
dotnet_diagnostic.IDE0046.severity = none # Use conditional expression for return (IDE0046)
# Undocumented
dotnet_style_operator_placement_when_wrapping = beginning_of_line

Expand Down Expand Up @@ -387,6 +389,14 @@ dotnet_naming_rule.parameters_rule.severity = warning
# Third party analyzers
##########################################

##########################################
# Rules for Meziantou.Analyzer
# See https://github.com/meziantou/Meziantou.Analyzer/tree/main/docs
##########################################
[*.cs]
dotnet_diagnostic.MA0004.severity = none # MA0004 Use Task.ConfigureAwait(false)
dotnet_diagnostic.MA0048.severity = none # MA0048 File name must match type name

##########################################
# Rules for Microsoft.VisualStudio.Threading.Analyzers
# See https://github.com/microsoft/vs-threading/blob/main/doc/analyzers/index.md
Expand Down Expand Up @@ -461,7 +471,7 @@ dotnet_diagnostic.RCS0034.severity = suggestion # RCS0034: Add newline befo
dotnet_diagnostic.RCS0039.severity = suggestion # RCS0039: Remove newline before base list
dotnet_diagnostic.RCS0041.severity = suggestion # RCS0041: Remove newline between 'if' keyword and 'else' keyword
dotnet_diagnostic.RCS0042.severity = suggestion # RCS0042: Remove newlines from accessor list of auto-property
dotnet_diagnostic.RCS0043.severity = none # RCS0043: Remove newlines from accessor with single-line expression
dotnet_diagnostic.RCS0043.severity = none # RCS0043: Format accessor's braces on a single line when expression is on single line
dotnet_diagnostic.RCS0050.severity = suggestion # RCS0050: Add empty line before top declaration
dotnet_diagnostic.RCS0051.severity = suggestion # RCS0051: Add newline between closing brace and 'while' keyword (or vice versa)
dotnet_diagnostic.RCS0054.severity = suggestion # RCS0054: Fix formatting of a call chain
Expand Down Expand Up @@ -516,7 +526,8 @@ dotnet_diagnostic.SA1204.severity = none # SA1204: Static members should
dotnet_diagnostic.SA1214.severity = none # SA1214: Readonly fields should appear before non-readonly fields
# Naming Rules (SA1300-)
dotnet_diagnostic.SA1309.severity = none # SA1309: Field should not begin with an underscore
dotnet_diagnostic.SA1313.severity = none # SA1313: Parameter '_' should begin with lower-case letter. Covered by IDE1006 and this one triggers false warnings when using discard symbol.
dotnet_diagnostic.SA1312.severity = none # SA1309: The name of a variable in C# does not begin with a lower-case letter. Covered by IDE1006 and this one triggers false warnings when using discard symbol for variables.
dotnet_diagnostic.SA1313.severity = none # SA1313: Parameter '_' should begin with lower-case letter. Covered by IDE1006 and this one triggers false warnings when using discard symbol for parameters.
# Maintainability Rules (SA1400-)
dotnet_diagnostic.SA1402.severity = none # SA1402: File may only contain a single type
# Layout Rules (SA1500-)
Expand Down Expand Up @@ -595,6 +606,15 @@ dotnet_diagnostic.SA1651.severity = suggestion # SA1651: Do not use placeho
##########################################
[tests/**/*.cs]

##########################################
# Rules for Meziantou.Analyzer
# See https://github.com/meziantou/Meziantou.Analyzer/tree/main/docs
##########################################
[*.cs]
dotnet_diagnostic.MA0051.severity = none # MA0051 Method is too long
dotnet_diagnostic.MA0076.severity = none # MA0076 Do not use implicit culture-sensitive ToString in interpolated strings
dotnet_diagnostic.MA0101.severity = none # MA0101 String contains an implicit end of line character

##########################################
# Rules for Microsoft.VisualStudio.Threading.Analyzers
# See https://github.com/microsoft/vs-threading/blob/main/doc/analyzers/index.md
Expand Down
4 changes: 4 additions & 0 deletions GitHubIssueFormsParser/Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Meziantou.Analyzer" Version="2.0.82">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.VisualStudio.Threading.Analyzers" Version="17.7.30">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ internal static string NotNullOrWhiteSpace([NotNull] this string? value, [Caller
{
var message = $"{name} cannot be null or whitespace.";
return string.IsNullOrWhiteSpace(value)
? throw new ArgumentException(message)
? throw new ArgumentException(message, name)
: value;
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace GitHubIssuesParserCli.IssueFormBody;
namespace GitHubIssuesParserCli.IssueFormBodies;

internal sealed class IssueFormBody
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace GitHubIssuesParserCli.IssueFormBody;
namespace GitHubIssuesParserCli.IssueFormBodies;

internal sealed class IssueFormBodyText
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace GitHubIssuesParserCli.IssueFormBody.IssueFormItems.Checkboxes;
namespace GitHubIssuesParserCli.IssueFormBodies.IssueFormItems.Checkboxes;

internal sealed class IssueFormCheckBoxesText
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace GitHubIssuesParserCli.IssueFormBody.IssueFormItems.Checkboxes;
namespace GitHubIssuesParserCli.IssueFormBodies.IssueFormItems.Checkboxes;

internal sealed class IssueFormCheckboxOption
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace GitHubIssuesParserCli.IssueFormBody.IssueFormItems.Checkboxes;
namespace GitHubIssuesParserCli.IssueFormBodies.IssueFormItems.Checkboxes;

internal sealed class IssueFormCheckboxesItem : IssueFormItem
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace GitHubIssuesParserCli.IssueFormBody.IssueFormItems;
namespace GitHubIssuesParserCli.IssueFormBodies.IssueFormItems;

public sealed class CreateIssueFormItemException : Exception
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace GitHubIssuesParserCli.IssueFormBody.IssueFormItems;
namespace GitHubIssuesParserCli.IssueFormBodies.IssueFormItems;

internal abstract class IssueFormItem
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace GitHubIssuesParserCli.IssueFormBody.IssueFormItems;
namespace GitHubIssuesParserCli.IssueFormBodies.IssueFormItems;

internal static class IssueFormItemFactory
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace GitHubIssuesParserCli.IssueFormBody.IssueFormItems;
namespace GitHubIssuesParserCli.IssueFormBodies.IssueFormItems;

internal enum IssueFormItemTypes
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace GitHubIssuesParserCli.IssueFormBody.IssueFormItems;
namespace GitHubIssuesParserCli.IssueFormBodies.IssueFormItems;

internal static class IssueFormItemsExtensions
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace GitHubIssuesParserCli.IssueFormBody.IssueFormItems;
namespace GitHubIssuesParserCli.IssueFormBodies.IssueFormItems;

internal static class NewLines
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace GitHubIssuesParserCli.IssueFormBody.IssueFormItems.Text;
namespace GitHubIssuesParserCli.IssueFormBodies.IssueFormItems.Text;

internal sealed class IssueFormText
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace GitHubIssuesParserCli.IssueFormBody.IssueFormItems.Text;
namespace GitHubIssuesParserCli.IssueFormBodies.IssueFormItems.Text;

internal sealed class IssueFormTextItem : IssueFormItem
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace GitHubIssuesParserCli.IssueFormBody.IssueFormItems;
namespace GitHubIssuesParserCli.IssueFormBodies.IssueFormItems;

internal static class TrimExtensions
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace GitHubIssuesParserCli.IssueFormBody.JsonSerialization;
namespace GitHubIssuesParserCli.IssueFormBodies.JsonSerialization;

internal sealed class IssueFormBodyJsonConverter : JsonConverter<IssueFormBody>
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace GitHubIssuesParserCli.IssueFormBody.Parsing;
namespace GitHubIssuesParserCli.IssueFormBodies.Parsing;

internal static class IssueFormBodyParser
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace GitHubIssuesParserCli.IssueFormBody.Parsing;
namespace GitHubIssuesParserCli.IssueFormBodies.Parsing;

public sealed class IssueFormBodyParserException : Exception
{
Expand Down
12 changes: 6 additions & 6 deletions GitHubIssueFormsParser/src/GitHubIssuesParserCli/Usings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@
global using CliFx.Extensibility;
global using CliFx.Infrastructure;
global using GitHubIssuesParserCli.ArgumentValidations;
global using GitHubIssuesParserCli.IssueFormBody;
global using GitHubIssuesParserCli.IssueFormBody.IssueFormItems;
global using GitHubIssuesParserCli.IssueFormBody.IssueFormItems.Checkboxes;
global using GitHubIssuesParserCli.IssueFormBody.IssueFormItems.Text;
global using GitHubIssuesParserCli.IssueFormBody.JsonSerialization;
global using GitHubIssuesParserCli.IssueFormBody.Parsing;
global using GitHubIssuesParserCli.IssueFormBodies;
global using GitHubIssuesParserCli.IssueFormBodies.IssueFormItems;
global using GitHubIssuesParserCli.IssueFormBodies.IssueFormItems.Checkboxes;
global using GitHubIssuesParserCli.IssueFormBodies.IssueFormItems.Text;
global using GitHubIssuesParserCli.IssueFormBodies.JsonSerialization;
global using GitHubIssuesParserCli.IssueFormBodies.Parsing;
global using GitHubIssuesParserCli.IssueFormTemplates;
global using GitHubIssuesParserCli.IssueFormTemplates.Parsing;
global using SlugGenerator;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ public static string NormalizeLineEndings(this string original)
// new lines with Windows line endings
return original.Replace(LF, Environment.NewLine, StringComparison.Ordinal);
}
else if (Environment.OSVersion.Platform == PlatformID.Unix && original.Contains(CR + LF, StringComparison.Ordinal))

if (Environment.OSVersion.Platform == PlatformID.Unix && original.Contains(CR + LF, StringComparison.Ordinal))
{
// if it's a Linux OS and contains Windows line endings then replace
// new lines with Linux line endings
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,10 @@ public class ParseIssueFormCommandTests
public async Task ParseIssueFormCommandTest1()
{
using var console = new FakeInMemoryConsole();
var issueFormBody = await File.ReadAllTextAsync("./TestFiles/IssueBody.md");
var command = new ParseIssueFormCommand
{
IssueFormBody = File.ReadAllText("./TestFiles/IssueBody.md").NormalizeLineEndings(),
IssueFormBody = issueFormBody.NormalizeLineEndings(),
TemplateFilepath = "./TestFiles/Template.yml",
};
await command.ExecuteAsync(console);
Expand All @@ -30,13 +31,13 @@ public async Task ParseIssueFormCommandTest1()
issueFormJson.CustomReleaseNotes.ShouldBe($"## Custom release notes{Environment.NewLine}{Environment.NewLine}Test 123{Environment.NewLine}\"line with double quotes\"{Environment.NewLine}{Environment.NewLine}Another line:{Environment.NewLine}- point 1{Environment.NewLine}- point 2{Environment.NewLine}- point 3");
issueFormJson.OperatingSystems.ShouldNotBeNull();
issueFormJson.OperatingSystems.MacOS.ShouldNotBeNull();
issueFormJson.OperatingSystems.MacOS.ShouldBe(true);
issueFormJson.OperatingSystems.MacOS.ShouldBe(expected: true);
issueFormJson.OperatingSystems.Windows.ShouldNotBeNull();
issueFormJson.OperatingSystems.Windows.ShouldBe(true);
issueFormJson.OperatingSystems.Windows.ShouldBe(expected: true);
issueFormJson.OperatingSystems.Linux.ShouldNotBeNull();
issueFormJson.OperatingSystems.Linux.ShouldBe(false);
issueFormJson.OperatingSystems.Linux.ShouldBe(expected: false);
issueFormJson.OperatingSystems.Unknown.ShouldNotBeNull();
issueFormJson.OperatingSystems.Unknown.ShouldBe(false);
issueFormJson.OperatingSystems.Unknown.ShouldBe(expected: false);
}

/// <summary>
Expand Down Expand Up @@ -67,13 +68,13 @@ public async Task ParseIssueFormCommandTest2(string newLine)
issueFormJson.CustomReleaseNotes.ShouldBe($"## Custom release notes {newLine}{newLine}Test 123{newLine}{newLine}Another line:{newLine}- point 1{newLine}- point 2{newLine}- point 3");
issueFormJson.OperatingSystems.ShouldNotBeNull();
issueFormJson.OperatingSystems.MacOS.ShouldNotBeNull();
issueFormJson.OperatingSystems.MacOS.ShouldBe(true);
issueFormJson.OperatingSystems.MacOS.ShouldBe(expected: true);
issueFormJson.OperatingSystems.Windows.ShouldNotBeNull();
issueFormJson.OperatingSystems.Windows.ShouldBe(true);
issueFormJson.OperatingSystems.Windows.ShouldBe(expected: true);
issueFormJson.OperatingSystems.Linux.ShouldNotBeNull();
issueFormJson.OperatingSystems.Linux.ShouldBe(false);
issueFormJson.OperatingSystems.Linux.ShouldBe(expected: false);
issueFormJson.OperatingSystems.Unknown.ShouldNotBeNull();
issueFormJson.OperatingSystems.Unknown.ShouldBe(false);
issueFormJson.OperatingSystems.Unknown.ShouldBe(expected: false);
}

/// <summary>
Expand All @@ -89,9 +90,10 @@ public async Task ParseIssueFormCommandTest2(string newLine)
public async Task ParseIssueFormCommandTest3()
{
using var console = new FakeInMemoryConsole();
var issueFormBody = await File.ReadAllTextAsync("./TestFiles/IssueBody2.md");
var command = new ParseIssueFormCommand
{
IssueFormBody = File.ReadAllText("./TestFiles/IssueBody2.md").NormalizeLineEndings(),
IssueFormBody = issueFormBody.NormalizeLineEndings(),
TemplateFilepath = "./TestFiles/Template2.yml",
};
await command.ExecuteAsync(console);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
using GitHubIssuesParserCli.IssueFormBodies.Parsing;

namespace GitHubIssuesParserCli.Tests.CliCommands;

/// <summary>
Expand Down Expand Up @@ -26,12 +28,12 @@ public async Task ValidateIssueFormBodyOption(string issueFormBody)
var exception = await Should.ThrowAsync<CommandException>(() => command.ExecuteAsync(console).AsTask());
const string expectedErrorMessage = @"An error occurred trying to execute the command to parse a GitHub issue form.
Error:
- IssueFormBody cannot be null or whitespace.";
- IssueFormBody cannot be null or whitespace. (Parameter 'IssueFormBody')";

exception.Message.ShouldBe(expectedErrorMessage);
exception.InnerException.ShouldNotBeNull();
exception.InnerException.ShouldBeAssignableTo<ArgumentException>();
exception.InnerException.Message.ShouldBe("IssueFormBody cannot be null or whitespace.");
exception.InnerException.Message.ShouldBe("IssueFormBody cannot be null or whitespace. (Parameter 'IssueFormBody')");
}

/// <summary>
Expand All @@ -52,11 +54,11 @@ public async Task ValidateTemplateFilepathOption(string templateFilepath)
var exception = await Should.ThrowAsync<CommandException>(() => command.ExecuteAsync(console).AsTask());
const string expectedErrorMessage = @"An error occurred trying to execute the command to parse a GitHub issue form.
Error:
- TemplateFilepath cannot be null or whitespace.";
- TemplateFilepath cannot be null or whitespace. (Parameter 'TemplateFilepath')";
exception.Message.ShouldBe(expectedErrorMessage);
exception.InnerException.ShouldNotBeNull();
exception.InnerException.ShouldBeAssignableTo<ArgumentException>();
exception.InnerException.Message.ShouldBe("TemplateFilepath cannot be null or whitespace.");
exception.InnerException.Message.ShouldBe("TemplateFilepath cannot be null or whitespace. (Parameter 'TemplateFilepath')");
}

/// <summary>
Expand Down Expand Up @@ -138,9 +140,10 @@ public async Task InvalidIssueFormBody()
public async Task InvalidIssueFormBody2()
{
using var console = new FakeInMemoryConsole();
var issueFormBody = await File.ReadAllTextAsync("./TestFiles/IssueBodyWithOutOfOrderH3Headers.md");
var command = new ParseIssueFormCommand
{
IssueFormBody = File.ReadAllText("./TestFiles/IssueBodyWithOutOfOrderH3Headers.md").NormalizeLineEndings(),
IssueFormBody = issueFormBody.NormalizeLineEndings(),
TemplateFilepath = "./TestFiles/Template.yml",
};
var exception = await Should.ThrowAsync<CommandException>(() => command.ExecuteAsync(console).AsTask());
Expand All @@ -161,9 +164,10 @@ public async Task InvalidIssueFormBody2()
public async Task InvalidIssueFormBody3()
{
using var console = new FakeInMemoryConsole();
var issueFormBody = await File.ReadAllTextAsync("./TestFiles/IssueBodyWithMangledCheckbox.md");
var command = new ParseIssueFormCommand
{
IssueFormBody = File.ReadAllText("./TestFiles/IssueBodyWithMangledCheckbox.md").NormalizeLineEndings(),
IssueFormBody = issueFormBody.NormalizeLineEndings(),
TemplateFilepath = "./TestFiles/Template.yml",
};
var exception = await Should.ThrowAsync<CommandException>(() => command.ExecuteAsync(console).AsTask());
Expand Down
Loading