コード例 #1
0
        public JSONItemValidationResult ValidateItem(JSONParseItem item, IJSONValidationContext context)
        {
            JSONMember member = item as JSONMember;

            if (member == null || !member.UnquotedValueText.Contains("{{"))
                return JSONItemValidationResult.Continue;

            var variables = GetVariables(member);
            var regex = new Regex("{{(?<name>[^}{]+)}}", RegexOptions.Compiled);

            foreach (Match match in regex.Matches(member.UnquotedValueText))
            {
                Group group = match.Groups["name"];
                string name = group.Value;

                if (!variables.Contains(name))
                {
                    JsonErrorTag error = new JsonErrorTag
                    {
                        Flags = JSONErrorFlags.ErrorListError | JSONErrorFlags.UnderlineRed,
                        Item = member.Value,
                        Start = member.Value.Start + group.Index + 1, // 1 is for the quotation mark
                        AfterEnd = member.Value.Start + group.Index + group.Length,
                        Length = group.Length,
                        Text = $"The variable \"{name}\" has not been declared"
                    };

                    Telemetry.TrackEvent("Icon no declared");
                    context.AddError(error);
                }
            }

            return JSONItemValidationResult.Continue;
        }
コード例 #2
0
        public JSONItemValidationResult ValidateItem(JSONParseItem item, IJSONValidationContext context)
        {
            JSONMember member = item as JSONMember;

            if (member != null && member.UnquotedNameText == "icon")
            {
                var icons = IconCompletionProvider.GetIcons(member);

                if (icons != null && !icons.ContainsKey(member.UnquotedValueText))
                {
                    JsonErrorTag error = new JsonErrorTag
                    {
                        Flags    = JSONErrorFlags.ErrorListError | JSONErrorFlags.UnderlineRed,
                        Item     = member.Value,
                        Start    = member.Value.Start,
                        AfterEnd = member.Value.AfterEnd,
                        Length   = member.Value.Length,
                        Text     = $"The icon \"{member.UnquotedValueText}\" has not been declared"
                    };

                    Telemetry.TrackEvent("Icon no declared");
                    context.AddError(error);
                }
            }

            return(JSONItemValidationResult.Continue);
        }
コード例 #3
0
        public JSONItemValidationResult ValidateItem(JSONParseItem item, IJSONValidationContext context)
        {
            JSONMember member = item as JSONMember;

            if (member != null && member.UnquotedNameText == "icon")
            {
                var icons = IconCompletionProvider.GetIcons(member);

                if (icons != null && !icons.ContainsKey(member.UnquotedValueText))
                {
                    JsonErrorTag error = new JsonErrorTag
                    {
                        Flags = JSONErrorFlags.ErrorListError | JSONErrorFlags.UnderlineRed,
                        Item = member.Value,
                        Start = member.Value.Start,
                        AfterEnd = member.Value.AfterEnd,
                        Length = member.Value.Length,
                        Text = $"The icon \"{member.UnquotedValueText}\" has not been declared"
                    };

                    Telemetry.TrackEvent("Icon no declared");
                    context.AddError(error);
                }
            }

            return JSONItemValidationResult.Continue;
        }
コード例 #4
0
ファイル: FileValidator.cs プロジェクト: gep13/Packman
        protected override JSONItemValidationResult ValidateJsonItem(JSONParseItem item, IJSONValidationContext context)
        {
            var member = item.FindType<JSONMember>();

            if (member == null || member.UnquotedNameText != "files")
                return JSONItemValidationResult.Continue;

            var package = member.Parent?.Parent as JSONMember;
            var packages = package?.Parent?.Parent as JSONMember;

            if (package == null || packages == null || packages.UnquotedNameText != "packages")
                return JSONItemValidationResult.Continue;

            var parent = member.Parent as JSONObject;
            var children = parent?.BlockItemChildren.OfType<JSONMember>();
            var version = children?.SingleOrDefault(c => c.UnquotedNameText == "version");

            if (version == null)
                return JSONItemValidationResult.Continue;

            var installable = VSPackage.Manager.Provider.GetInstallablePackageAsync(package.UnquotedNameText, version.UnquotedValueText).Result;

            if (installable == null)
                return JSONItemValidationResult.Continue;

            if (!installable.AllFiles.Contains(item.Text.Trim('"', ',')))
            {
                string message = $"({VSPackage.Name}) {item.Text} is not a valid file name for {package.Name.Text}.";
                AddError(context, item, message);
            }

            return JSONItemValidationResult.Continue;
        }
