Beispiel #1
0
        internal static string GetSignatureHelp(string scriptFile, int caret)
        {
            Output.WriteLine("GetSignatureHelp");

            var script = new SourceInfo(scriptFile);

            string result = null;

            if (script.Content.IsEmpty())
            {
                throw new Exception("The file containing code is empty");
            }

            if (!script.RawFile.EndsWith(".g.cs"))
            {
                CSScriptHelper.DecorateIfRequired(ref script.Content, ref caret);
            }

            Project project = CSScriptHelper.GenerateProjectFor(script);
            var     sources = project.Files
                              .Where(f => f != project.Script)
                              .Select(f => new Tuple <string, string>(File.ReadAllText(f), f))
                              .ToArray();

            string bestMatchIndex;
            var    items = Autocompleter.GetMethodSignatures(script.Content, caret, out bestMatchIndex, project.Refs, sources);

            result = $"{bestMatchIndex}\r\n" + items.Select(x => x.EscapeLB())
                     .JoinSerializedLines();

            return(result);
        }
Beispiel #2
0
        private async Task StartReadingDataFromClient(TcpClient acceptedClient)
        {
            try
            {
                IPEndPoint ipEndPoint = (IPEndPoint)acceptedClient.Client.RemoteEndPoint;
                while (true)
                {
                    MemoryStream bufferStream = new MemoryStream();

                    byte[] buffer     = new byte[1024];
                    int    packetSize = await acceptedClient.GetStream().ReadAsync(buffer, 0, buffer.Length);

                    if (packetSize == 0)
                    {
                        break;
                    }

                    Autocompleter completer = new Autocompleter();

                    // TODO : check correct command here
                    string            word        = Encoding.ASCII.GetString(buffer, 0, packetSize).Split(' ')[1];
                    List <Completion> completions = completer.GetCompletions(word);
                    string            json        = JsonSerializer.Serialize(from item in completions select item.Word);
                    acceptedClient.GetStream().Write(Encoding.Default.GetBytes(json));
                }
            }
            catch (Exception) { }
            finally
            {
                acceptedClient.Close();
                Clients.Remove(acceptedClient);
            }
        }
Beispiel #3
0
        public static CodeMapItem[] GetMapOf(string code, bool stripInjectedClass = false)
        {
            bool injected = DecorateIfRequired(ref code);

            CodeMapItem[] map = Autocompleter.GetMapOf(code, injected);

            if (injected && map.Any())
            {
                var lines = code.Split("\n".ToCharArray(), map.Last().Line + 5) // +5 to ensure the current line is in
                            .Select(x => x.Trim())
                            .ToArray();

                var injectionMarker = "///CS-Script auto-class generation";
                var debugSymbol     = "#line ";

                map = map.Where(i => !lines[i.Line - 1].EndsWith(injectionMarker)).ToArray();

                foreach (CodeMapItem item in map)
                {
                    var injectedLinesAbove = lines.Take(item.Line - 1)
                                             .Count(x => x.EndsWith(injectionMarker) ||
                                                    x.StartsWith(debugSymbol));
                    item.Line -= injectedLinesAbove;
                }
            }

            return(map);
        }
Beispiel #4
0
 public void Autocomplete()
 {
     if (LifeCycle.Stage == Stage.Active)
     {
         Autocompleter.Complete(Data);
     }
 }
Beispiel #5
0
        internal static string FindUsings(string scriptFile, string word, bool rich_serialization)
        {
            Output.WriteLine("FindUsings");

            var script = new SourceInfo(scriptFile);

            if (script.Content.IsEmpty())
            {
                throw new Exception("The file containing code is empty");
            }

            Project project = CSScriptHelper.GenerateProjectFor(script);
            var     sources = project.Files
                              .Where(f => f != project.Script)
                              .Select(f => new Tuple <string, string>(File.ReadAllText(f), f));

            var regions = Autocompleter.GetNamespacesFor(script.Content, word, project.Refs, sources);

            fullyLoaded = true;

            if (rich_serialization)
            {
                return(regions.Select(Intellisense.Common.TypeInfo.Serialize).JoinSerializedLines());
            }
            else
            {
                return(regions.Select(x => x.Namespace).JoinBy("\n"));
            }
        }
