示例#1
0
        public bool IsApplicable(CodeCompletionContext context)
        {
            if(!context.IsAvalilableAttributeValueCompletion)
                return false;

            return GetAppenderRef(context) != null;
        }
        public bool IsApplicable(CodeCompletionContext context)
        {
            if(context.IsAvalilableAttributeNameCompletion)
                return false;

            throw new System.NotImplementedException();
        }
 public PsiCodeCompletionContext(CodeCompletionContext context, TextLookupRanges completionRanges, PsiReparsedCompletionContext reparsedContext)
   :
     base(context)
 {
   ReparsedContext = reparsedContext;
   Ranges = completionRanges;
 }
        public void InsertCompletionText(ICompletionWidget widget, CodeCompletionContext context)
        {
            // insert add/remove event handler code after +=/-=
            editor.Replace (initialOffset, editor.Caret.Offset - initialOffset, this.DisplayText + ";");

            // Search opening bracket of member
            int pos = editor.Document.LocationToOffset (callingMember.BodyRegion.Start.Line - 1, callingMember.BodyRegion.Start.Column - 1);
            while (pos < editor.Document.Length && editor.Document.GetCharAt (pos) != '{') {
                pos++;
            }

            // Search closing bracket of member
            pos = editor.Document.GetMatchingBracketOffset (pos) + 1;

            pos = Math.Max (0, Math.Min (pos, editor.Document.Length - 1));

            // Insert new event handler after closing bracket
            string indent = editor.Document.GetLine (callingMember.Location.Line).GetIndentation (editor.Document);

            StringBuilder sb = new StringBuilder ();
            sb.AppendLine ();
            sb.AppendLine ();
            sb.Append (indent);
            if (callingMember.IsStatic)
                sb.Append ("static ");
            sb.Append ("void ");sb.Append (this.DisplayText);sb.Append (' ');sb.Append (this.parameterList);sb.AppendLine ();
            sb.Append (indent);sb.Append ("{");sb.AppendLine ();
            sb.Append (indent);sb.Append (TextEditorProperties.IndentString);
            int cursorPos = pos + sb.Length;
            sb.AppendLine ();
            sb.Append (indent);sb.Append ("}");
            editor.Insert (pos, sb.ToString ());
            editor.Caret.Offset = cursorPos;
        }
 public NTriplesCodeCompletionContext(
     CodeCompletionContext context, TextLookupRanges completionRanges, NTriplesReparsedCompletionContext reparsedContext)
     : base(context)
 {
     this.ReparsedContext = reparsedContext;
     this.Ranges = completionRanges;
 }
        public override ISpecificCodeCompletionContext GetCompletionContext(CodeCompletionContext context)
        {
            var unterminatedContext = new NTriplesReparsedCompletionContext(context.File, context.SelectedTreeRange, "aaa");
            unterminatedContext.Init();
            IReference referenceToComplete = unterminatedContext.Reference;
            ITreeNode elementToComplete = unterminatedContext.TreeNode;
            if (elementToComplete == null)
            {
                return null;
            }

            TreeTextRange referenceRange = referenceToComplete != null
                                               ? referenceToComplete.GetTreeTextRange()
                                               : GetElementRange(elementToComplete);
            TextRange referenceDocumentRange = unterminatedContext.ToDocumentRange(referenceRange);
            if (!referenceDocumentRange.IsValid)
            {
                return null;
            }

            if (!referenceDocumentRange.Contains(context.CaretDocumentRange.TextRange))
            {
                return null;
            }

            TextLookupRanges ranges = GetTextLookupRanges(context, referenceDocumentRange);
            return new NTriplesCodeCompletionContext(context, ranges, unterminatedContext);
        }
        public void Apply(CodeCompletionContext context, IList<ILookupItem> result)
        {
            IParameterDescriptorProvider provider = GetParameterDescriptorProvider(context);

            ICollection<IParameterDescriptor> descriptors = provider.GetParameterDescriptors();

            // it's parameters conception hak, TODO fix conception
            IXmlTag tag = context.GetAttributeTag();
            Assert.CheckNotNull(tag);

            foreach (IParameterDescriptor descriptor in descriptors)
            {
                if (!descriptor.IsAttribute)
                    continue;

                // scipr declared attribjutes
                // it's parameters conception hak, TODO fix conception
                if(tag.GetAttribute(descriptor.Name) != null)
                    continue;

                LookupItemBase item = CreateItem(descriptor, context);
                item.InsertRange = new TextRange(0);
                item.ReplaceRange = new TextRange(0, context.GetPrefix().Length);
                result.Add(item);
            }
        }
        public override ISpecificCodeCompletionContext GetCompletionContext(CodeCompletionContext context)
        {
            TreeOffset startOffset = context.SelectedTreeRange.StartOffset;
            ITokenNode tokenNode = GetTokenNode(context);
            if (tokenNode == null)
                return null;

            int offset = tokenNode.GetTreeStartOffset().Offset;
            int start = startOffset.Offset - offset;
            if (start <= 2)
                return null;

            string text = tokenNode.GetText();
            if (start > text.Length)
                return null;

            string commentText = text.Substring(2, start - 2);
            int emojiStart = commentText.LastIndexOf(':');
            if (emojiStart < 0)
                return null;
            for (int index = emojiStart + 1; index < commentText.Length; ++index)
            {
                if ((index != emojiStart + 1 || !IsEmojiChar(commentText[index])) && (index <= emojiStart + 1 || !IsEmojiChar(commentText[index])))
                    return null;
            }
            DocumentRange documentRange = context.File.GetDocumentRange(new TreeTextRange(new TreeOffset(offset + emojiStart + 2), new TreeOffset(offset + start)));
            if (!documentRange.IsValid())
                return null;
            return new ContextInDocComment(context, documentRange, new TextLookupRanges(documentRange.TextRange, documentRange.TextRange));

        }
        public bool IsApplicable(CodeCompletionContext context)
        {
            if(!context.IsAvalilableAttributeValueCompletion)
                return false;

            return true;
        }
示例#10
0
 protected LookupItemBase CreateItem(IParameterDescriptor descriptor, CodeCompletionContext context)
 {
     if (descriptor.DecraedElement != null)
         return new ParameterLookupItem(descriptor, new DeclaredElementLookupItemCreationContext(context.ProjectFile));
     else
         return new StaticParameterLookupItem(descriptor.Name);
 }
        public AbbreviatedTextLookupItem(string text, CodeCompletionContext context, IconId image)
            : base(text, image, true)
        {
            this.context = context;

            // When dealing with dynamic items providers, static items are simply merged into the list
            // on each keystroke. If the dynamic item provider adds dynamic items, the merging happens
            // like this:
            // 1. Get a list of existing dynamic items
            // 2. Remove any items that fail ILookupItem.Match
            // 3. Retrieve the item's BaseDynamicRule.PrefixKey value. If it exists and is longer
            //    than the current prefix, remove it
            //    (I'm not sure on the reason for this, perhaps to handle deleting chars in the prefix?)
            // 4. Loop over the new items
            //    a. If the item is ITextualLookupItem and has a BaseDynamicRule.PrefixKey value, look
            //       for the name in the (filtered) list of previous dynamic results. If it exists,
            //       don't add a new item
            //    b. Otherwise, add the item
            //
            // So, static items are always added and never removed. Dynamic items are only merged if
            // they are ITextualLookupItem and have a BaseDynamicRule.PrefixKey value. Dynamic items
            // are removed if they are ITextualLookupItem and their PrefixKey value is longer than
            // the current prefix, presumably when the prefix has chars deleted
            //
            // Which means, to allow us to remove dynamic items on each keystroke, even when adding
            // chars to the prefix, we need a dynamic item that implements ITextualLookupItem and
            // that has a really long PrefixKey value. This is a hack.
            PutData(BaseDynamicRule.PrefixKey, "really_long_string_that_shouldnt_match_so_that_the_item_is_removed");
        }
		public override ICompletionDataProvider HandleCodeCompletion (
		    CodeCompletionContext completionContext, char completionChar, ref int triggerWordLength)
		{
			int pos = completionContext.TriggerOffset;
			if (pos > 0 && Editor.GetCharAt (pos - 1) == completionChar) {
				return HandleCodeCompletion ((CodeCompletionContext) completionContext, false, ref triggerWordLength);
			}
			return null;
		}