コード例 #5
0
ファイル: BaseValidator.cs プロジェクト: gep13/Packman
        public JSONItemValidationResult ValidateItem(JSONParseItem item, IJSONValidationContext context)
        {
            if (!VSPackage.Manager.Provider.IsInitialized)
                return JSONItemValidationResult.Continue;

            return ValidateJsonItem(item, context);
        }
コード例 #6
0
        public JSONItemValidationResult ValidateItem(JSONParseItem item, IJSONValidationContext context)
        {
            JSONMember member = item as JSONMember;

            if (member != null && member.Name != null && member.Name.Text == "\"$ref\"")
            {
                var parent = member.FindType<JSONBlockItem>();

                // Only show error when $ref is not the only property in the object
                if (parent == null || parent.BlockItemChildren.Count() == 1)
                    return JSONItemValidationResult.Continue;

                JsonErrorTag error = new JsonErrorTag
                {
                    Flags = JSONErrorFlags.UnderlineBlue | JSONErrorFlags.ErrorListMessage,
                    Item = member.Name,
                    Start = member.Name.Start,
                    AfterEnd = member.Name.AfterEnd,
                    Length = member.Name.Length,
                    Text = "When $ref is present, all other attributes are ignored"
                };

                context.AddError(error);
            }

            return JSONItemValidationResult.Continue;
        }
コード例 #7
0
        public JSONItemValidationResult ValidateItem(JSONParseItem item, IJSONValidationContext context)
        {
            JSONMember member = item as JSONMember;
            JSONMember icons  = item?.Parent?.FindType <JSONMember>();

            if (icons != null && icons.UnquotedNameText == "icons")
            {
                string folder = Path.GetDirectoryName(item.JSONDocument.DocumentLocation);
                string file   = Path.Combine(folder, member.UnquotedValueText);

                if (!File.Exists(file))
                {
                    JsonErrorTag error = new JsonErrorTag
                    {
                        Flags    = JSONErrorFlags.ErrorListError | JSONErrorFlags.UnderlineRed,
                        Item     = member.Value,
                        Start    = member.Value.Start,
                        AfterEnd = member.Value.AfterEnd,
                        Length   = member.Value.Length,
                        Text     = $"The file \"{member.UnquotedValueText}\" does not exist"
                    };

                    Telemetry.TrackEvent("Icon file missing");
                    context.AddError(error);
                }
            }

            return(JSONItemValidationResult.Continue);
        }
コード例 #8
0
        public JSONItemValidationResult ValidateItem(JSONParseItem item, IJSONValidationContext context)
        {
            JSONMember member = item as JSONMember;
            JSONMember icons = item?.Parent?.FindType<JSONMember>();

            if (icons != null && icons.UnquotedNameText == "icons")
            {
                string folder = Path.GetDirectoryName(item.JSONDocument.DocumentLocation);
                string file = Path.Combine(folder, member.UnquotedValueText);

                if (!File.Exists(file))
                {
                    JsonErrorTag error = new JsonErrorTag
                    {
                        Flags = JSONErrorFlags.ErrorListError | JSONErrorFlags.UnderlineRed,
                        Item = member.Value,
                        Start = member.Value.Start,
                        AfterEnd = member.Value.AfterEnd,
                        Length = member.Value.Length,
                        Text = $"The file \"{member.UnquotedValueText}\" does not exist"
                    };

                    Telemetry.TrackEvent("Icon file missing");
                    context.AddError(error);
                }
            }

            return JSONItemValidationResult.Continue;
        }
コード例 #9
0
        public JSONItemValidationResult ValidateItem(JSONParseItem item, IJSONValidationContext context)
        {
            JSONMember member = item as JSONMember;

            if (member != null && member.Name != null && member.Name.Text == "\"$ref\"")
            {
                var parent = member.FindType <JSONBlockItem>();

                // Only show error when $ref is not the only property in the object
                if (parent == null || parent.BlockItemChildren.Count() == 1)
                {
                    return(JSONItemValidationResult.Continue);
                }

                JsonErrorTag error = new JsonErrorTag
                {
                    Flags    = JSONErrorFlags.UnderlineBlue | JSONErrorFlags.ErrorListMessage,
                    Item     = member.Name,
                    Start    = member.Name.Start,
                    AfterEnd = member.Name.AfterEnd,
                    Length   = member.Name.Length,
                    Text     = "When $ref is present, all other attributes are ignored"
                };

                context.AddError(error);
            }

            return(JSONItemValidationResult.Continue);
        }
コード例 #10
0
        public JSONItemValidationResult ValidateItem(JSONParseItem item, IJSONValidationContext context)
        {
            if (!VSPackage.Manager.Provider.IsInitialized)
                return JSONItemValidationResult.Continue;

            if (item.JSONDocument.HasSchema(_reportCache))
            {
                return ValidateJsonItem(item, context);
            }

            return JSONItemValidationResult.Continue;
        }