Beispiel #6
0
        internal static DomRegion ResolveRaw(string scriptFile, int offset)
        {
            var script = new SourceInfo(scriptFile);

            if (script.Content.IsEmpty())
            {
                throw new Exception("The file containing code is empty");
            }

            DomRegion region = DomRegion.Empty;

            ParseAsCssDirective(script.Content, offset,
                                directive =>
            {
                region = CssSyntax.Resolve(directive);
            },
                                (directive, arg, extensions) =>
            {
                if (LookopDirectivePath(script, offset, directive, arg) is string file)
                {
                    region = new DomRegion
                    {
                        BeginColumn = -1,
                        BeginLine   = -1,
                        EndLine     = -1,
                        FileName    = file,
                        IsEmpty     = false
                    }
                }
                ;
                else
                {
                    region = CssSyntax.Resolve(directive);
                }
            });

            if (region.IsEmpty)
            {
                bool decorated = false;
                if (!script.RawFile.EndsWith(".g.cs"))
                {
                    decorated = CSScriptHelper.DecorateIfRequired(ref script.Content, ref offset);
                }

                Project project = CSScriptHelper.GenerateProjectFor(script);
                var     sources = project.Files
                                  .Where(f => f != project.Script)
                                  .Select(f => new Tuple <string, string>(File.ReadAllText(f), f))
                                  .ToArray();

                region = Autocompleter.ResolveSymbol(script.Content, offset, script.File, project.Refs, sources);
                if (decorated && region.FileName == script.File)
                {
                    CSScriptHelper.Undecorate(script.Content, ref region);
                }
            }

            return(region);
        }
Beispiel #7
0
        public static ISymbol LoadCode(string code, params string[] refs)
        {
            int position = code.IndexOf("|") - 1;

            code = code.Replace("|", "");

            var doc = Autocompleter.WithWorkspace(code, refs.Concat(new[] { typeof(RoslynHost).Assembly.Location }).ToArray());

            ISymbol symbol = SymbolFinder.FindSymbolAtPositionAsync(doc, position).Result;

            return(symbol);
        }
 private void AutocompleteForm_Load(object sender, EventArgs e)
 {
     string filename = "..\\..\\..\\words.txt";
     if (!File.Exists(filename))
     {
         MessageBox.Show(
             string.Format(
                 "Не найден файл со словарем {0}\r\nВозможно вы забыли распаковать файл words.zip",
                 Path.GetFullPath(filename)),
             "Ошибка");
         Environment.Exit(1);
     }
     autocompleter = new Autocompleter(File.ReadAllLines(filename));
 }
Beispiel #9
0
        internal static string FindRefreneces(string scriptFile, int offset, string context)
        {
            Output.WriteLine("FindRefreneces");

            var script = new SourceInfo(scriptFile);

            if (script.Content.IsEmpty())
            {
                throw new Exception("The file containing code is empty");
            }

            bool decorated = false;

            if (!script.RawFile.EndsWith(".g.cs"))
            {
                decorated = CSScriptHelper.DecorateIfRequired(ref script.Content, ref offset);
            }

            Project project = CSScriptHelper.GenerateProjectFor(script);
            var     sources = project.Files
                              .Where(f => f != project.Script)
                              .Select(f => new Tuple <string, string>(File.ReadAllText(f), f))
                              .ToArray();

            var regions = new List <string>();

            if (context == "all")  // include definition and constructors
            {
                DomRegion[] refs = Autocompleter.GetSymbolSourceRefs(script.Content, offset, script.File, project.Refs, sources);
                foreach (DomRegion item in refs)
                {
                    DomRegion region = item;
                    if (decorated && item.FileName == script.File)
                    {
                        CSScriptHelper.Undecorate(script.Content, ref region);
                    }

                    regions.Add($"{item.FileName}({region.BeginLine},{item.BeginColumn}): ...");
                }
            }

            regions.AddRange(Autocompleter.FindReferences(script.Content, offset, script.File, project.Refs, sources));

            fullyLoaded = true;

            return(regions.Distinct().JoinBy("\n"));
        }
