Пример #1
0
 public DebuggerBridge(CommandHandler commandHandler, DebuggerServer debugerServer, IConsole console, InjectionRuntime runtime)
 {
     this.commandHandler = commandHandler;
     this.debuggerServer = debugerServer;
     this.console        = console;
     this.runtime        = runtime;
 }
Пример #2
0
        private static void AnalyzeFile(string file)
        {
            Console.WriteLine($"Analyzing {file}");

            var runtime = new InjectionRuntime();

            var messages       = runtime.Load(file);
            var originalCollor = Console.ForegroundColor;

            foreach (var message in messages.OrderBy(m => m.StartLine))
            {
                switch (message.Severity)
                {
                case MessageSeverity.Error:
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine(message.ToString());
                    break;

                case MessageSeverity.Warning:
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.WriteLine(message.ToString());
                    break;
                }
            }
            Console.ForegroundColor = originalCollor;
        }
Пример #3
0
        public CompletionList GetCompletions(string fileContent, int line, int column)
        {
            var runtime = new InjectionRuntime();

            runtime.Load(fileContent, "test.sc");

            return(GetCompletions(runtime.CurrentScript.Syntax, runtime.Metadata, line, column));
        }
Пример #4
0
        public static InjectionValue EvalExpression(string expression)
        {
            var parser           = new Parser();
            var expressionSyntax = parser.ParseExpression(expression, new FailTestErrorListener());
            var runtime          = new InjectionRuntime();

            return(runtime.Interpreter.VisitExpression(expressionSyntax));
        }
Пример #5
0
        public TestDebuggerFacade(ITimeSource timeSource)
        {
            ScriptCancellation = new CancellationTokenSource();
            debuggerServer     = new DebuggerServer(() => ScriptCancellation.Token);

            runtime = new InjectionRuntime(null, debuggerServer, timeSource, () => ScriptCancellation.Token);
            tracer  = debuggerServer;
            debuggerServer.DebuggerBreakHit += HandleDebuggerBreakHit;
        }
Пример #6
0
        public static InjectionValue Execute(string subName, string codeBlock)
        {
            var runtime = new InjectionRuntime();

            var parser = new Parser();

            runtime.Load(parser.ParseFile(codeBlock, new FailTestErrorListener()));

            return(runtime.CallSubrutine(subName));
        }
Пример #7
0
        public static Task <InjectionValue> RunSubrutine(string subrutineName, Func <CancellationToken?> retrieveCancellationToken, string file)
        {
            return(Task.Run(() =>
            {
                var runtime = new InjectionRuntime(retrieveCancellationToken);
                var parser = new Parser();
                runtime.Load(parser.ParseFile(file, new FailTestErrorListener()));

                return runtime.CallSubrutine(subrutineName);
            }));
        }
Пример #8
0
        public static void TestSubrutine(int expected, string subrutineName, string file)
        {
            var runtime = new InjectionRuntime();
            var parser  = new Parser();

            runtime.Load(parser.ParseFile(file, new FailTestErrorListener()));

            var actual = runtime.CallSubrutine(subrutineName);

            Assert.AreEqual(InjectionValueKind.Integer, actual.Kind, file);
            Assert.AreEqual(expected, actual.Integer, file);
        }
Пример #9
0
        private void UpdateDiagnostic()
        {
            string content;
            Uri    uri;

            lock (documentLock)
            {
                content = documents[lastDocumentUri.AbsoluteUri];
                uri     = lastDocumentUri;
            }

            var runtime  = new InjectionRuntime();
            var messages = runtime.Load(content, uri.LocalPath);

            diagnosticReporter.Report(uri, messages);
        }
Пример #10
0
        public static void TestSubrutine(string expected, string codeBlock, NativeSubrutineDefinition[] natives = null)
        {
            var subrutine = $"sub test()\r\n{codeBlock}\r\n end sub";
            var runtime   = new InjectionRuntime();

            if (natives != null)
            {
                runtime.Metadata.Add(natives);
            }

            var parser = new Parser();

            runtime.Load(parser.ParseFile(subrutine, new FailTestErrorListener()));

            var actual = runtime.CallSubrutine("test");

            Assert.AreEqual(InjectionValueKind.String, actual.Kind, codeBlock);
            Assert.AreEqual(expected, actual.String, codeBlock);
        }
Пример #11
0
        public static void TestSubrutine(string codeBlock, NativeSubrutineDefinition[] natives = null, NativeSubrutineDefinition[] intrinsicVariables = null)
        {
            var subrutine = $"sub test()\r\n{codeBlock}\r\n end sub";
            var runtime   = new InjectionRuntime();

            if (natives != null)
            {
                runtime.Metadata.Add(natives);
            }
            if (intrinsicVariables != null)
            {
                runtime.Metadata.AddIntrinsicVariables(intrinsicVariables);
            }

            var parser = new Parser();

            runtime.Load(parser.ParseFile(subrutine, new FailTestErrorListener()));

            runtime.CallSubrutine("test");
        }
