protected override IEnumerable <LinterInfo> GetLinterInformations(MemoryStream memstream) { var inputStream = new Antlr4.Runtime.AntlrInputStream(memstream); var lexer = new RealVirtuality.SQF.ANTLR.Parser.sqfLexer(inputStream); var commonTokenStream = new Antlr4.Runtime.CommonTokenStream(lexer); var p = new RealVirtuality.SQF.ANTLR.Parser.sqfParser(commonTokenStream, ConfigHost.Instance.SqfDefinitions); var listener = new RealVirtuality.SQF.ANTLR.SqfListener(); p.AddParseListener(listener); memstream.Seek(0, SeekOrigin.Begin); p.RemoveErrorListeners(); #if DEBUG p.BuildParseTree = true; p.Context = new Antlr4.Runtime.ParserRuleContext(); #endif var se = new List <LinterInfo>(); p.AddErrorListener(new RealVirtuality.SQF.ANTLR.ErrorListener((recognizer, token, line, charPositionInLine, msg, ex) => { switch (ex == null ? null : p.RuleNames[ex.Context.RuleIndex]) { case "binaryexpression": se.Add(new LinterInfo() { StartOffset = token.StartIndex, Length = token.Text.Length, Message = string.Concat("Invalid binary expression: ", msg), Severity = ESeverity.Error, Line = line, LineOffset = charPositionInLine, FilePath = this.FilePath }); break; case "unaryexpression": se.Add(new LinterInfo() { StartOffset = token.StartIndex, Length = token.Text.Length, Message = string.Concat("Invalid unary expression: ", msg), Severity = ESeverity.Error, Line = line, LineOffset = charPositionInLine, FilePath = this.FilePath }); break; case "nularexpression": se.Add(new LinterInfo() { StartOffset = token.StartIndex, Length = token.Text.Length, Message = string.Concat("Invalid nular expression: ", msg), Severity = ESeverity.Error, Line = line, LineOffset = charPositionInLine, FilePath = this.FilePath }); break; default: se.Add(new LinterInfo() { StartOffset = token.StartIndex, Length = token.Text.Length, Message = msg, Severity = ESeverity.Error, Line = line, LineOffset = charPositionInLine, FilePath = this.FilePath }); break; } })); p.sqf(); return(se); }
public IEnumerable <LintInfo> Lint(Stream stream, ProjectFile file) { var inputStream = new Antlr4.Runtime.AntlrInputStream(stream); var lexer = new RealVirtuality.SQF.ANTLR.Parser.sqfLexer(inputStream); var commonTokenStream = new Antlr4.Runtime.CommonTokenStream(lexer); var p = new RealVirtuality.SQF.ANTLR.Parser.sqfParser(commonTokenStream, ConfigHost.Instance.SqfDefinitions); var listener = new RealVirtuality.SQF.ANTLR.SqfListener(); p.AddParseListener(listener); p.RemoveErrorListeners(); #if DEBUG p.BuildParseTree = true; p.Context = new Antlr4.Runtime.ParserRuleContext(); #endif var se = new List <LintInfo>(); p.AddErrorListener(new RealVirtuality.SQF.ANTLR.ErrorListener((recognizer, token, line, charPositionInLine, msg, ex) => { switch (ex == null ? null : p.RuleNames[ex.Context.RuleIndex]) { case "binaryexpression": se.Add(new LintInfo(file) { StartOffset = token.StartIndex, Length = token.Text.Length, Message = string.Concat("Invalid binary expression: ", msg), Severity = ESeverity.Error, Line = line, LineOffset = charPositionInLine }); break; case "unaryexpression": se.Add(new LintInfo(file) { StartOffset = token.StartIndex, Length = token.Text.Length, Message = string.Concat("Invalid unary expression: ", msg), Severity = ESeverity.Error, Line = line, LineOffset = charPositionInLine }); break; case "nularexpression": se.Add(new LintInfo(file) { StartOffset = token.StartIndex, Length = token.Text.Length, Message = string.Concat("Invalid nular expression: ", msg), Severity = ESeverity.Error, Line = line, LineOffset = charPositionInLine }); break; default: se.Add(new LintInfo(file) { StartOffset = token.StartIndex, Length = token.Text.Length, Message = msg, Severity = ESeverity.Error, Line = line, LineOffset = charPositionInLine }); break; } })); try { p.sqf(); } catch (Exception ex) { App.ShowOperationFailedMessageBox(ex); while (ex.InnerException != null) { ex = ex.InnerException; App.ShowOperationFailedMessageBox(ex); } System.Diagnostics.Debugger.Break(); } return(se); }