Beispiel #10
0
        void NewTweet_Loaded(object sender, RoutedEventArgs e)
        {
            string RemoveBack;

            if (NavigationContext.QueryString.TryGetValue("removeBack", out RemoveBack) || RemoveBack == "1")
            {
                NavigationService.RemoveBackEntry();
            }

            if (ListAccounts.SelectedItems != null)
            {
                if (DataTransfer.Draft != null && DataTransfer.Draft.Accounts != null)
                {
                    foreach (var account in DataTransfer.Draft.Accounts.Where(x => x != null))
                    {
                        ListAccounts.SelectedItems.Add(account);
                    }
                }
                else
                {
                    if (!ListAccounts.SelectedItems.Contains(DataTransfer.CurrentAccount))
                    {
                        ListAccounts.SelectedItems.Add(DataTransfer.CurrentAccount);
                    }
                }
            }


            _completer          = new Autocompleter();
            _completer.User     = DataTransfer.CurrentAccount;
            _completer.Textbox  = TweetBox;
            _completer.Trigger  = '@';
            viewModel.Completer = _completer;

            // Update the UI.
            if (viewModel.IsGeotagged)
            {
                Dispatcher.InvokeIfRequired(EnableGeoloc.Begin);
            }
            else
            {
                Dispatcher.InvokeIfRequired(DisableGeoloc.Begin);
            }
        }
Beispiel #11
0
        public void Initialize()
        {
            var ctx = new Bunit.TestContext();

            cut = ctx.RenderComponent <Autocompleter <Car> >(parameters =>
            {
                parameters.Add(x => x.Data, new List <Car>
                {
                    new Car {
                        Id = 4, Make = "Opel", Model = "Astra"
                    },
                    new Car {
                        Id = 8, Make = "Ferrari", Model = "Testarossa"
                    },
                    new Car {
                        Id = 15, Make = "Bugati", Model = "Veyron"
                    }
                });
            });
            sut = cut.Instance;
        }
Beispiel #12
0
        internal static string GetTooltip(string scriptFile, int caret, string hint, bool shortHintedTooltips)
        {
            // Simplified API for ST3
            Output.WriteLine("GetTooltip");
            //Console.WriteLine("hint: " + hint);

            string result = null;

            var script = new SourceInfo(scriptFile);

            if (script.Content.IsEmpty())
            {
                throw new Exception("The file containing code is empty");
            }

            void loockupDirective(string directive)
            {
                var css_directive = CssCompletionData.AllDirectives
                                    .FirstOrDefault(x => x.DisplayText == directive);

                if (css_directive != null)
                {
                    result = $"Directive: {css_directive.DisplayText}\n{css_directive.Description}";
                    result = result.NormalizeLineEnding().Replace("\r\n\r\n", "\r\n").TrimEnd();
                }
            };

            ParseAsCssDirective(script.Content, caret,
                                loockupDirective,
                                (directive, arg, extensions) =>
            {
                if (LookopDirectivePath(script, caret, directive, arg) is string file)
                {
                    result = $"File: {file}";
                }
                else
                {
                    loockupDirective(directive);
                }
            });

            if (result.HasText())
            {
                return(result);
            }

            if (!script.RawFile.EndsWith(".g.cs"))
            {
                CSScriptHelper.DecorateIfRequired(ref script.Content, ref caret);
            }

            Project project = CSScriptHelper.GenerateProjectFor(script);
            var     sources = project.Files
                              .Where(f => f != project.Script)
                              .Select(f => new Tuple <string, string>(File.ReadAllText(f), f))
                              .ToArray();

            int methodStartPosTemp;
            var items = Autocompleter.GetMemberInfo(script.Content, caret, out methodStartPosTemp, project.Refs, sources, includeOverloads: hint.HasAny());

            fullyLoaded = true;
            if (hint.HasAny())
            {
                if (shortHintedTooltips)
                {
                    items = items.Select(x => x.Split('\n').FirstOrDefault()).ToArray();
                }

                int count = hint.Split(',').Count();
                result = items.FirstOrDefault(x =>
                {
                    return(SyntaxMapper.GetArgumentCount(x) == count);
                })
                         ?? items.FirstOrDefault();

                bool hideOverloadsSummary = false;
                if (result != null && hideOverloadsSummary)
                {
                    var lines = result.Split('\n').Select(x => x.TrimEnd('\r')).ToArray();
                    //(+ 1 overloads)
                    if (lines[0].EndsWith(" overloads)"))
                    {
                        try
                        {
                            lines[0] = lines[0].Split(new[] { "(+" }, StringSplitOptions.None).First().Trim();
                        }
                        catch { }
                    }
                    result = lines.JoinBy("\n");
                }
            }
            else
            {
                result = items.FirstOrDefault();
            }

            if (result.HasText())
            {
                result = result.NormalizeLineEnding().Replace("\r\n\r\n", "\r\n").TrimEnd();
            }

            return(result);
        }