コード例 #11
0
ファイル: BaseValidator.cs プロジェクト: scottaddie/Packman
        public JSONItemValidationResult ValidateItem(JSONParseItem item, IJSONValidationContext context)
        {
            if (!VSPackage.Manager.Provider.IsInitialized)
            {
                return(JSONItemValidationResult.Continue);
            }

            if (item.JSONDocument.HasSchema(_reportCache))
            {
                return(ValidateJsonItem(item, context));
            }

            return(JSONItemValidationResult.Continue);
        }
コード例 #12
0
        protected static void AddError(IJSONValidationContext context, JSONParseItem item, string message)
        {
            if (item == null)
                return;

            var error = new JsonErrorTag
            {
                Flags = JSONErrorFlags.ErrorListError | JSONErrorFlags.UnderlineRed,
                Item = item,
                Start = item.Start,
                AfterEnd = item.AfterEnd,
                Length = item.Length,
                Text = message
            };

            context.AddError(error);
        }
コード例 #13
0
ファイル: NameValidator.cs プロジェクト: gep13/Packman
        protected override JSONItemValidationResult ValidateJsonItem(JSONParseItem item, IJSONValidationContext context)
        {
            var member = item as JSONMember;
            var packages = item.Parent?.Parent as JSONMember;

            if (packages == null || packages.UnquotedNameText != "packages")
                return JSONItemValidationResult.Continue;

            var names = VSPackage.Manager.Provider.GetPackageNamesAsync().Result;

            if (names != null && !names.Contains(member.UnquotedNameText))
            {
                string message = $"({VSPackage.Name}) The package \"{member.UnquotedNameText}\" does not exist";
                AddError(context, member.Name, message);
            }

            return JSONItemValidationResult.Continue;
        }
コード例 #14
0
ファイル: BaseValidator.cs プロジェクト: scottaddie/Packman
        protected static void AddError(IJSONValidationContext context, JSONParseItem item, string message)
        {
            if (item == null)
            {
                return;
            }

            var error = new JsonErrorTag
            {
                Flags    = JSONErrorFlags.ErrorListError | JSONErrorFlags.UnderlineRed,
                Item     = item,
                Start    = item.Start,
                AfterEnd = item.AfterEnd,
                Length   = item.Length,
                Text     = message
            };

            context.AddError(error);
        }
コード例 #15
0
        protected override JSONItemValidationResult ValidateJsonItem(JSONParseItem item, IJSONValidationContext context)
        {
            var member = item as JSONMember;
            var packages = item.Parent?.Parent as JSONMember;

            if (packages == null || packages.UnquotedNameText != "packages")
                return JSONItemValidationResult.Continue;

            var children = (member.Value as JSONObject)?.BlockItemChildren?.OfType<JSONMember>();

            if (!children.Any(c => c.UnquotedNameText == "version"))
                return JSONItemValidationResult.Continue;

            var names = VSPackage.Manager.Provider.GetPackageNamesAsync().Result;

            if (names != null && !names.Contains(member.UnquotedNameText))
            {
                string message = $"({Vsix.Name}) The package \"{member.UnquotedNameText}\" does not exist";
                AddError(context, member.Name, message);
            }

            return JSONItemValidationResult.Continue;
        }
コード例 #16
0
        protected override JSONItemValidationResult ValidateJsonItem(JSONParseItem item, IJSONValidationContext context)
        {
            var member = item as JSONMember;

            if (member.UnquotedNameText != "version")
                return JSONItemValidationResult.Continue;

            var package = item.Parent?.Parent as JSONMember;
            var packages = package?.Parent?.Parent as JSONMember;

            if (package == null ||packages == null || packages.UnquotedNameText != "packages")
                return JSONItemValidationResult.Continue;

            var versions = VSPackage.Manager.Provider.GetVersionsAsync(package.UnquotedNameText).Result;

            if (versions != null && !versions.Contains(member.UnquotedValueText))
            {
                string message = $"({Vsix.Name}) \"{member.UnquotedValueText}\" is not a valid version for \"{package.UnquotedNameText}\".";
                AddError(context, member.Value, message);
            }

            return JSONItemValidationResult.Continue;
        }
