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>(); // TODO detect completion if completing a named parameters (param=) (and return base.GetCompletions(context, position)) // Completion proposes unused named parameters, template variables and the 'as' keyword DjangoUrl url = FindCurrentDjangoUrl(context); return Enumerable.Concat( Enumerable.Concat( GetUnusedNamedParameters(url), base.GetCompletions(context, position) ), new[] { new CompletionInfo("as", StandardGlyphGroup.GlyphKeyword) } ); }
protected static IEnumerable <CompletionInfo> GetCompletions(IDjangoCompletionContext context, int position, DjangoVariable[] variables, int max = Int32.MaxValue) { for (int i = 0; i < variables.Length; i++) { if (position >= variables[i].ExpressionStart && (i == variables.Length - 1 || position < variables[i + 1].ExpressionStart)) { var res = variables[i].GetCompletions(context, position); if (res.Count() != 0) { return(res); } } } if (variables.Length < max) { var vars = context.Variables; if (vars != null) { return(CompletionInfo.ToCompletionInfo(vars, StandardGlyphGroup.GlyphGroupField)); } } return(new CompletionInfo[0]); }
public override IEnumerable<CompletionInfo> GetCompletions(IDjangoCompletionContext context, int position) { if (_tagType == null) { return GetTagList(); } else if (position >= _argStart && position < _argStart + _tagType.Length) { // filter based upon entered text string filter = _tagType.Substring(0, position - _argStart); return GetTagList().Where(tag => tag.DisplayText.StartsWith(filter)); } return new CompletionInfo[0]; }
public IEnumerable <CompletionInfo> GetCompletions(IDjangoCompletionContext context, int position) { if (Expression == null) { return(CompletionInfo.ToCompletionInfo(context.Variables, StandardGlyphGroup.GlyphGroupField)); } else if (position <= Expression.Value.Length + ExpressionStart) { if (position - ExpressionStart - 1 >= 0 && Expression.Value[position - ExpressionStart - 1] == '.') { // TODO: Handle multiple dots string varName = Expression.Value.Substring(0, Expression.Value.IndexOf('.')); // get the members of this variable return(CompletionInfo.ToCompletionInfo(context.GetMembers(varName))); } else { return(CompletionInfo.ToCompletionInfo(context.Variables, StandardGlyphGroup.GlyphGroupField)); } } else if (Filters.Length > 0) { // we are triggering in the filter or arg area foreach (var curFilter in Filters) { if (position >= curFilter.FilterStart && position <= curFilter.FilterStart + curFilter.Filter.Length) { // it's in this filter area return(CompletionInfo.ToCompletionInfo(context.Filters, StandardGlyphGroup.GlyphKeyword)); } else if (curFilter.Arg != null && position >= curFilter.ArgStart && position < curFilter.ArgStart + curFilter.Arg.Value.Length) { // it's in this argument return(CompletionInfo.ToCompletionInfo(context.Variables, StandardGlyphGroup.GlyphGroupField)); } } if (String.IsNullOrWhiteSpace(Filters.Last().Filter)) { // last filter was blank, so provide filters return(CompletionInfo.ToCompletionInfo(context.Filters, StandardGlyphGroup.GlyphKeyword)); } else { // ... else, provide variables return(CompletionInfo.ToCompletionInfo(context.Variables, StandardGlyphGroup.GlyphGroupField)); } } return(Enumerable.Empty <CompletionInfo>()); }
public override IEnumerable<CompletionInfo> GetCompletions(IDjangoCompletionContext context, int position) { if (_argStart == -1) { return new[] { new CompletionInfo( "on", StandardGlyphGroup.GlyphGroupVariable ), new CompletionInfo( "off", StandardGlyphGroup.GlyphGroupVariable ) }; } return new CompletionInfo[0]; }
public override IEnumerable<CompletionInfo> GetCompletions(IDjangoCompletionContext context, int position) { // no argument yet, or the last argument was a keyword, then we are completing an identifier if (Args.Length == 0 || Args.Last().Classification == Classification.Keyword || position <= Args.Last().Span.End) { // get the variables return Enumerable.Concat( base.GetCompletions(context, position), new[] { new CompletionInfo("not", StandardGlyphGroup.GlyphKeyword) } ); } else { // last word was an identifier, so we'll complete and/or return new[] { new CompletionInfo("and", StandardGlyphGroup.GlyphKeyword), new CompletionInfo("or", StandardGlyphGroup.GlyphKeyword) }; } }
public override IEnumerable<CompletionInfo> GetCompletions(IDjangoCompletionContext context, int position) { if (InStart == -1 || position < InStart) { return new CompletionInfo[0]; } else if (Variable != null && position > InStart) { var res = Variable.GetCompletions(context, position); if (position > ArgsEnd && ReversedStart == -1 && Variable.Expression != null) { return System.Linq.Enumerable.Concat( res, new[] { new CompletionInfo("reversed", StandardGlyphGroup.GlyphKeyword) } ); } return res; } return base.GetCompletions(context, position); }
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) } )); }
private IEnumerable <CompletionInfo> GetUrlCompletion(IDjangoCompletionContext context) { return(CompletionInfo.ToCompletionInfo(context.Urls.Select(url => string.Format("'{0}'", url.FullName)), StandardGlyphGroup.GlyphGroupField)); }
private IEnumerable<CompletionInfo> GetUrlCompletion(IDjangoCompletionContext context) { return CompletionInfo.ToCompletionInfo(context.Urls.Select(url => string.Format("'{0}'", url.FullUrlName)), StandardGlyphGroup.GlyphGroupField); }
public override IEnumerable<CompletionInfo> GetCompletions(IDjangoCompletionContext context, int position) { return _variable.GetCompletions(context, position + 4); }
protected static IEnumerable<CompletionInfo> GetCompletions(IDjangoCompletionContext context, int position, DjangoVariable[] variables, int max = Int32.MaxValue) { for (int i = 0; i < variables.Length; i++) { if (position >= variables[i].ExpressionStart && (i == variables.Length - 1 || position < variables[i + 1].ExpressionStart)) { var res = variables[i].GetCompletions(context, position); if (res.Count() != 0) { return res; } } } if (variables.Length < max) { var vars = context.Variables; if (vars != null) { return CompletionInfo.ToCompletionInfo(vars.Keys, StandardGlyphGroup.GlyphGroupField); } } return new CompletionInfo[0]; }
public override IEnumerable <CompletionInfo> GetCompletions(IDjangoCompletionContext context, int position) { return(GetCompletions(context, position, _variables)); }
public virtual IEnumerable<CompletionInfo> GetCompletions(IDjangoCompletionContext context, int position) { return CompletionInfo.ToCompletionInfo(context.Variables, StandardGlyphGroup.GlyphGroupField); }
public override IEnumerable<CompletionInfo> GetCompletions(IDjangoCompletionContext context, int position) { return new CompletionInfo[0]; }
public override IEnumerable<CompletionInfo> GetCompletions(IDjangoCompletionContext context, int position) { return GetCompletions(context, position, _args, 2); }
private DjangoUrl FindCurrentDjangoUrl(IDjangoCompletionContext context) { return(context.Urls.Where(url => url.FullName.Equals(_urlName)).FirstOrDefault()); }
public virtual IEnumerable <CompletionInfo> GetCompletions(IDjangoCompletionContext context, int position) { return(CompletionInfo.ToCompletionInfo(context.Variables, StandardGlyphGroup.GlyphGroupField)); }
public override IEnumerable <CompletionInfo> GetCompletions(IDjangoCompletionContext context, int position) { return(new CompletionInfo[0]); }
public IEnumerable <CompletionInfo> GetCompletions(IDjangoCompletionContext context, int position) { if (Expression == null) { return(CompletionInfo.ToCompletionInfo(context.Variables, StandardGlyphGroup.GlyphGroupField)); } else if (position <= Expression.Value.Length + ExpressionStart) { if (position - ExpressionStart - 1 >= 0 && Expression.Value[position - ExpressionStart - 1] == '.') { // TODO: Handle multiple dots string varName = Expression.Value.Substring(0, Expression.Value.IndexOf('.')); // get the members of this variable HashSet <AnalysisValue> values; if (context.Variables != null && context.Variables.TryGetValue(varName, out values)) { var newTags = new Dictionary <string, PythonMemberType>(); foreach (var member in values.SelectMany(item => item.GetAllMembers(context.ModuleContext))) { string name = member.Key; PythonMemberType type, newType = GetMemberType(member.Value); if (!newTags.TryGetValue(name, out type)) { newTags[name] = newType; } else if (type != newType && type != PythonMemberType.Unknown && newType != PythonMemberType.Unknown) { newTags[name] = PythonMemberType.Multiple; } } return(CompletionInfo.ToCompletionInfo(newTags)); } } else { return(CompletionInfo.ToCompletionInfo(context.Variables, StandardGlyphGroup.GlyphGroupField)); } } else if (Filters.Length > 0) { // we are triggering in the filter or arg area foreach (var curFilter in Filters) { if (position >= curFilter.FilterStart && position <= curFilter.FilterStart + curFilter.Filter.Length) { // it's in this filter area return(CompletionInfo.ToCompletionInfo(context.Filters, StandardGlyphGroup.GlyphKeyword)); } else if (curFilter.Arg != null && position >= curFilter.ArgStart && position < curFilter.ArgStart + curFilter.Arg.Value.Length) { // it's in this argument return(CompletionInfo.ToCompletionInfo(context.Variables, StandardGlyphGroup.GlyphGroupField)); } } if (String.IsNullOrWhiteSpace(Filters.Last().Filter)) { // last filter was blank, so provide filters return(CompletionInfo.ToCompletionInfo(context.Filters, StandardGlyphGroup.GlyphKeyword)); } else { // ... else, provide variables return(CompletionInfo.ToCompletionInfo(context.Variables, StandardGlyphGroup.GlyphGroupField)); } } return(Enumerable.Empty <CompletionInfo>()); }
private DjangoUrl FindCurrentDjangoUrl(IDjangoCompletionContext context) { return context.Urls.Where(url => url.FullUrlName.Equals(_urlName)).FirstOrDefault(); }