Beispiel #13
0
        static public string ProcessRequest(Args args)
        {
            try
            {
                if (args.script.HasText() && Path.GetExtension(args.script).ToLower() == ".vb")
                {
                    Autocompleter.Language = "VB";
                }

                if (args.popen.HasText())
                {
                    string[] parts = args.popen.Split('|').ToArray();
                    string   exe   = parts.FirstOrDefault();
                    if (parts.Count() == 2)
                    {
                        Process.Start(parts.First(), parts.Last());
                    }
                    else if (parts.Count() == 1)
                    {
                        Process.Start(parts.First());
                    }
                    else
                    {
                        return("<error>Invalid 'popen' arguments. Must be <exe>[|<args>]");
                    }
                    return(null);
                }

                if (args.pkill)
                {
                    PKill(args.pid, args.pname);
                    return(null);
                }

                if (args.cscs_path != null)
                {
                    if (csscript.cscs_path != args.cscs_path)
                    {
                        csscript.cscs_path = Path.GetFullPath(args.cscs_path);
                        Output.WriteLine(" >> cscs.exe is remapped to: " + csscript.cscs_path);
                    }
                    return(null);
                }

                if (args.op == "ping")
                {
                    try
                    {
                        Autocompleter.Load();
                        return("ready");
                    }
                    catch
                    {
                        return("not ready");
                    }
                }

                string result = "";
                if (args.op.HasText())
                {
                    if (!File.Exists(args.script))
                    {
                        if (args.script.HasText())
                        {
                            return($"<error>File '{args.script}' doesn't exist");
                        }
                        else
                        {
                            return(null);
                        }
                    }

                    if (args.op == "references")
                    {
                        result = FindRefreneces(args.script, args.pos, args.context);
                    }
                    else if (args.op.StartsWith("suggest_usings:"))
                    {
                        result = FindUsings(args.script, args.op.Split(':').Last(), args.rich);
                    }
                    else if (args.op == "resolve")
                    {
                        result = Resolve(args.script, args.pos, args.rich);
                    }
                    else if (args.op == "completion")
                    {
                        result = GetCompletion(args.script, args.pos, args.doc);
                    }
                    else if (args.op.StartsWith("tooltip:"))
                    {
                        result = GetTooltip(args.script, args.pos, args.op.Split(':').Last(), args.short_hinted_tooltips == 1);
                    }
                    else if (args.op.StartsWith("memberinfo"))
                    {
                        result = GetMemberInfo(args.script, args.pos, args.collapseOverloads);
                    }
                    else if (args.op.StartsWith("signaturehelp"))
                    {
                        result = GetSignatureHelp(args.script, args.pos);
                    }
                    else if (args.op == "project")
                    {
                        result = GenerateProjectFor(args.script);
                    }
                    else if (args.op == "codemap")
                    {
                        result = CodeMap(args.script, args.rich, false);
                    }
                    else if (args.op == "codemap_vscode")
                    {
                        result = CodeMap(args.script, args.rich, vsCodeSerialization: true);
                    }
                    else if (args.op == "format")
                    {
                        Output.WriteLine("FormatCode>");
                        int caretPos      = args.pos;
                        var formattedCode = FormatCode(args.script, ref caretPos);
                        Output.WriteLine("<FormatCode");
                        result = $"{caretPos}\n{formattedCode}";
                    }
                }

                if (string.IsNullOrEmpty(result))
                {
                    return("<null>");
                }
                else
                {
                    return(result);
                }
            }
            catch (Exception e)
            {
                return("<error>" + e);
            }
            finally
            {
                Autocompleter.Language = "C#";
            }
        }