示例#13
0
 private IParameterDescriptorProvider GetParameterDescriptorProvider(CodeCompletionContext context)
 {
     ITokenNode token = context.Token;
     if (token.GetTokenType() == context.GetTokenTypes().SPACE &&
         (token.GetPrevToken().GetTokenType() == context.GetTokenTypes().TAG_START
         || token.GetPrevToken().GetTokenType() == context.GetTokenTypes().IDENTIFIER))
         return token.Parent as IParameterDescriptorProvider;
     else
         return token.Parent.Parent as IParameterDescriptorProvider;
 }
        public override bool IsApplicable(CodeCompletionContext context)
        {
            if (!context.IsAvalilableAttributeValueCompletion)
                return false;

            if (!IsAttributeOf<IDeclaredParameter>(L4NConstants.TYPE, context))
                return false;

            return true;
        }
		public override ICompletionDataProvider CodeCompletionCommand (CodeCompletionContext completionContext)
		{
			int pos = completionContext.TriggerOffset;
			string txt = Editor.GetText (pos - 1, pos);
			int triggerWordLength = 0;
			ICompletionDataProvider cp = null;
			if (txt.Length > 0)
				cp = HandleCodeCompletion ((CodeCompletionContext) completionContext, true, ref triggerWordLength);
			
			return cp;
		}
        public bool IsApplicable(CodeCompletionContext context)
        {
            if (!context.IsAvalilableAttributeNameCompletion)
                return false;

            IDeclaredParameter declaredParameter = GetDeclaredParameter(context);
            if (declaredParameter == null)
                return false;

            return true;
        }
        ///<summary>
        ///
        ///            Applies the rule
        ///            
        ///</summary>
        ///
        public void Apply(CodeCompletionContext context, IList<ILookupItem> result)
        {
            // do nothing

            IUsingNamespaceDirective usingNamespaceDirective = context.Element.GetContainingElement<IUsingNamespaceDirective>(true);

            if(context.Reference == null)
                return;

            ISymbolTable table = context.Reference.GetCompletionSymbolTable();
            string[] names = table.Names("", true, delegate () { return false;});
        }
示例#18
0
        public override bool IsApplicable(CodeCompletionContext context)
        {
            if(!context.IsAvalilableAttributeValueCompletion)
                return false;

            if(!IsAttributeOf<IAppender>(L4NConstants.TYPE, context))
                return false;

            //            TODO introduce base class for <dynamic parameter>@type parameter@type and renderer@type

            return true;
        }
        protected override ITypeElement GetBaseType(CodeCompletionContext context)
        {
            IDeclaredParameter declaredParameter = GetAttributeTag<IDeclaredParameter>(context);
            Assert.CheckNotNull(declaredParameter);
            IParameterDescriptor descriptor = declaredParameter.ParameterDescriptorProvider.GetParameterDescriptor(declaredParameter.Name);

            if(descriptor.RequredType)
            {
                return ((IDeclaredType) descriptor.Type).GetTypeElement();
            }

            return null;
        }
示例#20
0
        public bool IsApplicable(CodeCompletionContext context)
        {
            if(!context.IsAvalilableAttributeNameCompletion)
                return false;

            IParameterDescriptorProvider provider = GetParameterDescriptorProvider(context);
            if(provider == null)
                return false;

            //            if(!provider.IsAvailable)
            //                return false;

            return true;
        }
示例#21
0
        public bool IsApplicable(CodeCompletionContext context)
        {
            if (!context.IsAvalilableTagCompletion)
                return false;

            IParameterDescriptorProvider parameterDescriptorProvider = GetParameterDescriptorProvider(context);

            if (parameterDescriptorProvider == null)
                return false;

            if (!parameterDescriptorProvider.IsAvailable)
                return false;

            return true;
        }
示例#22
0
        public void Apply(CodeCompletionContext context, IList<ILookupItem> result)
        {
            IParameterDescriptorProvider parameterDescriptorProvider = GetParameterDescriptorProvider(context);

            ICollection<IParameterDescriptor> descriptors = parameterDescriptorProvider.GetParameterDescriptors();
            foreach (IParameterDescriptor descriptor in descriptors)
            {
                if (descriptor.IsAttribute)
                    continue;

                LookupItemBase item = CreateItem(descriptor, context);
                item.InsertRange = new TextRange(0);
                item.ReplaceRange = new TextRange(0, context.GetPrefix().Length);
                result.Add(item);
            }
        }
        private ITokenNode GetTokenNode(CodeCompletionContext context)
        {
            if (!(context.File is ICSharpFile))
                return null;

            if (!context.SelectedTreeRange.IsValid() || context.SelectedTreeRange.Length > 0)
                return null;

            if (AutomaticCodeCompletionStrategyEx.MatchTokenType(null, context.File, context.TextControl,
                token => token == CSharpTokenType.END_OF_LINE_COMMENT && token.IsComment))
            {
                var tokenNode = context.File.FindTokenAt(context.Document, context.TextControl.Caret.Offset() - 1) as ITokenNode;
                if (tokenNode is IDocCommentNode) return null;
                return tokenNode;
            }

            return null;
        }
示例#24
0
        public override ICompletionDataList HandleCodeCompletion(CodeCompletionContext completionContext, char completionChar)
        {
            CompletionDataList cdl = new CompletionDataList();

            switch(completionChar)
            {
                case '.':

                    break;
                case '>':
                    Console.WriteLine("c_char: {0}", completionChar);
                    Console.WriteLine("prev: {0}", Editor.GetCharAt(completionContext.TriggerOffset - 2));

                    break;
            }

            return cdl;
        }
示例#25
0
        public void Apply(CodeCompletionContext context, IList<ILookupItem> result)
        {
            IAppenderRef appenderRef = GetAppenderRef(context);
            Assert.CheckNotNull(appenderRef);

            IL4NSection l4nSection = appenderRef.GetContainingElement<IL4NSection>(false);
            Assert.CheckNotNull(l4nSection);

            ICollection<IAppender> appenders = l4nSection.GetAppenders();

            foreach (IAppender appender in appenders)
            {
                DeclaredElementLookupItem item =
                    new DeclaredElementLookupItem(new DeclaredElementInstance((IDeclaredElement)appender), new DeclaredElementLookupItemCreationContext(context.ProjectFile), L4NLanguageService.L4N);
                item.InsertRange = new TextRange(0);
                item.ReplaceRange = new TextRange(0, context.GetPrefix().Length);
                result.Add(item);
            }
        }
    public override ISpecificCodeCompletionContext GetCompletionContext(CodeCompletionContext context)
    {
      var solution = ReSharperSolution.XXLanguageXXSolution;
      var nitraFile = solution.GetNitraFile(context.Document);
      if (nitraFile == null)
        return null;

      var ast = nitraFile.Ast;

      if (ast == null)
        return null;

      var pos = context.CaretTreeOffset.Offset;
      var parseResult = ast.File.ParseResult;
      NSpan replacementSpan;
      var result = NitraUtils.CompleteWord(pos, parseResult, ast, out replacementSpan);
      var textRange = new TextRange(replacementSpan.StartPos, replacementSpan.EndPos);
      return new NitraCodeCompletionContext(context, result, GetTextLookupRanges(context, textRange));
    }
