private ImageSource GetCompletionIcon(TokenType elType) { switch (elType) { case TokenType.Struct: return(m_glyphservice.GetGlyph(StandardGlyphGroup.GlyphGroupStruct, StandardGlyphItem.GlyphItemPublic)); case TokenType.Module: return(m_glyphservice.GetGlyph(StandardGlyphGroup.GlyphAssembly, StandardGlyphItem.GlyphItemPublic)); case TokenType.Function: return(m_glyphservice.GetGlyph(StandardGlyphGroup.GlyphExtensionMethod, StandardGlyphItem.GlyphItemPublic)); case TokenType.Crate: return(m_glyphservice.GetGlyph(StandardGlyphGroup.GlyphAssembly, StandardGlyphItem.GlyphItemPublic)); case TokenType.Let: return(m_glyphservice.GetGlyph(StandardGlyphGroup.GlyphGroupConstant, StandardGlyphItem.GlyphItemPublic)); case TokenType.StructField: return(m_glyphservice.GetGlyph(StandardGlyphGroup.GlyphGroupField, StandardGlyphItem.GlyphItemPublic)); case TokenType.Impl: return(m_glyphservice.GetGlyph(StandardGlyphGroup.GlyphGroupTypedef, StandardGlyphItem.GlyphItemPublic)); case TokenType.Enum: return(m_glyphservice.GetGlyph(StandardGlyphGroup.GlyphGroupEnum, StandardGlyphItem.GlyphItemPublic)); case TokenType.EnumVariant: return(m_glyphservice.GetGlyph(StandardGlyphGroup.GlyphGroupEnumMember, StandardGlyphItem.GlyphItemPublic)); case TokenType.Type: return(m_glyphservice.GetGlyph(StandardGlyphGroup.GlyphGroupTypedef, StandardGlyphItem.GlyphItemPublic)); case TokenType.Trait: return(m_glyphservice.GetGlyph(StandardGlyphGroup.GlyphGroupInterface, StandardGlyphItem.GlyphItemPublic)); case TokenType.Static: return(null); case TokenType.FnArg: return(null); default: NSUtil.DebugPrint("Completion type not found: {0}", elType); return(null); } }
//public void conwriteold(string str) { // conout.Clear(); // sugs.Clear(); // queryfinished=false; // proc.StandardInput.WriteLine(str); // int waitcount=0; // while (!queryfinished) { // if (proc == null || proc.HasExited) break; // Thread.Sleep(50); // waitcount++; // if (waitcount > 100) // 5 second wait cap // break; // } // queryfinished = true; // if (proc == null || proc.HasExited) { // proc=null; // filepath_prev=""; // return; // } // foreach (string qstr in conout) { // string[] qwords = qstr.Split(new char[] { '\t' }); // if (qwords.Length < 2) break; // if (qwords[1] == "skProc" || qwords[1] == "skVar") { // //new List<string>(new string[]{"G","H","I"}) // qwords[2] = qwords[2].Replace("htmlarc.",""); // qwords[7] = qwords[7].Replace(@"\x0D\x0A", "\n"); // qwords[7] = qwords[7].Trim(new char[]{'"'}); // if (qwords[7] != "") // qwords[7] = "\n\n" + qwords[7]; // sugs.Add(new List<string>(new string[] { qwords[2], qwords[3] + qwords[7] })); // } // } // sugs.Add(new List<string>(new string[] { "func1", "func1 help" })); // NSUtil.DebugPrint("NimStudio - suggs count:" + sugs.Count.ToString()); //} public void Close() { NSUtil.DebugPrint("NimStudio - Nimsuggest close:"); if (proc == null) { return; } try { if (proc.HasExited) { proc.Dispose(); proc = null; } } catch (Exception ex) { NSUtil.DebugPrint("NimStudio - Nimsuggest close:" + ex.Message); proc = null; return; } try { proc.StandardInput.WriteLine("quit"); } catch (Exception ex) { NSUtil.DebugPrint("NimStudio - Nimsuggest close:" + ex.Message); proc = null; } int waitcount = 0; while (true) { if (proc == null || proc.HasExited) { break; } Thread.Sleep(25); waitcount++; if (waitcount > 200) // 5 second wait cap { proc.Kill(); Thread.Sleep(25); } break; } proc = null; return; }
public void Init() { NSUtil.DebugPrint("NimStudio - Nimsuggest init:"); string nimsuggestexe = NSIni.Get("Main", "nimsuggest.exe"); if (nimsuggestexe == "") { NSUtil.DebugPrint("Nimsuggest.exe not set in nimstudio.ini!"); return; } if (!File.Exists(nimsuggestexe)) { NSUtil.DebugPrint("Nimsuggest.exe not found!"); return; } proc = new Process(); proc.StartInfo.CreateNoWindow = true; //proc.StartInfo.WorkingDirectory = @"c:\MyProgs\Nim"; //proc.StartInfo.Arguments = @"--stdin c:\MyProgs\Nim\htmlarc.nim"; //proc.StartInfo.Arguments = @"--stdin " + VSNimLangServ.codefile_path_current; proc.StartInfo.Arguments = @"--stdin " + Path.GetDirectoryName(NSLangServ.codefile_path_current) + @"\nimstudio_base.nim"; //proc.StartInfo.Arguments = @"--stdin " + Path.GetDirectoryName(VSNimLangServ.codefile_path_current) + "\\"; proc.StartInfo.FileName = NSIni.Get("Main", "nimsuggest.exe"); proc.StartInfo.WorkingDirectory = Path.GetDirectoryName(NSLangServ.codefile_path_current); proc.StartInfo.RedirectStandardOutput = true; proc.StartInfo.RedirectStandardError = false; proc.StartInfo.RedirectStandardInput = true; proc.StartInfo.UseShellExecute = false; NSUtil.DebugPrint("NimStudio - Nimsuggest load:" + NSLangServ.codefile_path_current); NSUtil.DebugPrint("NimStudio - Nimsuggest working dir:" + proc.StartInfo.WorkingDirectory); proc.EnableRaisingEvents = true; proc.OutputDataReceived += new DataReceivedEventHandler(NSDRHandler); //proc.ErrorDataReceived += new DataReceivedEventHandler(NSDRHandler); proc.Exited += new EventHandler(NSExitHandler); proc.Start(); Thread.Sleep(100); proc.StandardInput.WriteLine(""); proc.BeginOutputReadLine(); Thread.Sleep(300); // allow time for nimsuggest startup lines to be processed }
/// <summary>Queries nimsuggest</summary><param name='qtype'>use qtype class constants</param><param name='qline'>code line number</param><param name='qcol'>code column number</param> public void Query(string qtype, object qline, object qcol) { Microsoft.VisualStudio.TextManager.Interop.IVsTextLines lines; NSLangServ.textview_current.GetBuffer(out lines); int numlines, column; lines.GetLineCount(out numlines); lines.GetLengthOfLine(numlines - 1, out column); String strbuff; NSLangServ.textview_current.GetTextStream(0, 0, numlines - 1, column, out strbuff); File.WriteAllText(NSLangServ.filelist[NSLangServ.codefile_path_current], strbuff, new UTF8Encoding(false)); //string fstr = Path.GetFileNameWithoutExtension(NSLangServ.codefile_path_current); if (NSPackage.quickinfo || NSPackage.memberlist) { NSPackage.quickinfo = false; NSPackage.memberlist = false; //NSUtil.SaveIfDirty(NSLangServ.codefile_path_current); } //if (fstr != filepath_prev) { // Close(); // Init(); //} //if (!NSLangServ.filelist.ContainsKey(NSLangServ.codefile_path_current)) { // // create or update nimstudio_base.nim, which contains: import openfile1, openfile2, .. // // nimstudio_base.nim is the initial file passed to nimsuggest // filelist.Add(fstr); // string basefile = "import " + string.Join(",", filelist); // StreamWriter sw1 = new StreamWriter(Path.GetDirectoryName(NSLangServ.codefile_path_current) + @"\nimstudio_base.nim"); // sw1.WriteLine(basefile); // sw1.Close(); //} //if (!filelist.Contains(fstr)) { // // create or update nimstudio_base.nim, which contains: import openfile1, openfile2, .. // // nimstudio_base.nim is the initial file passed to nimsuggest // filelist.Add(fstr); // string basefile = "import " + string.Join(",", filelist); // StreamWriter sw1 = new StreamWriter(Path.GetDirectoryName(NSLangServ.codefile_path_current) + @"\nimstudio_base.nim"); // sw1.WriteLine(basefile); // sw1.Close(); //} if (proc == null) { Init(); } if (proc == null) { return; } conout.Clear(); sugdct.Clear(); queryfinished = false; //string qstr = qtype + " " + fstr + ".nim:" + qline.ToString() + ":" + qcol.ToString(); string qstr = String.Format(@"{0} ""{1}"";""{2}"":{3}:{4}", qtype, // 0 NSLangServ.codefile_path_current, // 1 NSLangServ.filelist[NSLangServ.codefile_path_current], // 2 qline, // 3 qcol // 4 ); // + NSLangServ.codefile_path_current + ".nim\";" + // NSLangServ.filelist[NSLangServ.codefile_path_current] //":" + qline.ToString() + ":" + qcol.ToString(); //string qstr = qtype + " \"" + NSLangServ.codefile_path_current + ".nim\";" + // NSLangServ.filelist[NSLangServ.codefile_path_current] // ":" + qline.ToString() + ":" + qcol.ToString(); NSUtil.DebugPrintAlways("NimStudio - query:" + qstr); proc.StandardInput.WriteLine(qstr); int waitcount = 0; while (!queryfinished) { Thread.Sleep(25); waitcount++; if (waitcount > 200) { // 5 second wait cap //VSNimUtil.DebugPrint("NimStudio - querywait max hit"); con.Write("NimStudio - querywait max hit"); queryfinished = true; break; } } string fnamestrip = Path.GetFileNameWithoutExtension(NSLangServ.codefile_path_current) + "."; NSUtil.DebugPrint("NimStudio - conout.count:" + conout.Count.ToString()); foreach (string cstr in conout) { if (cstr == null) { continue; } NSUtil.DebugPrint("NimStudio - conout:" + cstr); string[] sugsplit = cstr.Split(new char[] { '\t' }); if (sugsplit.Length < 2) { continue; } if (sugsplit[Sugspl.kind] == "skProc" || sugsplit[Sugspl.kind] == "skVar") { if (qtype == Qtype.def) { if (sugsplit[Sugspl.kind] == "skVar") { sugsplit[Sugspl.type] = "(" + sugsplit[Sugspl.type] + ")"; } sugsplit[Sugspl.type] = Regex.Replace(sugsplit[Sugspl.type], @"{.*?}", ""); sugsplit[Sugspl.name] = sugsplit[Sugspl.name].Replace(fnamestrip, ""); sugsplit[Sugspl.help] = sugsplit[Sugspl.help].Replace(@"\x0D\x0A", "\n"); sugsplit[Sugspl.help] = sugsplit[Sugspl.help].Trim(new char[] { '"' }); if (sugsplit[Sugspl.help] != "") { sugsplit[Sugspl.help] = "\n\n" + sugsplit[Sugspl.help]; } sugdct.Add(sugsplit[Sugspl.name], new SortedDictionary <string, string>() { { "kind", sugsplit[Sugspl.kind] }, { "type", sugsplit[Sugspl.type] }, { "help", sugsplit[Sugspl.help] } }); } else if (qtype == Qtype.con) { sugsplit[Sugspl.name] = sugsplit[Sugspl.name].Replace(fnamestrip, ""); sugsplit[Sugspl.type] = Regex.Replace(sugsplit[Sugspl.type], @"{.*?}", ""); sugsplit[Sugspl.help] = sugsplit[Sugspl.help].Replace(@"\x0D\x0A ", "\n"); sugsplit[Sugspl.help] = sugsplit[Sugspl.help].Replace(@"\x0D\x0A", "\n"); sugsplit[Sugspl.help] = sugsplit[Sugspl.help].Trim(new char[] { '"' }); if (sugdct.ContainsKey(sugsplit[Sugspl.type])) { Debug.Print("Error"); } else { sugdct.Add(sugsplit[Sugspl.type], new SortedDictionary <string, string>() { { "kind", sugsplit[Sugspl.kind] }, { "name", sugsplit[Sugspl.name] }, { "help", sugsplit[Sugspl.help] } }); } } else { sugsplit[Sugspl.name] = sugsplit[Sugspl.name].Replace(fnamestrip, ""); sugsplit[Sugspl.type] = Regex.Replace(sugsplit[Sugspl.type], @"{.*?}", ""); sugsplit[Sugspl.help] = sugsplit[Sugspl.help].Replace(@"\x0D\x0A", "\n"); sugsplit[Sugspl.help] = sugsplit[Sugspl.help].Trim(new char[] { '"' }); if (sugsplit[Sugspl.help] != "") { sugsplit[Sugspl.help] = "\n\n" + sugsplit[Sugspl.help]; } if (sugdct.ContainsKey(sugsplit[Sugspl.name])) { if (sugsplit[Sugspl.kind] != "skVar" && sugdct[sugsplit[Sugspl.name]]["type"] != sugsplit[Sugspl.type]) { // add overload sugdct[sugsplit[Sugspl.name]]["type"] += "\n" + sugsplit[Sugspl.type]; } } else { sugdct.Add(sugsplit[Sugspl.name], new SortedDictionary <string, string>() { { "kind", sugsplit[Sugspl.kind] }, { "type", sugsplit[Sugspl.type] }, { "help", sugsplit[Sugspl.help] } }); } } } } NSUtil.DebugPrint("NimStudio - suggs count:" + sugdct.Count.ToString()); }
private void NSExitHandler(object sender, EventArgs e) { NSUtil.DebugPrint("NimStudio NSExitHandler "); //proc.Dispose(); proc = null; }