Exemple #1
0
        public override IEnumerable <CompletionInfo> GetCompletions(IDjangoCompletionContext context, int position)
        {
            // If no argument, show urls
            if (Args.Length == 0)
            {
                return(GetUrlCompletion(context));
            }

            BlockClassification?argBeforePosition            = GetArgBeforePosition(position);
            BlockClassification?argPenultimateBeforePosition = GetPenultimateArgBeforePosition(position);

            if (argBeforePosition == null)
            {
                return(GetUrlCompletion(context));
            }

            // No completion for the url variable name after the 'as' keyword
            if (IsAfterAsKeyword(argBeforePosition, argPenultimateBeforePosition))
            {
                return(Enumerable.Empty <CompletionInfo>());
            }

            DjangoUrl url = FindCurrentDjangoUrl(context);

            // Too many parameters are already in the statement
            if (_nbDefinedParameters >= url.Parameters.Count)
            {
                return(new[] {
                    new CompletionInfo("as", StandardGlyphGroup.GlyphKeyword),
                });
            }

            // Completion proposes unused named parameters, template variables and the 'as' keyword
            return(Enumerable.Concat(
                       Enumerable.Concat(
                           GetUnusedNamedParameters(url),
                           base.GetCompletions(context, position)
                           ),
                       new[] {
                new CompletionInfo("as", StandardGlyphGroup.GlyphKeyword)
            }
                       ));
        }
Exemple #2
0
        private IEnumerable <CompletionInfo> GetUnusedNamedParameters(DjangoUrl url)
        {
            if (url == null)
            {
                return(Enumerable.Empty <CompletionInfo>());
            }

            IList <string> undefinedNamedParameters = new List <string>();

            foreach (DjangoUrlParameter urlParam in url.NamedParameters)
            {
                if (!_definedNamedParameters.Contains(urlParam.Name))
                {
                    undefinedNamedParameters.Add(urlParam.Name);
                }
            }

            return(CompletionInfo.ToCompletionInfo(undefinedNamedParameters.Select(p => p += '='), StandardGlyphGroup.GlyphGroupField));
        }
Exemple #3
0
        private IEnumerable<CompletionInfo> GetUnusedNamedParameters(DjangoUrl url) {
            if (url == null) {
                return Enumerable.Empty<CompletionInfo>();
            }

            IList<string> undefinedNamedParameters = new List<string>();
            foreach (DjangoUrlParameter urlParam in url.NamedParameters) {
                if (!_definedNamedParameters.Contains(urlParam.Name)) {
                    undefinedNamedParameters.Add(urlParam.Name);
                }
            }

            return CompletionInfo.ToCompletionInfo(undefinedNamedParameters.Select(p => p += '='), StandardGlyphGroup.GlyphGroupField);
        }