Beispiel #14
0
        internal static IEnumerable <ICompletionData> GetCompletionRaw(string scriptFile, int caret, bool includDocumentation = false)
        {
            var script = new SourceInfo(scriptFile);

            if (script.Content.IsEmpty())
            {
                throw new Exception("The file containing code is empty");
            }

            IEnumerable <ICompletionData> completions = null;

            bool wasHandled = ParseAsCssDirective(script.Content, caret,
                                                  (directive) =>
            {
                completions = CssCompletionData.AllDirectives;
            },
                                                  (directive, arg, extensions) =>
            {
                if (directive.OneOf("//css_ac", "//css_autoclass"))
                {
                    completions = new[]
                    {
                        new CssCompletionData
                        {
                            CompletionText = "freestyle",
                            DisplayText    = "freestyle",
                            Description    = "Free style code without any entry point.",
                            CompletionType = CompletionType.directive
                        }
                    };
                }
                else
                {
                    completions = LookupDirectivePaths(script, caret, directive, arg, extensions)
                                  .Select(file => new CssCompletionData
                    {
                        CompletionText = Path.GetFileName(file),
                        DisplayText    = Path.GetFileName(file),
                        Description    = "File: " + file,
                        CompletionType = CompletionType.file
                    });
                }
            },
                                                  ignoreEmptyArgs: false);

            if (!wasHandled)
            {
                if (!script.RawFile.EndsWith(".g.cs"))
                {
                    CSScriptHelper.DecorateIfRequired(ref script.Content, ref caret);
                }

                Project project = CSScriptHelper.GenerateProjectFor(script);
                var     sources = project.Files
                                  .Where(f => f != project.Script)
                                  .Select(f => new Tuple <string, string>(File.ReadAllText(f), f))
                                  .ToArray();

                completions = Autocompleter.GetAutocompletionFor(script.Content, caret, project.Refs, sources, includDocumentation);

                var count = completions.Count();
            }
            return(completions);
        }
Beispiel #15
0
        public void Remove()
        {
            Autocompleter completer = new Autocompleter();

            completer.Remove();
        }
Beispiel #16
0
        public void Update(string fileName)
        {
            Autocompleter completer = new Autocompleter();

            completer.Update(fileName);
        }
Beispiel #17
0
        internal static string GetMemberInfo(string scriptFile, int caret, bool collapseOverloads)
        {
            // Complete API for N++

            Output.WriteLine("GetMemberInfo");
            //Console.WriteLine("hint: " + hint);

            var    script = new SourceInfo(scriptFile);
            string result = null;

            if (script.Content.IsEmpty())
            {
                throw new Exception("The file containing code is empty");
            }

            void loockupDirective(string directive)
            {
                var css_directive = CssCompletionData.AllDirectives
                                    .FirstOrDefault(x => x.DisplayText == directive);

                if (css_directive != null)
                {
                    result = $"Directive: {css_directive.DisplayText}\n{css_directive.Description}";
                    result = result.NormalizeLineEnding().Replace("\r\n\r\n", "\r\n").TrimEnd();
                }
            };

            ParseAsCssDirective(script.Content, caret,
                                loockupDirective,
                                (directive, arg, extensions) =>
            {
                if (LookopDirectivePath(script, caret, directive, arg) is string file)
                {
                    result = $"File: {file}";
                }
                else
                {
                    loockupDirective(directive);
                }
            });

            if (result.HasText())
            {
                return(MemberInfoData.Serialize(new MemberInfoData {
                    Info = result
                }));
            }

            if (!script.RawFile.EndsWith(".g.cs"))
            {
                CSScriptHelper.DecorateIfRequired(ref script.Content, ref caret);
            }

            Project project = CSScriptHelper.GenerateProjectFor(script);
            var     sources = project.Files
                              .Where(f => f != script.File)
                              .Select(f => new Tuple <string, string>(File.ReadAllText(f), f))
                              .ToArray();

            int methodStartPosTemp;
            var items = Autocompleter.GetMemberInfo(script.Content, caret, out methodStartPosTemp, project.Refs, sources, includeOverloads: !collapseOverloads);

            if (collapseOverloads)
            {
                items = items.Take(1);
            }

            result = items.Select(x => new MemberInfoData {
                Info = x, MemberStartPosition = methodStartPosTemp
            })
                     .Select(MemberInfoData.Serialize)
                     .JoinSerializedLines();

            return(result);
        }