async Task <string> Test(string input, string type, string member, Gdk.Key key = Gdk.Key.Return, bool isDelegateExpected = false) { var s = await Setup(input); var ext = s.Item1; TestViewContent content = s.Item2; var listWindow = new CompletionListWindow(); var widget = new TestCompletionWidget(ext.Editor, ext.DocumentContext); listWindow.CompletionWidget = widget; listWindow.CodeCompletionContext = widget.CurrentCodeCompletionContext; var model = await ext.DocumentContext.AnalysisDocument.GetSemanticModelAsync(); DefaultSourceEditorOptions.Instance.AutoInsertMatchingBracket = true; var t = model.Compilation.GetTypeByMetadataName(type); var method = member != null?model.LookupSymbols(s.Item1.Editor.CaretOffset).OfType <IMethodSymbol> ().First(m => m.Name == member) : t.GetMembers().OfType <IMethodSymbol> ().First(m => m.MethodKind == MethodKind.Constructor); var factory = new RoslynCodeCompletionFactory(ext, model); var data = new RoslynSymbolCompletionData(null, factory, method); data.IsDelegateExpected = isDelegateExpected; KeyActions ka = KeyActions.Process; data.InsertCompletionText(listWindow, ref ka, KeyDescriptor.FromGtk(key, (char)key, Gdk.ModifierType.None)); return(widget.CompletedWord); }
async Task <string> Test(string input, string type, string member, Gdk.Key key = Gdk.Key.Return) { var s = await Setup(input); var ext = s.Item1; TestViewContent content = s.Item2; var listWindow = new CompletionListWindow(); var widget = new TestCompletionWidget(ext.Editor, ext.DocumentContext); listWindow.CompletionWidget = widget; listWindow.CodeCompletionContext = widget.CurrentCodeCompletionContext; var sm = ext.DocumentContext.ParsedDocument.GetAst <SemanticModel> (); var t = sm.Compilation.GetTypeByMetadataName(type); var foundMember = t.GetMembers().First(m => m.Name == member); var factory = new RoslynCodeCompletionFactory(ext, sm); var data = new RoslynSymbolCompletionData(null, factory, foundMember); data.DisplayFlags |= DisplayFlags.NamedArgument; KeyActions ka = KeyActions.Process; data.InsertCompletionText(listWindow, ref ka, KeyDescriptor.FromGtk(key, (char)key, Gdk.ModifierType.None)); return(widget.CompletedWord); }
async Task <string> Test(string input, string type, string member, Gdk.Key key = Gdk.Key.Return, bool isDelegateExpected = false) { var s = await Setup(input); var ext = s.Item1; TestViewContent content = s.Item2; var listWindow = new CompletionListWindow(); var widget = new TestCompletionWidget(ext.Editor, ext.DocumentContext); listWindow.CompletionWidget = widget; listWindow.CodeCompletionContext = widget.CurrentCodeCompletionContext; var model = ext.DocumentContext.ParsedDocument.GetAst <SemanticModel> (); Ide.IdeApp.Preferences.AddParenthesesAfterCompletion.Set(true); Ide.IdeApp.Preferences.AddOpeningOnly.Set(false); var t = model.Compilation.GetTypeByMetadataName(type); var method = member != null?t.GetMembers().First(m => m.Name == member) : t.GetMembers().OfType <IMethodSymbol> ().First(m => m.MethodKind == MethodKind.Constructor); var factory = new RoslynCodeCompletionFactory(ext, model); var data = new RoslynSymbolCompletionData(null, factory, method); data.IsDelegateExpected = isDelegateExpected; KeyActions ka = KeyActions.Process; data.InsertCompletionText(listWindow, ref ka, KeyDescriptor.FromGtk(key, (char)key, Gdk.ModifierType.None)); return(widget.CompletedWord); }
public async Task TestBug60365() { var text = "@c$"; int endPos = text.IndexOf('$'); if (endPos >= 0) { text = text.Substring(0, endPos) + text.Substring(endPos + 1); } using (var testCase = await SetupTestCase(text, Math.Max(0, endPos))) { var doc = testCase.Document; var ext = doc.GetContent <CSharpCompletionTextEditorExtension> (); var listWindow = new CompletionListWindow(); var widget = new TestCompletionWidget(ext.Editor, ext.DocumentContext); listWindow.CompletionWidget = widget; listWindow.CodeCompletionContext = widget.CurrentCodeCompletionContext; Assert.AreEqual("@class", ext.Editor.Text); var list = await ext.HandleCodeCompletionAsync(widget.CurrentCodeCompletionContext, new CompletionTriggerInfo (CompletionTriggerReason.CharTyped, 'c')); var ka = KeyActions.Complete; list.First(d => d.CompletionText == "class").InsertCompletionText(listWindow, ref ka, KeyDescriptor.Tab); await doc.DocumentContext.UpdateParseDocument(); } }
public async Task TestBug60365() { var tww = new TestWorkbenchWindow(); TestViewContent content = new TestViewContent(); tww.ViewContent = content; content.ContentName = "/a.cs"; content.Data.MimeType = "text/x-csharp"; var doc = new MonoDevelop.Ide.Gui.Document(tww); var text = "@c$"; int endPos = text.IndexOf('$'); if (endPos >= 0) { text = text.Substring(0, endPos) + text.Substring(endPos + 1); } content.Text = text; content.CursorPosition = System.Math.Max(0, endPos); var project = MonoDevelop.Projects.Services.ProjectService.CreateProject("C#"); project.Name = "test"; project.FileName = "test.csproj"; project.Files.Add(new ProjectFile(content.ContentName, BuildAction.Compile)); var solution = new MonoDevelop.Projects.Solution(); solution.AddConfiguration("", true); solution.DefaultSolutionFolder.AddItem(project); using (var monitor = new ProgressMonitor()) await TypeSystemService.Load(solution, monitor); content.Project = project; doc.SetProject(project); var ext = new CSharpCompletionTextEditorExtension(); ext.Initialize(doc.Editor, doc); var listWindow = new CompletionListWindow(); var widget = new TestCompletionWidget(ext.Editor, ext.DocumentContext); listWindow.CompletionWidget = widget; listWindow.CodeCompletionContext = widget.CurrentCodeCompletionContext; var list = await ext.HandleCodeCompletionAsync(widget.CurrentCodeCompletionContext, new CompletionTriggerInfo (CompletionTriggerReason.CharTyped, 'c')); var ka = KeyActions.Complete; list.First(d => d.CompletionText == "class").InsertCompletionText(listWindow, ref ka, KeyDescriptor.Tab); Assert.AreEqual("@class", content.Text); content.Contents.Add(ext); await doc.UpdateParseDocument(); TypeSystemService.Unload(solution); }
static void ContinueSimulation(CompletionListWindow listWindow, ICompletionDataList list, ref TestCompletionWidget testCompletionWidget, string simulatedInput) { listWindow.ResetState(); listWindow.CodeCompletionContext = new CodeCompletionContext(); listWindow.CompletionDataList = list; listWindow.CompletionWidget = testCompletionWidget = new TestCompletionWidget(); listWindow.FilterWords(); listWindow.ResetSizes(); listWindow.UpdateWordSelection(); SimulateInput(listWindow, simulatedInput); listWindow.CompleteWord(); }
static async Task <TestCompletionWidget> ContinueSimulation(CompletionListWindow listWindow, ICompletionDataList list, string simulatedInput) { TestCompletionWidget testCompletionWidget; listWindow.ResetState(); listWindow.CodeCompletionContext = new CodeCompletionContext(); listWindow.CompletionDataList = list; listWindow.CompletionWidget = testCompletionWidget = new TestCompletionWidget(); listWindow.List.FilterWords(); listWindow.ResetSizes(); listWindow.UpdateWordSelection(); await SimulateInput(listWindow, simulatedInput); await listWindow.CompleteWord(); return(testCompletionWidget); }
string Test(string input, string type, string member, Gdk.Key key = Gdk.Key.Return) { TestViewContent content; var ext = Setup(input, out content); ListWindow.ClearHistory(); var listWindow = new CompletionListWindow(); var widget = new TestCompletionWidget(ext.Document); listWindow.CompletionWidget = widget; listWindow.CodeCompletionContext = widget.CurrentCodeCompletionContext; var t = ext.Document.Compilation.FindType(new FullTypeName(type)); var foundMember = t.GetMembers(m => m.Name == member).First(); var data = new MemberCompletionData(ext, foundMember, OutputFlags.ClassBrowserEntries); data.DisplayFlags |= ICSharpCode.NRefactory.Completion.DisplayFlags.NamedArgument; KeyActions ka = KeyActions.Process; data.InsertCompletionText(listWindow, ref ka, key, (char)key, Gdk.ModifierType.None, true, false); return(widget.CompletedWord); }
async Task <string> Test(string input, string type, string member, Gdk.Key key = Gdk.Key.Return) { string result = null; await Setup(input, async testCase => { var ext = testCase.Content.GetContent <CSharpCompletionTextEditorExtension> (); var listWindow = new CompletionListWindow(); var widget = new TestCompletionWidget(ext.Editor, ext.DocumentContext); listWindow.CompletionWidget = widget; listWindow.CodeCompletionContext = widget.CurrentCodeCompletionContext; var sm = await ext.DocumentContext.AnalysisDocument.GetSemanticModelAsync(); var t = sm.Compilation.GetTypeByMetadataName(type); var foundMember = t.GetMembers().First(m => m.Name == member); var data = new CompletionData(foundMember.Name); data.DisplayFlags |= DisplayFlags.NamedArgument; KeyActions ka = KeyActions.Process; data.InsertCompletionText(listWindow, ref ka, KeyDescriptor.FromGtk(key, (char)key, Gdk.ModifierType.None)); result = widget.CompletedWord; }); return(result); }
string Test(string input, string type, string member, Gdk.Key key = Gdk.Key.Return, bool isDelegateExpected = false) { TestViewContent content; var ext = Setup(input, out content); ListWindow.ClearHistory(); var listWindow = new CompletionListWindow(); var widget = new TestCompletionWidget(ext.Document); listWindow.CompletionWidget = widget; listWindow.CodeCompletionContext = widget.CurrentCodeCompletionContext; var t = ext.Document.Compilation.FindType(new FullTypeName(type)); var method = member != null?t.GetMembers(m => m.Name == member).First() : t.GetConstructors().First(); var data = new MemberCompletionData(ext, method, OutputFlags.ClassBrowserEntries); data.IsDelegateExpected = isDelegateExpected; KeyActions ka = KeyActions.Process; data.InsertCompletionText(listWindow, ref ka, key, (char)key, Gdk.ModifierType.None, true, false); return(widget.CompletedWord); }
async Task<string> Test(string input, string type, string member, Gdk.Key key = Gdk.Key.Return, bool isDelegateExpected = false) { var s = await Setup (input); var ext = s.Item1; TestViewContent content = s.Item2; var listWindow = new CompletionListWindow (); var widget = new TestCompletionWidget (ext.Editor, ext.DocumentContext); listWindow.CompletionWidget = widget; listWindow.CodeCompletionContext = widget.CurrentCodeCompletionContext; var model = ext.DocumentContext.ParsedDocument.GetAst<SemanticModel> (); Ide.IdeApp.Preferences.AddParenthesesAfterCompletion.Set (true); Ide.IdeApp.Preferences.AddOpeningOnly.Set (false); var t = model.Compilation.GetTypeByMetadataName (type); var method = member != null ? t.GetMembers().First (m => m.Name == member) : t.GetMembers ().OfType<IMethodSymbol> ().First (m => m.MethodKind == MethodKind.Constructor); var factory = new RoslynCodeCompletionFactory (ext, model); var data = new RoslynSymbolCompletionData (null, factory, method); data.IsDelegateExpected = isDelegateExpected; KeyActions ka = KeyActions.Process; data.InsertCompletionText (listWindow, ref ka, KeyDescriptor.FromGtk (key, (char)key, Gdk.ModifierType.None)); return widget.CompletedWord; }
static void ContinueSimulation (CompletionListWindow listWindow, ICompletionDataList list, ref TestCompletionWidget testCompletionWidget, string simulatedInput) { listWindow.ResetState (); listWindow.CodeCompletionContext = new CodeCompletionContext (); listWindow.CompletionDataList = list; listWindow.CompletionWidget = testCompletionWidget = new TestCompletionWidget (); listWindow.List.FilterWords (); listWindow.ResetSizes (); listWindow.UpdateWordSelection (); SimulateInput (listWindow, simulatedInput); listWindow.CompleteWord (); }
async Task<string> Test(string input, string type, string member, Gdk.Key key = Gdk.Key.Return) { var s = await Setup (input); var ext = s.Item1; TestViewContent content = s.Item2; var listWindow = new CompletionListWindow (); var widget = new TestCompletionWidget (ext.Editor, ext.DocumentContext); listWindow.CompletionWidget = widget; listWindow.CodeCompletionContext = widget.CurrentCodeCompletionContext; var sm = ext.DocumentContext.ParsedDocument.GetAst<SemanticModel> (); var t = sm.Compilation.GetTypeByMetadataName (type); var foundMember = t.GetMembers().First (m => m.Name == member); var factory = new RoslynCodeCompletionFactory (ext, sm); var data = new RoslynSymbolCompletionData (null, factory, foundMember); data.DisplayFlags |= DisplayFlags.NamedArgument; KeyActions ka = KeyActions.Process; data.InsertCompletionText (listWindow, ref ka, KeyDescriptor.FromGtk (key, (char)key, Gdk.ModifierType.None)); return widget.CompletedWord; }
string Test(string input, string type, string member, Gdk.Key key = Gdk.Key.Return) { TestViewContent content; var ext = Setup (input, out content); ListWindow.ClearHistory (); var listWindow = new CompletionListWindow (); var widget = new TestCompletionWidget (ext.Document); listWindow.CompletionWidget = widget; listWindow.CodeCompletionContext = widget.CurrentCodeCompletionContext; var t = ext.Document.Compilation.FindType (new FullTypeName (type)); var foundMember = t.GetMembers (m => m.Name == member).First (); var data = new MemberCompletionData (ext, foundMember, OutputFlags.ClassBrowserEntries); data.DisplayFlags |= ICSharpCode.NRefactory.Completion.DisplayFlags.NamedArgument; KeyActions ka = KeyActions.Process; data.InsertCompletionText (listWindow, ref ka, key, (char)key, Gdk.ModifierType.None, true, false); return widget.CompletedWord; }
string Test(string input, string type, string member, Gdk.Key key = Gdk.Key.Return, bool isDelegateExpected = false) { TestViewContent content; var ext = Setup (input, out content); ListWindow.ClearHistory (); var listWindow = new CompletionListWindow (); var widget = new TestCompletionWidget (ext.Document); listWindow.CompletionWidget = widget; listWindow.CodeCompletionContext = widget.CurrentCodeCompletionContext; var t = ext.Document.Compilation.FindType (new FullTypeName (type)); var method = member != null ? t.GetMembers (m => m.Name == member).First () : t.GetConstructors ().First (); var data = new MemberCompletionData (ext, method, OutputFlags.ClassBrowserEntries); data.IsDelegateExpected = isDelegateExpected; KeyActions ka = KeyActions.Process; data.InsertCompletionText (listWindow, ref ka, key, (char)key, Gdk.ModifierType.None, true, false); return widget.CompletedWord; }