示例#27
0
        public void Apply(CodeCompletionContext context, IList<ILookupItem> result)
        {
            List<ILookupItem> toRemove = new List<ILookupItem>();
            foreach (ILookupItem item in result)
            {
                DeclaredElementLookupItem declaredElementLookupItem = item as DeclaredElementLookupItem;
                if(declaredElementLookupItem == null)
                    continue;

                IDeclaredElement element = declaredElementLookupItem.PreferredDeclaredElement.Element;
                if(!(element is IClass) &&!(element is INamespace))
                    toRemove.Add(declaredElementLookupItem);
            }

            foreach (ILookupItem item in toRemove)
            {
                result.Remove(item);
            }
        }
        public void Apply(CodeCompletionContext context, IList<ILookupItem> result)
        {
            IDeclaredParameter declaredParameter = GetDeclaredParameter(context);
            Assert.CheckNotNull(declaredParameter);

            IParameterDescriptor descriptor =
                declaredParameter.ParameterDescriptorProvider.GetParameterDescriptor(declaredParameter.Name);

            LookupItemBase item = null;
            if (!descriptor.RequredType)
                item = new TextLookupItem("value");
            else
                item = new TextLookupItem("type");

            item.InsertRange = new TextRange(0);
            item.ReplaceRange = new TextRange(0, context.GetPrefix().Length);

            result.Add(item);
        }
        public void Apply(CodeCompletionContext context, IList<ILookupItem> result)
        {
            IXmlTag tag = context.GetAttributeTag();
            Assert.CheckNotNull(tag);
            IXmlAttribute attribute = context.Token.GetContainingElement<IXmlAttribute>(false);
            Assert.CheckNotNull(attribute);

            IParameterDescriptor descriptor = null;
            IDeclaredParameter declaredParameter = tag as IDeclaredParameter;
            if (declaredParameter != null && attribute.AttributeName == L4NConstants.VALUE)
            {
                descriptor = declaredParameter.ParameterDescriptorProvider.GetParameterDescriptor(declaredParameter.Name);
            }
            else
            {
                IParameterDescriptorProvider parameterDescriptorProvider = tag as IParameterDescriptorProvider;
                if (parameterDescriptorProvider == null)
                    return;
                descriptor = parameterDescriptorProvider.GetParameterDescriptor(attribute.AttributeName);
            }

            if(descriptor == null)
                return;

            if(!descriptor.IsEnumerable)
                return;

            string[] values = descriptor.PossibleValues;
            if(values == null)
                return;

            foreach (string v in values)
            {
                TextLookupItem item = new TextLookupItem(v);
                item.InsertRange = new TextRange(0);
                item.ReplaceRange = new TextRange(0, context.GetPrefix().Length);
                result.Add(item);
            }
        }
        protected virtual ICompletionDataList HandleCodeCompletion(
            CodeCompletionContext completionContext, bool forced, ref int triggerWordLength)
        {
            IEditableTextBuffer buf = this.EditableBuffer;

            // completionChar may be a space even if the current char isn't, when ctrl-space is fired t
            TextLocation currentLocation = new TextLocation(completionContext.TriggerLine, completionContext.TriggerLineOffset);
            char         currentChar     = completionContext.TriggerOffset < 1? ' ' : buf.GetCharAt(completionContext.TriggerOffset - 1);
            char         previousChar    = completionContext.TriggerOffset < 2? ' ' : buf.GetCharAt(completionContext.TriggerOffset - 2);

            LoggingService.LogDebug("Attempting completion for state '{0}'x{1}, previousChar='{2}',"
                                    + " currentChar='{3}', forced='{4}'", tracker.Engine.CurrentState,
                                    tracker.Engine.CurrentStateLength, previousChar, currentChar, forced);

            //closing tag completion
            if (tracker.Engine.CurrentState is XmlFreeState && currentChar == '>')
            {
                return(ClosingTagCompletion(buf, currentLocation));
            }

            // Auto insert '>' when '/' is typed inside tag state (for quick tag closing)
            //FIXME: avoid doing this when the next non-whitespace char is ">" or ignore the next ">" typed
            if (XmlEditorOptions.AutoInsertFragments && tracker.Engine.CurrentState is XmlTagState && currentChar == '/')
            {
                buf.InsertText(buf.CursorPosition, ">");
                return(null);
            }

            //entity completion
            if (currentChar == '&' && (tracker.Engine.CurrentState is XmlFreeState ||
                                       tracker.Engine.CurrentState is XmlAttributeValueState))
            {
                CompletionDataList list = new CompletionDataList();

                //TODO: need to tweak semicolon insertion
                list.Add("apos").Description = "'";
                list.Add("quot").Description = "\"";
                list.Add("lt").Description   = "<";
                list.Add("gt").Description   = ">";
                list.Add("amp").Description  = "&";

                //not sure about these "completions". they're more like
                //shortcuts than completions but they're pretty useful
                list.Add("'").CompletionText  = "apos;";
                list.Add("\"").CompletionText = "quot;";
                list.Add("<").CompletionText  = "lt;";
                list.Add(">").CompletionText  = "gt;";
                list.Add("&").CompletionText  = "amp;";

                GetEntityCompletions(list);
                return(list);
            }

            //doctype completion
            if (tracker.Engine.CurrentState is XmlDocTypeState)
            {
                if (tracker.Engine.CurrentStateLength == 1)
                {
                    CompletionDataList list = GetDocTypeCompletions();
                    if (list != null && list.Count > 0)
                    {
                        return(list);
                    }
                }
                return(null);
            }

            //attribute value completion
            //determine whether to trigger completion within attribute values quotes
            if ((Tracker.Engine.CurrentState is XmlAttributeValueState)
                //trigger on the opening quote
                && ((Tracker.Engine.CurrentStateLength == 1 && (currentChar == '\'' || currentChar == '"'))
                    //or trigger on first letter of value, if unforced
                    || (forced || Tracker.Engine.CurrentStateLength == 2)))
            {
                var att = (XAttribute)Tracker.Engine.Nodes.Peek();

                if (att.IsNamed)
                {
                    var attributedOb = Tracker.Engine.Nodes.Peek(1) as IAttributedXObject;
                    if (attributedOb == null)
                    {
                        return(null);
                    }

                    //if triggered by first letter of value or forced, grab those letters
                    triggerWordLength = Tracker.Engine.CurrentStateLength - 1;

                    return(GetAttributeValueCompletions(attributedOb, att));
                }
            }

            //attribute name completion
            if ((forced && Tracker.Engine.Nodes.Peek() is IAttributedXObject && !tracker.Engine.Nodes.Peek().IsEnded) ||
                ((Tracker.Engine.CurrentState is XmlNameState &&
                  Tracker.Engine.CurrentState.Parent is XmlAttributeState) ||
                 Tracker.Engine.CurrentState is XmlTagState) &&
                (Tracker.Engine.CurrentStateLength == 1 || forced))
            {
                IAttributedXObject attributedOb = (Tracker.Engine.Nodes.Peek() as IAttributedXObject) ??
                                                  Tracker.Engine.Nodes.Peek(1) as IAttributedXObject;
                if (attributedOb == null)
                {
                    return(null);
                }

                //attributes
                if (attributedOb.Name.IsValid && (forced ||
                                                  (char.IsWhiteSpace(previousChar) && char.IsLetter(currentChar))))
                {
                    if (!forced)
                    {
                        triggerWordLength = 1;
                    }

                    var existingAtts = new Dictionary <string, string> (StringComparer.OrdinalIgnoreCase);

                    foreach (XAttribute att in attributedOb.Attributes)
                    {
                        existingAtts [att.Name.FullName] = att.Value ?? string.Empty;
                    }

                    return(GetAttributeCompletions(attributedOb, existingAtts));
                }
            }

//			if (Tracker.Engine.CurrentState is XmlFreeState) {
//				if (line < 3) {
//				cp.Add ("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
//			}

            //element completion
            if (currentChar == '<' && tracker.Engine.CurrentState is XmlFreeState ||
                (tracker.Engine.CurrentState is XmlNameState && forced))
            {
                CompletionDataList list = new CompletionDataList();
                GetElementCompletions(list);
                AddCloseTag(list, Tracker.Engine.Nodes);
                return(list.Count > 0? list : null);
            }

            if (forced && Tracker.Engine.CurrentState is XmlFreeState)
            {
                CompletionDataList list = new CompletionDataList();
                MonoDevelop.Ide.CodeTemplates.CodeTemplateService.AddCompletionDataForFileName(Document.Name, list);
                return(list.Count > 0? list : null);
            }

            return(null);
        }
