From e9bc0d4172d463511ba30dac548e13bae26cd675 Mon Sep 17 00:00:00 2001 From: AdmiringWorm Date: Fri, 8 Mar 2019 18:32:10 +0100 Subject: [PATCH 1/4] (GH-70) Implemented rule to check if tags contains a comma --- .../Validations/TagsAreSpaceSeparated.cs | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/Chocolatey.Language.Server/Validations/TagsAreSpaceSeparated.cs diff --git a/src/Chocolatey.Language.Server/Validations/TagsAreSpaceSeparated.cs b/src/Chocolatey.Language.Server/Validations/TagsAreSpaceSeparated.cs new file mode 100644 index 00000000..521a1f5f --- /dev/null +++ b/src/Chocolatey.Language.Server/Validations/TagsAreSpaceSeparated.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Chocolatey.Language.Server.Models; +using OmniSharp.Extensions.LanguageServer.Protocol.Models; + +namespace Chocolatey.Language.Server.Validations +{ + /// + /// Handler to validate that no tags contain a comma. + /// + /// Package validator comma separated tags validation rule. + public sealed class TagsAreSpaceSeparated : NuspecRuleBase + { + private const string VALIDATION_MESSAGE = "Tags (tags) are space separated values for referencing categories for software. Please don't use comma to separate tags."; + + public override string Id => "CHOCO0012"; + + public override string DocumentationUrl => $"https://gep13.github.io/chocolatey-vscode/docs/rules/{Id}"; + + public override ValidationType ValidationType => ValidationType.Requirement; + + public override IEnumerable Validate(Package package) + { + if (!package.Tags.Any()) + { + yield break; + } + + foreach (var tag in package.Tags) + { + if (tag.Value.Contains(',', StringComparison.OrdinalIgnoreCase)) + { + yield return CreateDiagnostic(tag, VALIDATION_MESSAGE); + } + } + } + } +} From 99f5015960ef1de614591c53348cabc3be929910 Mon Sep 17 00:00:00 2001 From: AdmiringWorm Date: Fri, 8 Mar 2019 18:41:14 +0100 Subject: [PATCH 2/4] (GH-70) Updated diagnostic helper to allow text index to be selected --- .../Validations/NuspecRuleBase.cs | 7 +++++-- .../Validations/TagsAreSpaceSeparated.cs | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Chocolatey.Language.Server/Validations/NuspecRuleBase.cs b/src/Chocolatey.Language.Server/Validations/NuspecRuleBase.cs index 8baf61a7..b1da88a5 100644 --- a/src/Chocolatey.Language.Server/Validations/NuspecRuleBase.cs +++ b/src/Chocolatey.Language.Server/Validations/NuspecRuleBase.cs @@ -46,14 +46,17 @@ public abstract class NuspecRuleBase : INuspecRule /// /// Thrown when is null. /// - protected Diagnostic CreateDiagnostic(MetaValue metaValue, string message) + protected Diagnostic CreateDiagnostic(MetaValue metaValue, string message, bool useTextIndex = false) { if (metaValue == null) { throw new ArgumentNullException(nameof(metaValue)); } - return CreateDiagnostic(metaValue.ElementStart, metaValue.ElementEnd, message); + int start = useTextIndex ? metaValue.TextStart : metaValue.ElementStart; + int end = useTextIndex ? metaValue.TextEnd : metaValue.ElementEnd; + + return CreateDiagnostic(start, end, message); } /// diff --git a/src/Chocolatey.Language.Server/Validations/TagsAreSpaceSeparated.cs b/src/Chocolatey.Language.Server/Validations/TagsAreSpaceSeparated.cs index 521a1f5f..7b5eb0ba 100644 --- a/src/Chocolatey.Language.Server/Validations/TagsAreSpaceSeparated.cs +++ b/src/Chocolatey.Language.Server/Validations/TagsAreSpaceSeparated.cs @@ -31,7 +31,7 @@ public override IEnumerable Validate(Package package) { if (tag.Value.Contains(',', StringComparison.OrdinalIgnoreCase)) { - yield return CreateDiagnostic(tag, VALIDATION_MESSAGE); + yield return CreateDiagnostic(tag, VALIDATION_MESSAGE, true); } } } From 11af8cde5e3a245143b29ab66e2e25ac3d72ce44 Mon Sep 17 00:00:00 2001 From: AdmiringWorm Date: Fri, 8 Mar 2019 18:43:08 +0100 Subject: [PATCH 3/4] (docs) Imported documentation for incorrectly separated tags --- docs/input/docs/rules/CHOCO0012.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 docs/input/docs/rules/CHOCO0012.md diff --git a/docs/input/docs/rules/CHOCO0012.md b/docs/input/docs/rules/CHOCO0012.md new file mode 100644 index 00000000..763709fc --- /dev/null +++ b/docs/input/docs/rules/CHOCO0012.md @@ -0,0 +1,27 @@ +--- +Title: Tags Found With Commas +Description: Tags have been incorrectly separated with commas +Category: Requirements +--- + +:::{.alert .alert-warning} +**Preliminary Notice** +This rule is not yet available in chocolatey-vscode. +It is a planned rule for 0.8.0. +::: + +## Issue + +In the nuspec in the `` element, the verifier found that the tags were separated with commas. They should only be separated with spaces. + +## Recommended Solution + +Please remove the commas from the `` element. + +## Reasoning + +We could just fix this on Chocolatey.org, but tags are used in other places besides just Chocolatey.org, and they are expected to be space separated. + +## See also + +- [Package validator rule](https://github.com/chocolatey/package-validator/wiki/TagsAreSpaceSeparated){target = _blank} From 2d5fcbce07b7e268c8c8a730175b8e862d8ffcb1 Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Sat, 9 Mar 2019 18:14:56 +0000 Subject: [PATCH 4/4] (doc) Changed casing to match what is in use --- docs/input/docs/rules/{CHOCO0012.md => choco0012.md} | 0 .../Validations/TagsAreSpaceSeparated.cs | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename docs/input/docs/rules/{CHOCO0012.md => choco0012.md} (100%) diff --git a/docs/input/docs/rules/CHOCO0012.md b/docs/input/docs/rules/choco0012.md similarity index 100% rename from docs/input/docs/rules/CHOCO0012.md rename to docs/input/docs/rules/choco0012.md diff --git a/src/Chocolatey.Language.Server/Validations/TagsAreSpaceSeparated.cs b/src/Chocolatey.Language.Server/Validations/TagsAreSpaceSeparated.cs index 7b5eb0ba..da09dc71 100644 --- a/src/Chocolatey.Language.Server/Validations/TagsAreSpaceSeparated.cs +++ b/src/Chocolatey.Language.Server/Validations/TagsAreSpaceSeparated.cs @@ -14,7 +14,7 @@ public sealed class TagsAreSpaceSeparated : NuspecRuleBase { private const string VALIDATION_MESSAGE = "Tags (tags) are space separated values for referencing categories for software. Please don't use comma to separate tags."; - public override string Id => "CHOCO0012"; + public override string Id => "choco0012"; public override string DocumentationUrl => $"https://gep13.github.io/chocolatey-vscode/docs/rules/{Id}";