Пример #12
0
        public Location GetDefinition(string fileContent, int line, int column)
        {
            string fileName = "test.sc";
            var    runtime  = new InjectionRuntime();

            runtime.Load(fileContent, fileName);

            var rule = FindRule(runtime.CurrentScript.Syntax, line, column);

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

            if (rule is injectionParser.CallContext call)
            {
                var subrutineName = call.SYMBOL().GetText();
                var argumentCount = call.argumentList()?.arguments()?.argument()?.Length ?? 0;
                if (runtime.Metadata.TryGetSubrutine(subrutineName, argumentCount, out var subrutineDefinition))
                {
                    var subrutineDefName = subrutineDefinition.Syntax.subrutineName();
                    return(new Location()
                    {
                        Range = new Range(new Position(subrutineDefName.Start.Line, subrutineDefName.Start.Column + 1),
                                          new Position(subrutineDefName.Stop.Line, subrutineDefName.Start.Column + 1 + subrutineName.Length))
                    });
                }
            }
            else if (rule is injectionParser.LvalueContext lvalue)
            {
                var subrutine = GetSubrutine(lvalue);
                if (subrutine != null)
                {
                    var definitions = new Dictionary <string, ParserRuleContext>(StringComparer.OrdinalIgnoreCase);
                    var collector   = new SymbolDefinitionsCollector(definitions);
                    collector.Visit(subrutine);

                    string name = lvalue.SYMBOL()?.GetText() ?? lvalue.indexedSymbol().SYMBOL().GetText();
                    if (definitions.TryGetValue(name, out var definitionRule))
                    {
                        var endColumn = definitionRule.Start.Column + 1 + definitionRule.GetText().Length;
                        return(new Location()
                        {
                            Range = new Range(new Position(definitionRule.Start.Line, definitionRule.Start.Column + 1),
                                              new Position(definitionRule.Start.Line, endColumn))
                        });
                    }
                }
            }
            else if (rule is injectionParser.GotoContext gotoContext)
            {
                var subrutine = GetSubrutine(gotoContext);
                if (subrutine != null)
                {
                    var definitions = new Dictionary <string, ParserRuleContext>(StringComparer.OrdinalIgnoreCase);
                    var collector   = new SymbolDefinitionsCollector(definitions);
                    collector.Visit(subrutine);

                    string name = gotoContext.SYMBOL().GetText();
                    if (definitions.TryGetValue(name, out var definitionRule))
                    {
                        var endColumn = definitionRule.Start.Column + definitionRule.GetText().Length - 2;
                        return(new Location()
                        {
                            Range = new Range(new Position(definitionRule.Start.Line, definitionRule.Start.Column + 1),
                                              new Position(definitionRule.Start.Line, endColumn))
                        });
                    }
                }
            }
            else if (rule is injectionParser.OperandContext operand)
            {
                var subrutine = GetSubrutine(operand);
                if (subrutine != null)
                {
                    var definitions = new Dictionary <string, ParserRuleContext>(StringComparer.OrdinalIgnoreCase);
                    var collector   = new SymbolDefinitionsCollector(definitions);
                    collector.Visit(subrutine);

                    string name = operand.SYMBOL()?.GetText() ?? operand.indexedSymbol().SYMBOL().GetText();
                    if (definitions.TryGetValue(name, out var definitionRule))
                    {
                        var endColumn = definitionRule.Start.Column + 1 + definitionRule.GetText().Length;
                        return(new Location()
                        {
                            Range = new Range(new Position(definitionRule.Start.Line, definitionRule.Start.Column + 1),
                                              new Position(definitionRule.Start.Line, endColumn))
                        });
                    }
                }
            }
            return(null);
        }
Пример #13
0
        public static MessageCollection Parse(string fileContent)
        {
            var runtime = new InjectionRuntime();

            return(runtime.Load(fileContent, "test.sc"));
        }
Пример #14
0
 public TestDebuggerFacade(ITimeSource timeSource)
 {
     runtime = new InjectionRuntime(null, debuggerServer, timeSource);
     tracer  = debuggerServer;
 }
Пример #15
0
 public void Open(InjectionRuntime runtime, InjectionApiUO injectionApi, Legacy infusionApi, InjectionHost host)
 => InjectionWindow.Open(runtime, injectionApi, infusionApi, host);
Пример #16
0
 public static void Open(InjectionRuntime runtime, InjectionApiUO injectionApi, Legacy infusionApi, InjectionHost host)
 => Open(new InjectionObjectServices(runtime.Objects, injectionApi, infusionApi), new ScriptServices(runtime, host), new MainServices(infusionApi, host),
         new InjectionConfiguration(infusionApi.Config, host.InjectionOptions));
Пример #17
0
 public void Open(InjectionRuntime runtime, InjectionApiUO injectionApi, Legacy infusionApi, InjectionHost host) /*do nothing*/ }