示例#31
0
        public Task <ParameterHintingResult> HandleParameterCompletion(MonoDevelop.Ide.Editor.TextEditor editor, DocumentContext context, CodeCompletionContext completionContext,
                                                                       UnderlyingDocumentInfo docInfo, char completionChar)
        {
            CodeCompletionContext ccc;
            var completion = CreateCompletionAndUpdate(editor, context, docInfo, out ccc);

            return(completion.HandleParameterCompletionAsync(completionContext, completionChar));
        }
        public ParameterDataProvider HandleParameterCompletion(MonoDevelop.Ide.Gui.Document realDocument, CodeCompletionContext completionContext, DocumentInfo info, LocalDocumentInfo localInfo, char completionChar)
        {
            CodeCompletionContext ccc;

            using (var completion = CreateCompletion(realDocument, info, localInfo, out ccc)) {
                return(completion.HandleParameterCompletion(completionContext, completionChar));
            }
        }
示例#33
0
        public override async System.Threading.Tasks.Task <ICompletionDataList> HandleCodeCompletionAsync(CodeCompletionContext completionContext, char completionChar, System.Threading.CancellationToken token)
        {
            char previousChar = defaultEditor.CaretOffset > 1 ? defaultEditor.GetCharAt(
                defaultEditor.CaretOffset - 2) : ' ';

            // Don't show completion window when directive's name is being typed
            var directive = Tracker.Engine.Nodes.Peek() as RazorDirective;

            if (directive != null && !directive.FirstBracket.HasValue)
            {
                return(null);
            }

            if (hiddenInfo != null && isInCSharpContext)
            {
                var list = (CompletionDataList)await completionBuilder.HandleCompletion(defaultEditor, defaultDocumentContext, completionContext,
                                                                                        hiddenInfo, completionChar, token);

                if (list != null)
                {
                    //filter out the C# templates, many of them are not valid
                    int oldCount = list.Count;
                    list = FilterCSharpTemplates(list);
                    int templates = list.Count - oldCount;

                    if (previousChar == '@')
                    {
                        RazorCompletion.AddAllRazorSymbols(list, razorDocument.PageInfo.HostKind);
                    }
                    if (templates > 0)
                    {
                        AddFilteredRazorTemplates(list, previousChar == '@', true);
                    }
                }
                return(list);
            }

            return(await base.HandleCodeCompletionAsync(completionContext, completionChar, token));
        }
 string ICompletionWidget.GetCompletionText(CodeCompletionContext ctx)
 {
     return(TokenText.Substring(ctx.TriggerOffset, ctx.TriggerWordLength));
 }
 public override Task <ParameterHintingResult> ParameterCompletionCommand(CodeCompletionContext completionContext)
 {
     return(HandleParameterCompletionAsync(completionContext, '('));
 }
        /// <summary>
        /// Handles the parameter completion async. Invoked automatically on every keypress.
        /// Contains scenarios for veeery perverted codes like: classInstancePointer    ->
        /// classmethod  ( (	new tempClass<int>{ 1 , 2 , 3 }  ) , (new int[1]{})) , but might be not ready for everything.
        /// </summary>
        /// <returns>The parameter completion async.</returns>
        /// <param name="completionContext">Completion context.</param>
        /// <param name="completionChar">Completion char.</param>
        /// <param name="token">Token.</param>s
        public override Task <ParameterHintingResult> HandleParameterCompletionAsync(
            CodeCompletionContext completionContext,
            char completionChar,
            CancellationToken token = default(CancellationToken))
        {
            if (completionChar != '(' && completionChar != ',')
            {
                return(Task.FromResult((ParameterHintingResult)null));
            }

            var project = (CProject)DocumentContext.Project;

            if (project == null || !project.HasLibClang)
            {
                return(Task.FromResult((ParameterHintingResult)null));
            }

            return(Task.Run(() => {
                #region NEEDED_FOR_STARTOFFSET_:(

                int inParenthesis = 0;
                int nameEnd = completionContext.TriggerOffset - 1;
                char endChar = Editor.GetCharAt(nameEnd);
                char prevChar = Editor.GetCharAt(nameEnd - 1);
                while (!(prevChar != '(' && endChar == '(' && inParenthesis <= 0) &&             //multiple '('
                       nameEnd > 1)
                {
                    switch (endChar)
                    {
                    case ')':
                        inParenthesis++;
                        break;

                    case '(':
                        inParenthesis--;
                        break;
                    }
                    endChar = Editor.GetCharAt(--nameEnd);
                    prevChar = Editor.GetCharAt(nameEnd - 1);
                }

                WorkaroundWhitespaces(ref prevChar, ref nameEnd);
                WorkaroundTemplateSpecifier(ref prevChar, ref nameEnd);
                WorkaroundWhitespaces(ref prevChar, ref nameEnd);

                int nameStart = nameEnd - 1;
                //the actual name getting, march backwards while not a ., ->, space etc.
                while (!allowedChars.Contains(prevChar) && nameStart > 1)
                {
                    nameStart--;
                    prevChar = Editor.GetCharAt(nameStart - 1);
                }
                string functionName = Editor.Text.Substring(nameStart, nameEnd - nameStart);

                #endregion

                if (string.IsNullOrEmpty(functionName))
                {
                    return (ParameterHintingResult)null;
                }
                unsavedFiles = project.UnsavedFiles.Get();

                IntPtr pResults = project.ClangManager.CodeComplete(completionContext, unsavedFiles.ToArray(), DocumentContext.Name);
                CXCodeCompleteResults results = Marshal.PtrToStructure <CXCodeCompleteResults> (pResults);

                if (results.Results.ToInt64() != 0)
                {
                    var parameterInformation = new List <OverloadCandidate> ();
                    for (int i = 0; i < results.NumResults; i++)
                    {
                        IntPtr iteratingPointer = results.Results + i * Marshal.SizeOf <CXCompletionResult> ();
                        CXCompletionResult resultItem = Marshal.PtrToStructure <CXCompletionResult> (iteratingPointer);

                        if (resultItem.CursorKind == CXCursorKind.@OverloadCandidate)
                        {
                            parameterInformation.Add(GetOverloadCandidate(resultItem));
                        }
                    }
                    clang.disposeCodeCompleteResults(pResults);
                    return (ParameterHintingResult) new ParameterDataProvider(nameStart, parameterInformation);
                }
                return (ParameterHintingResult)null;
            }, token));
        }
        protected virtual async Task <ICompletionDataList> HandleCodeCompletion(
            CodeCompletionContext completionContext, bool forced, CancellationToken token)
        {
            var buf = this.Editor;

            // completionChar may be a space even if the current char isn't, when ctrl-space is fired t
            var  currentLocation = new DocumentLocation(completionContext.TriggerLine, completionContext.TriggerLineOffset);
            char currentChar     = completionContext.TriggerOffset < 1? ' ' : buf.GetCharAt(completionContext.TriggerOffset - 1);
            char previousChar    = completionContext.TriggerOffset < 2? ' ' : buf.GetCharAt(completionContext.TriggerOffset - 2);

            LoggingService.LogDebug("Attempting completion for state '{0}'x{1}, previousChar='{2}',"
                                    + " currentChar='{3}', forced='{4}'", tracker.Engine.CurrentState,
                                    tracker.Engine.CurrentStateLength, previousChar, currentChar, forced);

            //closing tag completion
            if (tracker.Engine.CurrentState is XmlRootState && currentChar == '>')
            {
                return(ClosingTagCompletion(buf, currentLocation));
            }

            // Auto insert '>' when '/' is typed inside tag state (for quick tag closing)
            //FIXME: avoid doing this when the next non-whitespace char is ">" or ignore the next ">" typed
            if (XmlEditorOptions.AutoInsertFragments && tracker.Engine.CurrentState is XmlTagState && currentChar == '/')
            {
                buf.InsertAtCaret(">");
                return(null);
            }

            //entity completion
            if (currentChar == '&' && (tracker.Engine.CurrentState is XmlRootState ||
                                       tracker.Engine.CurrentState is XmlAttributeValueState))
            {
                var list = new CompletionDataList();

                //TODO: need to tweak semicolon insertion
                list.Add(new BaseXmlCompletionData("apos", "'"));
                list.Add(new BaseXmlCompletionData("quot", "\""));
                list.Add(new BaseXmlCompletionData("lt", "<"));
                list.Add(new BaseXmlCompletionData("gt", ">"));
                list.Add(new BaseXmlCompletionData("amp", "&"));

                //not sure about these "completions". they're more like
                //shortcuts than completions but they're pretty useful
                list.Add(new BaseXmlCompletionData("'")
                {
                    CompletionText = "apos;"
                });
                list.Add(new BaseXmlCompletionData("\"")
                {
                    CompletionText = "quot;"
                });
                list.Add(new BaseXmlCompletionData("<")
                {
                    CompletionText = "lt;"
                });
                list.Add(new BaseXmlCompletionData(">")
                {
                    CompletionText = "gt;"
                });
                list.Add(new BaseXmlCompletionData("&")
                {
                    CompletionText = "amp;"
                });

                var ecList = await GetEntityCompletions(token);

                list.AddRange(ecList);
                return(list);
            }

            //doctype completion
            if (tracker.Engine.CurrentState is XmlDocTypeState)
            {
                if (tracker.Engine.CurrentStateLength == 1)
                {
                    CompletionDataList list = await GetDocTypeCompletions(token);

                    if (list != null && list.Count > 0)
                    {
                        return(list);
                    }
                }
                return(null);
            }

            //attribute value completion
            //determine whether to trigger completion within attribute values quotes
            if ((Tracker.Engine.CurrentState is XmlAttributeValueState)
                //trigger on the opening quote
                && ((Tracker.Engine.CurrentStateLength == 1 && (currentChar == '\'' || currentChar == '"'))
                    //or trigger on first letter of value, if unforced
                    || (forced || Tracker.Engine.CurrentStateLength == 2)))
            {
                var att = (XAttribute)Tracker.Engine.Nodes.Peek();

                if (att.IsNamed)
                {
                    var attributedOb = Tracker.Engine.Nodes.Peek(1) as IAttributedXObject;
                    if (attributedOb == null)
                    {
                        return(null);
                    }

                    //if triggered by first letter of value or forced, grab those letters

                    var result = await GetAttributeValueCompletions(attributedOb, att, token);

                    if (result != null)
                    {
                        result.TriggerWordLength = Tracker.Engine.CurrentStateLength - 1;
                        return(result);
                    }
                    return(null);
                }
            }

            //attribute name completion
            if ((forced && Tracker.Engine.Nodes.Peek() is IAttributedXObject && !tracker.Engine.Nodes.Peek().IsEnded) ||
                ((Tracker.Engine.CurrentState is XmlNameState &&
                  Tracker.Engine.CurrentState.Parent is XmlAttributeState) ||
                 Tracker.Engine.CurrentState is XmlTagState))
            {
                IAttributedXObject attributedOb = (Tracker.Engine.Nodes.Peek() as IAttributedXObject) ??
                                                  Tracker.Engine.Nodes.Peek(1) as IAttributedXObject;

                if (attributedOb == null || !attributedOb.Name.IsValid)
                {
                    return(null);
                }

                var currentIsNameStart   = XmlNameState.IsValidNameStart(currentChar);
                var currentIsWhiteSpace  = char.IsWhiteSpace(currentChar);
                var previousIsWhiteSpace = char.IsWhiteSpace(previousChar);

                bool shouldTriggerAttributeCompletion = forced ||
                                                        (currentIsNameStart && previousIsWhiteSpace) ||
                                                        currentIsWhiteSpace;
                if (!shouldTriggerAttributeCompletion)
                {
                    return(null);
                }

                var existingAtts = new Dictionary <string, string> (StringComparer.OrdinalIgnoreCase);

                foreach (XAttribute att in attributedOb.Attributes)
                {
                    existingAtts [att.Name.FullName] = att.Value ?? string.Empty;
                }

                var result = await GetAttributeCompletions(attributedOb, existingAtts, token);

                if (result != null)
                {
                    if (!forced && currentIsNameStart)
                    {
                        result.TriggerWordLength = 1;
                    }
                    result.AutoSelect = !currentIsWhiteSpace;
                    result.AddKeyHandler(new AttributeKeyHandler());
                    return(result);
                }
            }

            //element completion
            if (currentChar == '<' && tracker.Engine.CurrentState is XmlRootState ||
                (tracker.Engine.CurrentState is XmlNameState && forced))
            {
                var list = await GetElementCompletions(token);

                if (completionContext.TriggerLine == 1 && completionContext.TriggerOffset == 1)
                {
                    var encoding = Editor.Encoding.WebName;
                    list.Add(new BaseXmlCompletionData($"?xml version=\"1.0\" encoding=\"{encoding}\" ?>"));
                }
                AddCloseTag(list, Tracker.Engine.Nodes);
                return(list.Count > 0 ? list : null);
            }

            if (forced && Tracker.Engine.CurrentState is XmlRootState)
            {
                var list = new CompletionDataList();
                MonoDevelop.Ide.CodeTemplates.CodeTemplateService.AddCompletionDataForFileName(DocumentContext.Name, list);
                return(list.Count > 0? list : null);
            }

            return(null);
        }
