diff --git a/docs/input/docs/rules/choco0010.md b/docs/input/docs/rules/choco0010.md new file mode 100644 index 00000000..5d7733a8 --- /dev/null +++ b/docs/input/docs/rules/choco0010.md @@ -0,0 +1,27 @@ +--- +Title: PrereleaseVersionAsPartOfPackageId +Description: +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. +::: + +**NOTE**: This page is a stub that has not yet been filled out. If you have questions about this issue, please ask in the review or reach out on [Gitter](https://gitter.im/chocolatey/chocolatey.org) + +## Issue + +In the nuspec, + +## Recommended Solution + +Please update _ so that _ + +## Reasoning + +## See also + +- [Package validator rule](https://github.com/chocolatey/package-validator/wiki/PrereleaseVersionAsPartOfPackageId){target = _blank} diff --git a/src/Chocolatey.Language.Server/Extensions/MetaValueExtensions.cs b/src/Chocolatey.Language.Server/Extensions/MetaValueExtensions.cs index f03ec9e0..cbd71c4e 100644 --- a/src/Chocolatey.Language.Server/Extensions/MetaValueExtensions.cs +++ b/src/Chocolatey.Language.Server/Extensions/MetaValueExtensions.cs @@ -8,6 +8,24 @@ namespace Chocolatey.Language.Server.Extensions /// public static class MetaValueExtensions { + public static bool ContainsAny(this MetaValue source, params string[] values) + { + if (source.IsMissing) + { + return false; + } + + foreach (var value in values) + { + if (source.Value.Contains(value, StringComparison.OrdinalIgnoreCase)) + { + return true; + } + } + + return false; + } + public static bool EndsWith(this MetaValue source, string text) { return !source.IsMissing && source.Value.EndsWith(text, StringComparison.OrdinalIgnoreCase); diff --git a/src/Chocolatey.Language.Server/Validations/PrereleaseVersionAsPartOfPackageId.cs b/src/Chocolatey.Language.Server/Validations/PrereleaseVersionAsPartOfPackageId.cs new file mode 100644 index 00000000..7cce849f --- /dev/null +++ b/src/Chocolatey.Language.Server/Validations/PrereleaseVersionAsPartOfPackageId.cs @@ -0,0 +1,30 @@ +using System.Collections.Generic; +using Chocolatey.Language.Server.Extensions; +using Chocolatey.Language.Server.Models; +using OmniSharp.Extensions.LanguageServer.Protocol.Models; + +namespace Chocolatey.Language.Server.Validations +{ + /// + /// Handler to validate the id does not contain a pre-release tag (alpha, beta, prerelease). + /// + /// Package validator rule for package id does not contain pre-release tags. + public sealed class PrereleaseVersionAsPartOfPackageId : NuspecRuleBase + { + private const string VALIDATION_MESSAGE = "The package id includes a prerelease version name which should be included only in the version of the package."; + + public override string Id => "choco0010"; + + 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.Id.ContainsAny("alpha", "beta", "prerelease")) + { + yield return CreateDiagnostic(package.Id, VALIDATION_MESSAGE); + } + } + } +}