コード例 #17
0
        public JSONItemValidationResult ValidateItem(JSONParseItem item, IJSONValidationContext context)
        {
            JSONMember member = item as JSONMember;

            if (member == null || !member.UnquotedValueText.Contains("{{"))
            {
                return(JSONItemValidationResult.Continue);
            }

            var variables = GetVariables(member);
            var regex     = new Regex("{{(?<name>[^}{]+)}}", RegexOptions.Compiled);

            foreach (Match match in regex.Matches(member.UnquotedValueText))
            {
                Group  group = match.Groups["name"];
                string name  = group.Value;

                if (!variables.Contains(name))
                {
                    JsonErrorTag error = new JsonErrorTag
                    {
                        Flags    = JSONErrorFlags.ErrorListError | JSONErrorFlags.UnderlineRed,
                        Item     = member.Value,
                        Start    = member.Value.Start + group.Index + 1, // 1 is for the quotation mark
                        AfterEnd = member.Value.Start + group.Index + group.Length,
                        Length   = group.Length,
                        Text     = $"The variable \"{name}\" has not been declared"
                    };

                    Telemetry.TrackEvent("Icon no declared");
                    context.AddError(error);
                }
            }

            return(JSONItemValidationResult.Continue);
        }
コード例 #18
0
 protected abstract JSONItemValidationResult ValidateJsonItem(JSONParseItem item, IJSONValidationContext context);
コード例 #19
0
ファイル: BaseValidator.cs プロジェクト: scottaddie/Packman
 protected abstract JSONItemValidationResult ValidateJsonItem(JSONParseItem item, IJSONValidationContext context);
コード例 #20
0
        protected override JSONItemValidationResult ValidateJsonItem(JSONParseItem item, IJSONValidationContext context)
        {
            var member = item.FindType <JSONMember>();

            if (member == null || member.UnquotedNameText != "files")
            {
                return(JSONItemValidationResult.Continue);
            }

            var package  = member.Parent?.Parent as JSONMember;
            var packages = package?.Parent?.Parent as JSONMember;

            if (package == null || packages == null || packages.UnquotedNameText != "packages")
            {
                return(JSONItemValidationResult.Continue);
            }

            var parent   = member.Parent as JSONObject;
            var children = parent?.BlockItemChildren.OfType <JSONMember>();
            var version  = children?.SingleOrDefault(c => c.UnquotedNameText == "version");

            if (version == null)
            {
                return(JSONItemValidationResult.Continue);
            }

            var installable = VSPackage.Manager.Provider.GetInstallablePackageAsync(package.UnquotedNameText, version.UnquotedValueText).Result;

            if (installable == null)
            {
                return(JSONItemValidationResult.Continue);
            }

            if (!installable.AllFiles.Contains(item.Text.Trim('"', ',')))
            {
                string message = $"({Vsix.Name}) {item.Text} is not a valid file name for {installable.Name} {installable.Version}.";
                AddError(context, item, message);
            }

            return(JSONItemValidationResult.Continue);
        }
コード例 #21
0
        protected override JSONItemValidationResult ValidateJsonItem(JSONParseItem item, IJSONValidationContext context)
        {
            var member = item as JSONMember;

            if (member.UnquotedNameText != "version")
            {
                return(JSONItemValidationResult.Continue);
            }

            var package  = item.Parent?.Parent as JSONMember;
            var packages = package?.Parent?.Parent as JSONMember;

            if (package == null || packages == null || packages.UnquotedNameText != "packages")
            {
                return(JSONItemValidationResult.Continue);
            }

            var versions = VSPackage.Manager.Provider.GetVersionsAsync(package.UnquotedNameText).Result;

            if (versions != null && !versions.Contains(member.UnquotedValueText))
            {
                string message = $"({Vsix.Name}) \"{member.UnquotedValueText}\" is not a valid version for \"{package.UnquotedNameText}\".";
                AddError(context, member.Value, message);
            }

            return(JSONItemValidationResult.Continue);
        }
コード例 #22
0
ファイル: NameValidator.cs プロジェクト: scottaddie/Packman
        protected override JSONItemValidationResult ValidateJsonItem(JSONParseItem item, IJSONValidationContext context)
        {
            var member   = item as JSONMember;
            var packages = item.Parent?.Parent as JSONMember;

            if (packages == null || packages.UnquotedNameText != "packages")
            {
                return(JSONItemValidationResult.Continue);
            }

            var children = (member.Value as JSONObject)?.BlockItemChildren?.OfType <JSONMember>();

            if (!children.Any(c => c.UnquotedNameText == "version"))
            {
                return(JSONItemValidationResult.Continue);
            }

            var names = VSPackage.Manager.Provider.GetPackageNamesAsync().Result;

            if (names != null && !names.Contains(member.UnquotedNameText))
            {
                string message = $"({Vsix.Name}) The package \"{member.UnquotedNameText}\" does not exist";
                AddError(context, member.Name, message);
            }

            return(JSONItemValidationResult.Continue);
        }