示例#38
0
 public override Task <MonoDevelop.Ide.CodeCompletion.ParameterHintingResult> HandleParameterCompletionAsync(CodeCompletionContext completionContext, Ide.Editor.Extension.SignatureHelpTriggerInfo triggerInfo, CancellationToken token = default(CancellationToken))
 {
     return(InternalHandleParameterCompletionCommand(completionContext, triggerInfo, token));
 }
示例#39
0
        async Task <ICompletionDataList> InternalHandleCodeCompletion(CodeCompletionContext completionContext, CompletionTriggerInfo triggerInfo, int triggerWordLength, CancellationToken token, bool forceSymbolCompletion = false)
        {
            var analysisDocument = DocumentContext.AnalysisDocument;

            if (analysisDocument == null)
            {
                return(EmptyCompletionDataList);
            }


            var        cs = DocumentContext.RoslynWorkspace.Services.GetLanguageServices(LanguageNames.CSharp).GetService <CompletionService> ();
            SourceText sourceText;

            if (!analysisDocument.TryGetText(out sourceText))
            {
                return(EmptyCompletionDataList);
            }

            CompletionTriggerKind kind;

            switch (triggerInfo.CompletionTriggerReason)
            {
            case CompletionTriggerReason.CharTyped:
                kind = CompletionTriggerKind.Insertion;
                if (triggerInfo.TriggerCharacter == '{')
                {
                    return(EmptyCompletionDataList);
                }
                break;

            case CompletionTriggerReason.CompletionCommand:
                kind = CompletionTriggerKind.InvokeAndCommitIfUnique;
                break;

            case CompletionTriggerReason.BackspaceOrDeleteCommand:
                kind = CompletionTriggerKind.Deletion;
                break;

            case CompletionTriggerReason.RetriggerCommand:
                kind = CompletionTriggerKind.InvokeAndCommitIfUnique;
                break;

            default:
                kind = CompletionTriggerKind.Insertion;
                break;
            }
            var triggerSnapshot = Editor.GetPlatformTextBuffer().CurrentSnapshot;
            var trigger         = new CompletionTrigger(kind, triggerInfo.TriggerCharacter.HasValue ? triggerInfo.TriggerCharacter.Value : '\0');

            if (triggerInfo.CompletionTriggerReason == CompletionTriggerReason.CharTyped)
            {
                if (!cs.ShouldTriggerCompletion(sourceText, completionContext.TriggerOffset, trigger, null))
                {
                    return(EmptyCompletionDataList);
                }
            }

            Counters.ProcessCodeCompletion.Trace("C#: Getting completions");
            var customOptions = DocumentContext.RoslynWorkspace.Options
                                .WithChangedOption(CompletionOptions.TriggerOnDeletion, LanguageNames.CSharp, true)
                                .WithChangedOption(CompletionOptions.HideAdvancedMembers, LanguageNames.CSharp, IdeApp.Preferences.CompletionOptionsHideAdvancedMembers)
                                // Roslyn's implementation of this feature doesn't work correctly in old editor
                                .WithChangedOption(CompletionOptions.ShowItemsFromUnimportedNamespaces, LanguageNames.CSharp, false);
            var completionList = await Task.Run(() => cs.GetCompletionsAsync(analysisDocument, Editor.CaretOffset, trigger, options: customOptions, cancellationToken: token)).ConfigureAwait(false);

            Counters.ProcessCodeCompletion.Trace("C#: Got completions");

            if (completionList == null)
            {
                return(EmptyCompletionDataList);
            }

            var result = new CompletionDataList();

            result.TriggerWordLength = triggerWordLength;
            CSharpCompletionData defaultCompletionData = null;
            bool first = true, addProtocolCompletion = false;

            foreach (var item in completionList.Items)
            {
                if (string.IsNullOrEmpty(item.DisplayText))
                {
                    continue;
                }
                var data = new CSharpCompletionData(analysisDocument, triggerSnapshot, cs, item);
                if (first)
                {
                    first = false;
                    addProtocolCompletion = data.Provider is OverrideCompletionProvider;
                }
                result.Add(data);
                if (item.Rules.MatchPriority > 0)
                {
                    if (defaultCompletionData == null || defaultCompletionData.Rules.MatchPriority < item.Rules.MatchPriority)
                    {
                        defaultCompletionData = data;
                    }
                }
            }

            result.AutoCompleteUniqueMatch = (triggerInfo.CompletionTriggerReason == CompletionTriggerReason.CompletionCommand);

            var partialDoc = analysisDocument.WithFrozenPartialSemantics(token);
            var semanticModel = await partialDoc.GetSemanticModelAsync(token).ConfigureAwait(false);

            var syntaxContext = CSharpSyntaxContext.CreateContext(DocumentContext.RoslynWorkspace, semanticModel, completionContext.TriggerOffset, token);

            if (forceSymbolCompletion || IdeApp.Preferences.AddImportedItemsToCompletionList)
            {
                Counters.ProcessCodeCompletion.Trace("C#: Adding import completion data");
                AddImportCompletionData(syntaxContext, result, semanticModel, completionContext.TriggerOffset, token);
                Counters.ProcessCodeCompletion.Trace("C#: Added import completion data");
            }
            if (defaultCompletionData != null)
            {
                result.DefaultCompletionString = defaultCompletionData.DisplayText;
            }

            if (completionList.SuggestionModeItem != null)
            {
                if (completionList.Items.Contains(completionList.SuggestionModeItem))
                {
                    result.DefaultCompletionString = completionList.SuggestionModeItem.DisplayText;
                }
                // if a suggestion mode item is present autoselection is disabled
                // for example in the lambda case the suggestion mode item is '<lambda expression>' which is not part of the completion item list but taggs the completion list as auto select == false.
                result.AutoSelect = false;
            }
            if (triggerInfo.TriggerCharacter == '_' && triggerWordLength == 1)
            {
                result.AutoSelect = false;
            }
            if (triggerInfo.TriggerCharacter == ' ')
            {
                result.AutoCompleteEmptyMatch = true;
            }

            return(result);
        }
