bool ShowListWindow(char firstChar, ICompletionDataProvider provider, ICompletionWidget completionWidget, ICodeCompletionContext completionContext, CompletionDelegate closedDelegate)
        {
            if (mutableProvider != null)
            {
                mutableProvider.CompletionDataChanging -= OnCompletionDataChanging;
                mutableProvider.CompletionDataChanged  -= OnCompletionDataChanged;
            }

            this.provider          = provider;
            this.completionContext = completionContext;
            this.closedDelegate    = closedDelegate;
            mutableProvider        = provider as IMutableCompletionDataProvider;

            if (mutableProvider != null)
            {
                mutableProvider.CompletionDataChanging += OnCompletionDataChanging;
                mutableProvider.CompletionDataChanged  += OnCompletionDataChanged;

                if (mutableProvider.IsChanging)
                {
                    OnCompletionDataChanging(null, null);
                }
            }

            this.completionWidget = completionWidget;
            this.firstChar        = firstChar;

            return(FillList());
        }
예제 #2
0
        public override ICompletionDataProvider HandleCodeCompletion(
            ICodeCompletionContext completionContext, char completionChar)
        {
            TextEditor editor = IdeApp.Workbench.ActiveDocument.TextEditor;

            int line, column;

            editor.GetLineColumnFromPosition(editor.CursorPosition, out line, out column);
            string currentLine = editor.GetLineText(line);

            string currentDocsExtension = Path.GetExtension(IdeApp.Workbench.ActiveDocument.FileName);
            string currentLanguage      = GetLanguageFromExtension(currentDocsExtension);

            if (tags.Count == 0 || !CurrentLanguagesTagsLoaded.Equals(currentLanguage))
            {
                LoadTags();
                CurrentLanguagesTagsLoaded = currentLanguage;
            }

            CTagsCompletionDataProvider provider = new CTagsCompletionDataProvider();

            // TODO: check specializations

            foreach (Tag tag in tags)
            {
                provider.AddCompletionData(new CTagsCompletionData(tag, "md-class"));
            }

            return(provider);
        }
		public override ICompletionDataProvider HandleCodeCompletion (
		    ICodeCompletionContext completionContext, char completionChar)
		{
			TextEditor editor = IdeApp.Workbench.ActiveDocument.TextEditor;
			
			int line, column;
			editor.GetLineColumnFromPosition (editor.CursorPosition, out line, out column);
			string currentLine = editor.GetLineText (line);
			
			string currentDocsExtension = Path.GetExtension (IdeApp.Workbench.ActiveDocument.FileName);
			string currentLanguage = GetLanguageFromExtension (currentDocsExtension);
			
			if (tags.Count == 0 || !CurrentLanguagesTagsLoaded.Equals (currentLanguage)) {
				LoadTags ();
				CurrentLanguagesTagsLoaded = currentLanguage;
			}
			
			CTagsCompletionDataProvider provider = new CTagsCompletionDataProvider ();
			
			// TODO: check specializations
			
			foreach (Tag tag in tags) {
				provider.AddCompletionData (new CTagsCompletionData (tag, "md-class"));
			}
			
			return provider;
		}
예제 #4
0
		public static void ShowWindow (char firstChar, ICompletionDataProvider provider, ICompletionWidget completionWidget, ICodeCompletionContext completionContext, CompletionDelegate closedDelegate)
		{
			try {
				if (!wnd.ShowListWindow (firstChar, provider,  completionWidget, completionContext, closedDelegate)) {
					provider.Dispose ();
					return;
				}
				
				// makes control-space in midle of words to work
				string text = wnd.completionWidget.GetCompletionText (completionContext);
				if (text.Length == 0) {
					text = provider.DefaultCompletionString;
					if (text != null && text.Length > 0)
						wnd.SelectEntry (text);
					return;
				}
				
				wnd.PartialWord = text; 
				//if there is only one matching result we take it by default
				if (wnd.IsUniqueMatch && !wnd.IsChanging)
				{	
					wnd.UpdateWord ();
					wnd.Hide ();
				}
				
			} catch (Exception ex) {
				Console.WriteLine (ex);
			}
		}
        public override ICompletionDataProvider HandleCodeCompletion(
            ICodeCompletionContext completionContext, char completionChar)
        {
            string lineText = Editor.GetLineText(completionContext.TriggerLine + 1);

            if (lineText.EndsWith("::"))
            {
                // remove the trailing '::'
                lineText = lineText.Substring(0, lineText.Length - 2);

                int nameStart = lineText.LastIndexOfAny(allowedCharsMinusColon);

                nameStart++;

                string itemName = lineText.Substring(nameStart).Trim();

                if (string.IsNullOrEmpty(itemName))
                {
                    return(null);
                }

                return(GetMembersOfItem(itemName));
            }

            return(null);
        }
        public override ICompletionDataProvider CodeCompletionCommand(
            ICodeCompletionContext completionContext)
        {
            int pos = completionContext.TriggerOffset;
            int line, column;

            Editor.GetLineColumnFromPosition(Editor.CursorPosition, out line, out column);
            string lineText = Editor.GetLineText(line);

            if (!lineText.Contains(".") &&
                !lineText.Contains("::") &&
                !lineText.Contains("->"))
            {
                return(GlobalComplete());
            }

            return(HandleCodeCompletion(completionContext, Editor.GetText(pos - 1, pos)[0]));
        }
