public void MyVariantsTest() { var cExpression = "b=2*a[n]; b=d;"; var c = new SyntacticAnalysis(cExpression, new Glossary()); Assert.IsTrue(c.Errors.Count == 0); }
public void ExtraSpacesTest() { var cExpression = "b=2*a[n]; b d;"; var c = new SyntacticAnalysis(cExpression, new Glossary()); Assert.IsTrue(c.Errors.Any()); }
public void IndexerTest() { var cExpression = "b = a[];"; var c = new SyntacticAnalysis(cExpression, new Glossary()); Assert.IsTrue(c.Errors.Any()); }
public void BracketNotOpenedTest() { var cExpression = "b=2*a[n]); b = d;"; var c = new SyntacticAnalysis(cExpression, new Glossary()); Assert.IsTrue(c.Errors.Any()); }
public void ElseTest() { var expression = "else {a = 0;}"; var c = new SyntacticAnalysis(expression, new Glossary()); Assert.IsTrue(c.OldErrors.Count == 1); }
public void IfTest() { var expression = "if a > b a = 8;"; var c = new SyntacticAnalysis(expression, new Glossary()); Assert.IsTrue(c.OldErrors.Count == 1); }
public void TypesTest() { var expression = "int b=2*a[n]; unsigned long b = d; int[] a = 0;"; var c = new SyntacticAnalysis(expression, new Glossary()); Assert.IsTrue(c.OldErrors.Count == 0); }
public void AssignationTest() { var cExpression = "1 = 9;"; var c = new SyntacticAnalysis(cExpression, new Glossary()); Assert.IsTrue(c.Errors.Any()); }
public void RandomTests() { { var cExpression = "a = (2* 3 + 0 - (1*7-(9+3)));"; var c = new SyntacticAnalysis(cExpression, new Glossary()); Assert.IsTrue(c.Errors.Count == 0); } }
public void Compile(string source) { var syntacticAnalysis = new SyntacticAnalysis(); var ast = syntacticAnalysis.Run(source); var semanticAnalysis = new SemanticAnalysis(); semanticAnalysis.Run(ast); // Generate IL program /*var ilGenerator = new ILGenerator(); * return ilGenerator.Build(ast);*/ }
public void BinaryOperatorsNotWith2OperandsTest() { { var cExpression = "b = 1 + 3 * ;"; var c = new SyntacticAnalysis(cExpression, new Glossary()); Assert.IsTrue(c.Errors.Any()); } { var cExpression = "b = 1 + /3 ;"; var c = new SyntacticAnalysis(cExpression, new Glossary()); Assert.IsTrue(c.Errors.Any()); } }
public void QuoteNotClosedTest() { { var cExpression = "b= \"fsdgdgd\";"; var c = new SyntacticAnalysis(cExpression, new Glossary()); Assert.IsTrue(c.Errors.Count == 0); } { var cExpression = "b= \"fsdgdgd;"; var c = new SyntacticAnalysis(cExpression, new Glossary()); Assert.IsTrue(c.Errors.Any()); } }
public void SetCanonicalSets( SyntacticAnalysis.Grammar grammar, SyntacticAnalysis.LR.LR0CanonicalSets canonical_sets ) { this.grammar = grammar; this.canonical_sets = canonical_sets; this.marked_nodes.Clear(); this.marked_edges.Clear(); this.RebuildGraph(); this.FlagUpdate(true); }
public void MarkAction( SyntacticAnalysis.TerminalSymbol terminal, Color color ) { for( int i = 0; i < this.GridView.Rows.Count; ++i ) this.GridView[this.grammar.Terminals.IndexOf(terminal), i].Style.BackColor = color; }
public void MarkGoto( SyntacticAnalysis.GrammaticalSymbol grammatical, Color color ) { for( int i = 0; i < this.GridView.Rows.Count; ++i ) this.GridView[this.grammar.Terminals.Count + this.grammar.Grammaticals.IndexOf(grammatical) - 1, i].Style.BackColor = color; }
public void SetTable( SyntacticAnalysis.ExtendedGrammar grammar, SyntacticAnalysis.LR.ParserTable table ) { this.grammar = grammar; this.table = table; this.UpdateTable(); }
public void MarkTransition( int state_index, SyntacticAnalysis.Symbol symbol, Color line_color, Color label_color ) { var edge = this.out_edge_map[state_index][symbol]; if( edge.LinePen == this.edge_pen ) { edge.LinePen = (Pen)this.edge_pen.Clone(); edge.LinePen.Color = line_color; } else { edge.LinePen.Color = line_color; } if( edge.LabelBrush == this.label_brush ) edge.LabelBrush = new SolidBrush(label_color); else ((SolidBrush)edge.LabelBrush).Color = label_color; this.marked_edges.Add(edge); this.FlagUpdate(false); }
public async Task DoUpdateAsync() { if (IsDisposed) { return; } var buffer = _currentSnapshot; var path = _document.FilePath; // replace with user token var token = _cts.Token; var instance = await FsLintVsPackage.Instance.WithCancellation(token); // this acts as a throttle await Task.Delay(200, token); if (Project == null) { await instance.JoinableTaskFactory.SwitchToMainThreadAsync(); var project = instance.Dte.Solution.FindProjectItem(path)?.ContainingProject; if (project == null) { return; } if (instance.SolutionService.GetProjectOfUniqueName(project.UniqueName, out var vsHierarchy) != VSConstants.S_OK) { return; } if (instance.SolutionService.GetGuidOfProject(vsHierarchy, out var guid) != VSConstants.S_OK) { return; } Project = new LintProjectInfo(project.Name, guid, vsHierarchy); } await Task.Yield(); var connectionString = SqlAnalyzer.tryFindConnectionString(path); if (string.IsNullOrWhiteSpace(connectionString)) { return; } var source = _currentSnapshot.GetText(); var sourceText = SourceText.ofString(source); var getProjectOptions = _provider.CheckerInstance.GetProjectOptionsFromScript( filename: path, source: sourceText, assumeDotNetFramework: false, useSdkRefs: true, useFsiAuxLib: true, previewEnabled: true, otherFlags: new string[] { "--targetprofile:netstandard" }, loadedTimeStamp: FSharpOption <DateTime> .None, extraProjectInfo: FSharpOption <object> .None, optionsStamp: FSharpOption <long> .None, userOpName: FSharpOption <string> .None, sdkDirOverride: FSharpOption <string> .None ); var(options, errors) = await FSharpAsync.StartAsTask(getProjectOptions, null, token); if (errors.Any()) { return; } var performParseAndCheck = _provider.CheckerInstance.ParseAndCheckFileInProject( filename: path, fileVersion: 1, sourceText: sourceText, options: options, userOpName: FSharpOption <string> .None ); var(parseResults, checkAnswer) = await FSharpAsync.StartAsTask(performParseAndCheck, null, token); if (parseResults.ParseHadErrors || checkAnswer.IsAborted) { return; } var checkResults = SqlAnalyzer.checkAnswerResult(checkAnswer).Value; var context = new SqlAnalyzerContext( fileName: path, content: source.Split('\n'), parseTree: parseResults.ParseTree.Value, symbols: SqlAnalyzer.getSymbols(checkResults) ); var operationBlocks = SyntacticAnalysis.findSqlOperations(context); var loadedSchema = SqlAnalysis.databaseSchema(connectionString); var errorMessages = new List <Message>(); if (loadedSchema.IsError) { foreach (var operation in operationBlocks) { var containsSkipAnalysis = operation.blocks.Any(block => block.IsSkipAnalysis); foreach (var block in operation.blocks) { var blockRange = block.Range(); if ((block.IsQuery || block.IsTransaction) && OptionModule.IsSome(blockRange) && !containsSkipAnalysis) { var internalError = (loadedSchema.ErrorValue ?? "").Replace("3D000:", "").Replace("28P01:", ""); var fullError = $"Error occured while trying to connect to the database using the configured connection string in NPGSQL_FSHARP in order to perform static analysis:{internalError}"; var errorMessage = new Message( type: "Error", message: fullError, code: "SQL101", severity: Severity.Warning, range: blockRange.Value, fixes: Microsoft.FSharp.Collections.FSharpList <Fix> .Empty ); errorMessages.Add(errorMessage); } } } } else { var databaseSchema = loadedSchema.ResultValue; foreach (var operation in operationBlocks) { foreach (var analysisOutput in SqlAnalysis.analyzeOperation(operation, connectionString, databaseSchema)) { errorMessages.Add(analysisOutput); } } } var oldLintingErrors = this.Factory.CurrentSnapshot; var newLintErrors = new LintingErrorsSnapshot(_document, oldLintingErrors.VersionNumber + 1); foreach (var error in errorMessages) { var span = RangeToSpan(error.Range, buffer); newLintErrors.Errors.Add(new LintError(span, error, Project)); } await instance.JoinableTaskFactory.SwitchToMainThreadAsync(); if (token.IsCancellationRequested) { return; } UpdateLintingErrors(newLintErrors); }
public TestCompiler() { this.syntacticAnalysis = new SyntacticAnalysis(); this.semanticAnalysis = new SemanticAnalysis(); }
public async Task DoUpdateAsync() { if (IsDisposed) { return; } var buffer = _currentSnapshot; var path = _document.FilePath; // replace with user token var token = _cts.Token; var instance = await FsLintVsPackage.Instance.WithCancellation(token); // this acts as a throttle await Task.Delay(200, token); if (Project == null) { await instance.JoinableTaskFactory.SwitchToMainThreadAsync(); var project = instance.Dte.Solution.FindProjectItem(path)?.ContainingProject; if (project == null) { return; } if (instance.SolutionService.GetProjectOfUniqueName(project.UniqueName, out var vsHierarchy) != VSConstants.S_OK) { return; } if (instance.SolutionService.GetGuidOfProject(vsHierarchy, out var guid) != VSConstants.S_OK) { return; } Project = new LintProjectInfo(project.Name, guid, vsHierarchy); } await Task.Yield(); var connectionString = SqlAnalyzer.tryFindConnectionString(path); if (string.IsNullOrWhiteSpace(connectionString)) { return; } var loadedSchema = SqlAnalysis.databaseSchema(connectionString); if (loadedSchema.IsError) { return; } var source = _currentSnapshot.GetText(); var sourceText = SourceText.ofString(source); var getProjectOptions = _provider.CheckerInstance.GetProjectOptionsFromScript( filename: path, sourceText: sourceText, assumeDotNetFramework: false, useSdkRefs: true, useFsiAuxLib: true, previewEnabled: true, otherFlags: new string[] { "--targetprofile:netstandard" }, loadedTimeStamp: FSharpOption <DateTime> .None, extraProjectInfo: FSharpOption <object> .None, optionsStamp: FSharpOption <long> .None, userOpName: FSharpOption <string> .None ); var(options, errors) = await FSharpAsync.StartAsTask(getProjectOptions, null, token); if (errors.Any()) { return; } var performParseAndCheck = _provider.CheckerInstance.ParseAndCheckFileInProject( filename: path, fileversion: 1, sourceText: sourceText, options: options, textSnapshotInfo: FSharpOption <object> .None, userOpName: FSharpOption <string> .None ); var(parseResults, checkAnswer) = await FSharpAsync.StartAsTask(performParseAndCheck, null, token); if (parseResults.ParseHadErrors || checkAnswer.IsAborted) { return; } var checkResults = SqlAnalyzer.checkAnswerResult(checkAnswer).Value; var context = new SqlAnalyzerContext( fileName: path, content: source.Split('\n'), parseTree: parseResults.ParseTree.Value, symbols: SqlAnalyzer.getSymbols(checkResults) ); var databaseSchema = loadedSchema.ResultValue; var errorMessages = from operation in SyntacticAnalysis.findSqlOperations(context) from analysisOutput in SqlAnalysis.analyzeOperation(operation, connectionString, databaseSchema) select analysisOutput; var oldLintingErrors = this.Factory.CurrentSnapshot; var newLintErrors = new LintingErrorsSnapshot(_document, oldLintingErrors.VersionNumber + 1); foreach (var error in errorMessages) { var span = RangeToSpan(error.Range, buffer); newLintErrors.Errors.Add(new LintError(span, error, Project)); } await instance.JoinableTaskFactory.SwitchToMainThreadAsync(); if (token.IsCancellationRequested) { return; } UpdateLintingErrors(newLintErrors); }
public TestParser(bool keepSources = false) { this.syntacticAnalysis = new SyntacticAnalysis(); this.Sources = new List <string>(); this.keepSources = keepSources; }