示例#40
0
 void ICompletionWidget.SetCompletionText(CodeCompletionContext ctx, string partial_word, string complete_word, int completeWordOffset)
 {
 }
 public override bool IsApplicable(CodeCompletionContext context) => context.File is IFSharpFile;
示例#42
0
 string ICompletionWidget.GetCompletionText(CodeCompletionContext ctx)
 {
     return(Buffer.GetText(Buffer.GetIterAtOffset(ctx.TriggerOffset), Buffer.GetIterAtMark(Buffer.InsertMark), false));
 }
        CSharpCompletionTextEditorExtension CreateCompletion(MonoDevelop.Ide.Gui.Document realDocument, DocumentInfo info, LocalDocumentInfo localInfo, out CodeCompletionContext codeCompletionContext)
        {
            var doc = new Mono.TextEditor.TextDocument()
            {
                Text = localInfo.LocalDocument,
            };
            var documentLocation = doc.OffsetToLocation(localInfo.CaretPosition);

            codeCompletionContext = new CodeCompletionContext()
            {
                TriggerOffset     = localInfo.CaretPosition,
                TriggerLine       = documentLocation.Line,
                TriggerLineOffset = documentLocation.Column - 1
            };

            return(new CSharpCompletionTextEditorExtension(localInfo.HiddenDocument)
            {
                CompletionWidget = CreateCompletionWidget(realDocument, localInfo)
            });
        }
 public string GetCompletionText(CodeCompletionContext ctx)
 {
     return(Text.Substring(ctx.TriggerOffset, ctx.TriggerWordLength));
 }
        public ICompletionDataList HandleCompletion(MonoDevelop.Ide.Gui.Document realDocument, CodeCompletionContext completionContext, DocumentInfo info, LocalDocumentInfo localInfo, char currentChar, ref int triggerWordLength)
        {
            CodeCompletionContext ccc;

            using (var completion = CreateCompletion(realDocument, info, localInfo, out ccc)) {
                return(completion.HandleCodeCompletion(completionContext, currentChar, ref triggerWordLength));
            }
        }
 public void SetCompletionText(CodeCompletionContext ctx, string partial_word, string complete_word, int completeWordOffset)
 {
     Text = complete_word;
     gtkEntry.Position = complete_word.Length;
 }