예제 #7
0
        // Returns the index of the parameter where the cursor is currently positioned.
        // -1 means the cursor is outside the method parameter list
        // 0 means no parameter entered
        // > 0 is the index of the parameter (1-based)
        public int GetCurrentParameterIndex(ICodeCompletionContext ctx)
        {
            int cursor = editor.CursorPosition;
            int i      = ctx.TriggerOffset;

            if (editor.GetCharAt(i) == ')')
            {
                return(-1);
            }

            if (i > cursor)
            {
                return(-1);
            }
            else if (i == cursor)
            {
                return(0);
            }

            int parameterIndex = 1;

            while (i++ < cursor)
            {
                char ch = editor.GetCharAt(i);
                if (ch == ',')
                {
                    parameterIndex++;
                }
                else if (ch == ')')
                {
                    return(-1);
                }
            }

            return(parameterIndex);
        }
        public override IParameterDataProvider HandleParameterCompletion(
            ICodeCompletionContext completionContext, char completionChar)
        {
            if (completionChar != '(')
            {
                return(null);
            }

            CProject project = Document.Project as CProject;

            if (project == null)
            {
                return(null);
            }

            ProjectInformation info = ProjectInformationManager.Instance.Get(project);

            int line, column;

            Editor.GetLineColumnFromPosition(Editor.CursorPosition, out line, out column);
            int    position = Editor.GetPositionFromLineColumn(line, 1);
            string lineText = Editor.GetText(position, Editor.CursorPosition - 1).TrimEnd();

            int nameStart = lineText.LastIndexOfAny(allowedChars);

            nameStart++;

            string functionName = lineText.Substring(nameStart).Trim();

            if (string.IsNullOrEmpty(functionName))
            {
                return(null);
            }

            return(new ParameterDataProvider(Document, info, functionName));
        }
        public static void ShowWindow(char firstChar, ICompletionDataProvider provider, ICompletionWidget completionWidget, ICodeCompletionContext completionContext, CompletionDelegate closedDelegate)
        {
            try
            {
                if (!wnd.ShowListWindow(firstChar, provider, completionWidget, completionContext, closedDelegate))
                {
                    provider.Dispose();
                    return;
                }

                // makes control-space in midle of words to work
                string text = wnd.completionWidget.GetCompletionText(completionContext);
                if (text.Length == 0)
                {
                    text = provider.DefaultCompletionString;
                    if (text != null && text.Length > 0)
                    {
                        wnd.SelectEntry(text);
                    }
                    return;
                }

                wnd.PartialWord = text;
                //if there is only one matching result we take it by default
                if (wnd.IsUniqueMatch && !wnd.IsChanging)
                {
                    wnd.UpdateWord();
                    wnd.Hide();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }
예제 #10
0
		bool ShowListWindow (char firstChar, ICompletionDataProvider provider, ICompletionWidget completionWidget, ICodeCompletionContext completionContext, CompletionDelegate closedDelegate)
		{
			if (mutableProvider != null) {
				mutableProvider.CompletionDataChanging -= OnCompletionDataChanging;
				mutableProvider.CompletionDataChanged -= OnCompletionDataChanged;
			}
			
			this.provider = provider;
			this.completionContext = completionContext;
			this.closedDelegate = closedDelegate;
			mutableProvider = provider as IMutableCompletionDataProvider;
			
			if (mutableProvider != null) {
				mutableProvider.CompletionDataChanging += OnCompletionDataChanging;
				mutableProvider.CompletionDataChanged += OnCompletionDataChanged;
			
				if (mutableProvider.IsChanging)
					OnCompletionDataChanging (null, null);
			}
			
			this.completionWidget = completionWidget;
			this.firstChar = firstChar;

			return FillList ();
		}
		public override ICompletionDataProvider HandleCodeCompletion (
		    ICodeCompletionContext completionContext, char completionChar)
		{
			string lineText = Editor.GetLineText (completionContext.TriggerLine + 1);
			
			if (lineText.EndsWith ("::")) {
				// remove the trailing '::'
				lineText = lineText.Substring (0, lineText.Length - 2);
				
				int nameStart = lineText.LastIndexOfAny (allowedCharsMinusColon);

				nameStart++;
				
				string itemName = lineText.Substring (nameStart).Trim ();
				
				if (string.IsNullOrEmpty (itemName))
					return null;
				
				return GetMembersOfItem (itemName);
			}
			
			return null;
		}
		public override  IParameterDataProvider HandleParameterCompletion (
		    ICodeCompletionContext completionContext, char completionChar)
		{
			if (completionChar != '(')
				return null;
			
			CProject project = Document.Project as CProject;
			
			if (project == null)
				return null;
			
			ProjectInformation info = ProjectInformationManager.Instance.Get (project);
			
			int line, column;
			Editor.GetLineColumnFromPosition (Editor.CursorPosition, out line, out column);
			int position = Editor.GetPositionFromLineColumn (line, 1);
			string lineText = Editor.GetText (position, Editor.CursorPosition - 1).TrimEnd ();
			
			int nameStart = lineText.LastIndexOfAny (allowedChars);

			nameStart++;
			
			string functionName = lineText.Substring (nameStart).Trim ();
			
			if (string.IsNullOrEmpty (functionName))
				return null;
			
			return new ParameterDataProvider (Document, info, functionName);
		}
		public override ICompletionDataProvider CodeCompletionCommand (
		    ICodeCompletionContext completionContext)
		{
			int pos = completionContext.TriggerOffset;
			int line, column;
			Editor.GetLineColumnFromPosition (Editor.CursorPosition, out line, out column);
			string lineText = Editor.GetLineText (line);
			
			if (!lineText.Contains (".") &&
			    !lineText.Contains ("::") &&
			    !lineText.Contains ("->"))
			    return GlobalComplete ();
			
			return HandleCodeCompletion (completionContext, Editor.GetText (pos - 1, pos)[0]);
		}