示例#47
0
 protected override async Task <ICompletionDataList> HandleCodeCompletion(CodeCompletionContext completionContext, bool forced, CancellationToken token)
 {
     isParameterValueCompletion = false;
     return(await base.HandleCodeCompletion(completionContext, forced, token));
 }
示例#48
0
 public string GetCompletionText(CodeCompletionContext ctx)
 {
     return("");
 }
示例#49
0
        public Task <ICompletionDataList> HandleCompletion(MonoDevelop.Ide.Editor.TextEditor editor, DocumentContext context, CodeCompletionContext completionContext,
                                                           UnderlyingDocumentInfo docInfo, char currentChar, CancellationToken token)
        {
            CodeCompletionContext ccc;
            var completion = CreateCompletionAndUpdate(editor, context, docInfo, out ccc);

            return(completion.HandleCodeCompletionAsync(completionContext, currentChar, token));
        }
示例#50
0
 public void SetCompletionText(CodeCompletionContext ctx, string partial_word, string complete_word, int offset)
 {
     this.CompletedWord = complete_word;
 }
        ICompletionDataList InternalHandleCodeCompletion(CodeCompletionContext completionContext, char completionChar, bool ctrlSpace, ref int triggerWordLength)
        {
            var data = TextEditorData;

            if (data.CurrentMode is TextLinkEditMode)
            {
                if (((TextLinkEditMode)data.CurrentMode).TextLinkMode == TextLinkMode.EditIdentifier)
                {
                    return(null);
                }
            }
            if (Unit == null || CSharpUnresolvedFile == null)
            {
                return(null);
            }
            if (typeSystemSegmentTree == null)
            {
                return(null);
            }

            var list = new CSharpCompletionDataList();

            list.Resolver = CSharpUnresolvedFile != null?CSharpUnresolvedFile.GetResolver(UnresolvedFileCompilation, Document.Editor.Caret.Location) : new CSharpResolver(Compilation);

            var ctx = CSharpUnresolvedFile.GetTypeResolveContext(UnresolvedFileCompilation, data.Caret.Location) as CSharpTypeResolveContext;

            var engine = new CSharpCompletionEngine(
                data.Document,
                typeSystemSegmentTree,
                new CompletionDataFactory(this, new CSharpResolver(ctx)),
                Document.GetProjectContext(),
                ctx
                );

            if (Document.HasProject)
            {
                var configuration = Document.Project.GetConfiguration(MonoDevelop.Ide.IdeApp.Workspace.ActiveConfiguration) as DotNetProjectConfiguration;
                var par           = configuration != null ? configuration.CompilationParameters as CSharpCompilerParameters : null;
                if (par != null)
                {
                    engine.LanguageVersion = MonoDevelop.CSharp.Parser.TypeSystemParser.ConvertLanguageVersion(par.LangVersion);
                }
            }

            engine.FormattingPolicy = FormattingPolicy.CreateOptions();
            engine.EolMarker        = data.EolMarker;
            engine.IndentString     = data.Options.IndentationString;
            try {
                foreach (var cd in engine.GetCompletionData(completionContext.TriggerOffset, ctrlSpace))
                {
                    list.Add(cd);
                    if (cd is IListData)
                    {
                        ((IListData)cd).List = list;
                    }
                }
            } catch (Exception e) {
                LoggingService.LogError("Error while getting completion data.", e);
            }
            list.AutoCompleteEmptyMatch             = engine.AutoCompleteEmptyMatch;
            list.AutoCompleteEmptyMatchOnCurlyBrace = engine.AutoCompleteEmptyMatchOnCurlyBracket;
            list.AutoSelect = engine.AutoSelect;
            list.DefaultCompletionString = engine.DefaultCompletionString;
            list.CloseOnSquareBrackets   = engine.CloseOnSquareBrackets;
            if (ctrlSpace)
            {
                list.AutoCompleteUniqueMatch = true;
            }
            return(list.Count > 0 ? list : null);
        }
示例#52
0
 void OnCompletionWindowClosed()
 {
     currentCompletionContext = null;
 }
示例#53
0
        public Task <MonoDevelop.Ide.CodeCompletion.ParameterHintingResult> InternalHandleParameterCompletionCommand(CodeCompletionContext completionContext, Ide.Editor.Extension.SignatureHelpTriggerInfo triggerInfo, CancellationToken token = default(CancellationToken))
        {
            var  data  = Editor;
            bool force = triggerInfo.TriggerReason != Ide.Editor.Extension.SignatureHelpTriggerReason.InvokeSignatureHelpCommand;
            ImmutableArray <ISignatureHelpProvider> providers;

            if (!force)
            {
                if (triggerInfo.TriggerReason == Ide.Editor.Extension.SignatureHelpTriggerReason.TypeCharCommand)
                {
                    providers = signatureProviders.Value.WhereAsArray(provider => provider.IsTriggerCharacter(triggerInfo.TriggerCharacter.Value));
                }
                else if (triggerInfo.TriggerReason == Ide.Editor.Extension.SignatureHelpTriggerReason.RetriggerCommand)
                {
                    providers = signatureProviders.Value.WhereAsArray(provider => provider.IsRetriggerCharacter(triggerInfo.TriggerCharacter.Value));
                }
                else
                {
                    providers = signatureProviders.Value;
                }
                if (providers.Length == 0)
                {
                    return(emptyParameterHintingResultTask);
                }
            }
            else
            {
                providers = signatureProviders.Value;
            }

            if (Editor.EditMode != EditMode.Edit)
            {
                return(emptyParameterHintingResultTask);
            }
            var offset = Editor.CaretOffset;

            try {
                var analysisDocument = DocumentContext.AnalysisDocument;
                if (analysisDocument == null)
                {
                    return(emptyParameterHintingResultTask);
                }
                var result = new RoslynParameterHintingEngine().GetParameterDataProviderAsync(
                    providers,
                    analysisDocument,
                    offset,
                    triggerInfo.ToRoslyn(),
                    token
                    );
                return(result);
            } catch (Exception e) {
                LoggingService.LogError("Unexpected parameter completion exception." + Environment.NewLine +
                                        "FileName: " + DocumentContext.Name + Environment.NewLine +
                                        "Position: line=" + completionContext.TriggerLine + " col=" + completionContext.TriggerLineOffset + Environment.NewLine +
                                        "Line text: " + Editor.GetLineText(completionContext.TriggerLine),
                                        e);
                return(emptyParameterHintingResultTask);
            }
        }
示例#54
0
 public virtual ICompletionDataList HandleCodeCompletion(CodeCompletionContext completionContext,
                                                         char completionChar, ref int triggerWordLength)
 {
     return(HandleCodeCompletion(completionContext, completionChar));
 }
示例#55
0
        //		static bool ContainsPublicConstructors (ITypeDefinition t)
        //		{
        //			if (t.Methods.Count (m => m.IsConstructor) == 0)
        //				return true;
        //			return t.Methods.Any (m => m.IsConstructor && m.IsPublic);
        //		}


        //			CompletionDataList result = new ProjectDomCompletionDataList ();
        //			// "var o = new " needs special treatment.
        //			if (returnType == null && returnTypeUnresolved != null && returnTypeUnresolved.FullName == "var")
        //				returnType = returnTypeUnresolved = DomReturnType.Object;
        //
        //			//	ExpressionContext.TypeExpressionContext tce = context as ExpressionContext.TypeExpressionContext;
        //
        //			CompletionDataCollector col = new CompletionDataCollector (this, dom, result, Document.CompilationUnit, callingType, location);
        //			IType type = null;
        //			if (returnType != null)
        //				type = dom.GetType (returnType);
        //			if (type == null)
        //				type = dom.SearchType (Document.CompilationUnit, callingType, location, returnTypeUnresolved);
        //
        //			// special handling for nullable types: Bug 674516 - new completion for nullables should not include "Nullable"
        //			if (type is InstantiatedType && ((InstantiatedType)type).UninstantiatedType.FullName == "System.Nullable" && ((InstantiatedType)type).GenericParameters.Count == 1) {
        //				var genericParameter = ((InstantiatedType)type).GenericParameters [0];
        //				returnType = returnTypeUnresolved = Document.CompilationUnit.ShortenTypeName (genericParameter, location);
        //				type = dom.SearchType (Document.CompilationUnit, callingType, location, genericParameter);
        //			}
        //
        //			if (type == null || !(type.IsAbstract || type.ClassType == ClassType.Interface)) {
        //				if (type == null || type.ConstructorCount == 0 || type.Methods.Any (c => c.IsConstructor && c.IsAccessibleFrom (dom, callingType, type, callingType != null && dom.GetInheritanceTree (callingType).Any (x => x.FullName == type.FullName)))) {
        //					if (returnTypeUnresolved != null) {
        //						col.FullyQualify = true;
        //						CompletionData unresovedCompletionData = col.Add (returnTypeUnresolved);
        //						col.FullyQualify = false;
        //						// don't set default completion string for arrays, since it interferes with:
        //						// string[] arr = new string[] vs new { "a"}
        //						if (returnTypeUnresolved.ArrayDimensions == 0)
        //							result.DefaultCompletionString = StripGenerics (unresovedCompletionData.CompletionText);
        //					} else {
        //						CompletionData unresovedCompletionData = col.Add (returnType);
        //						if (returnType.ArrayDimensions == 0)
        //							result.DefaultCompletionString = StripGenerics (unresovedCompletionData.CompletionText);
        //					}
        //				}
        //			}
        //
        //			//				if (tce != null && tce.Type != null) {
        //			//					result.DefaultCompletionString = StripGenerics (col.AddCompletionData (result, tce.Type).CompletionString);
        //			//				}
        //			//			else {
        //			//			}
        //			if (type == null)
        //				return result;
        //			HashSet<string > usedNamespaces = new HashSet<string> (GetUsedNamespaces ());
        //			if (type.FullName == DomReturnType.Object.FullName)
        //				AddPrimitiveTypes (col);
        //
        //			foreach (IType curType in dom.GetSubclasses (type)) {
        //				if (context != null && context.FilterEntry (curType))
        //					continue;
        //				if ((curType.TypeModifier & TypeModifier.HasOnlyHiddenConstructors) == TypeModifier.HasOnlyHiddenConstructors)
        //					continue;
        //				if (usedNamespaces.Contains (curType.Namespace)) {
        //					if (curType.ConstructorCount > 0) {
        //						if (!(curType.Methods.Any (c => c.IsConstructor && c.IsAccessibleFrom (dom, curType, callingType, callingType != null && dom.GetInheritanceTree (callingType).Any (x => x.FullName == curType.FullName)))))
        //							continue;
        //					}
        //					col.Add (curType);
        //				} else {
        //					string nsName = curType.Namespace;
        //					int idx = nsName.IndexOf ('.');
        //					if (idx >= 0)
        //						nsName = nsName.Substring (0, idx);
        //					col.Add (new Namespace (nsName));
        //				}
        //			}
        //
        //			// add aliases
        //			if (returnType != null) {
        //				foreach (IUsing u in Document.CompilationUnit.Usings) {
        //					foreach (KeyValuePair<string, IReturnType> alias in u.Aliases) {
        //						if (alias.Value.ToInvariantString () == returnType.ToInvariantString ())
        //							result.Add (alias.Key, "md-class");
        //					}
        //				}
        //			}
        //
        //			return result;
        //		}

        //		IEnumerable<ICompletionData> GetDefineCompletionData ()
        //		{
        //			if (Document.Project == null)
        //				yield break;
        //
        //			var symbols = new Dictionary<string, string> ();
        //			var cp = new ProjectDomCompletionDataList ();
        //			foreach (DotNetProjectConfiguration conf in Document.Project.Configurations) {
        //				var cparams = conf.CompilationParameters as CSharpCompilerParameters;
        //				if (cparams != null) {
        //					string[] syms = cparams.DefineSymbols.Split (';');
        //					foreach (string s in syms) {
        //						string ss = s.Trim ();
        //						if (ss.Length > 0 && !symbols.ContainsKey (ss)) {
        //							symbols [ss] = ss;
        //							yield return factory.CreateLiteralCompletionData (ss);
        //						}
        //					}
        //				}
        //			}
        //		}

        public override Task <Ide.CodeCompletion.ParameterHintingResult> ParameterCompletionCommand(CodeCompletionContext completionContext)
        {
            if (completionContext == null)
            {
                throw new ArgumentNullException(nameof(completionContext));
            }
            char ch   = completionContext.TriggerOffset > 0 ? Editor.GetCharAt(completionContext.TriggerOffset - 1) : '\0';
            var  info = new Ide.Editor.Extension.SignatureHelpTriggerInfo(Ide.Editor.Extension.SignatureHelpTriggerReason.InvokeSignatureHelpCommand, ch);

            return(InternalHandleParameterCompletionCommand(completionContext, info, default(CancellationToken)));
        }
示例#56
0
 public virtual ICompletionDataList HandleCodeCompletion(CodeCompletionContext completionContext,
                                                         char completionChar)
 {
     return(null);
 }
 public override bool IsApplicable(CodeCompletionContext context)
 {
     return context.File is ICSharpFile;
 }
 public void SetCompletionText(CodeCompletionContext ctx, string partial_word, string complete_word)
 {
     SetCompletionText(ctx, partial_word, complete_word, complete_word.Length);
 }
示例#59
0
 string ICompletionWidget.GetCompletionText(CodeCompletionContext ctx)
 {
     return("");
 }
 public override bool IsApplicable(CodeCompletionContext context)
 {
     return(context.File is ICSharpFile);
 }