private void GherkinLanguageServiceOnFileScopeChanged(object sender, GherkinFileScopeChange gherkinFileScopeChange) { if (TagsChanged != null) { SnapshotSpanEventArgs args = new SnapshotSpanEventArgs(gherkinFileScopeChange.CreateChangeSpan()); TagsChanged(this, args); } }
private void GherkinLanguageServiceOnFileScopeChanged(object sender, GherkinFileScopeChange gherkinFileScopeChange) { if (ClassificationChanged != null) { ClassificationChangedEventArgs args = new ClassificationChangedEventArgs(gherkinFileScopeChange.CreateChangeSpan()); ClassificationChanged(this, args); } }
private void TriggerScopeChange(GherkinFileScopeChange scopeChange) { if (FileScopeChanged != null) FileScopeChanged(this, scopeChange); }
private void EnqueueAnalyzingRequest(GherkinFileScopeChange scopeChange) { if (!AnalyzingEnabled) return; var task = new AnalyzingTask(this, scopeChange); projectScope.GherkinProcessingScheduler.EnqueueAnalyzingRequest(task); // task.Apply(); // synchronous execution }
private static GherkinFileScopeChange Merge(GherkinFileScopeChange change1, GherkinFileScopeChange change2) { var ramainingChanged1Blocks = change1.ChangedBlocks.Intersect(change2.GherkinFileScope.GetAllBlocks()).ToArray(); var firstChanged1 = ramainingChanged1Blocks.FirstOrDefault(); var lastChanged1 = ramainingChanged1Blocks.LastOrDefault(); var firstChanged2 = change2.ChangedBlocks.First(); var lastChanged2 = change2.ChangedBlocks.Last(); var firstChanged = firstChanged1 != null && firstChanged1.GetStartLine() < firstChanged2.GetStartLine() ? firstChanged1 : firstChanged2; var lastChanged = lastChanged1 != null && lastChanged1.GetEndLine() > lastChanged2.GetEndLine() ? lastChanged1 : lastChanged2; var changedBlocks = change2.GherkinFileScope.GetAllBlocks().SkipFromItemInclusive(firstChanged).TakeUntilItemInclusive(lastChanged); var shiftedBlocks = change1.ShiftedBlocks.Any() || change2.ShiftedBlocks.Any() ? change2.GherkinFileScope.GetAllBlocks().SkipFromItemExclusive(lastChanged) : Enumerable.Empty<IGherkinFileBlock>(); return new GherkinFileScopeChange(change2.GherkinFileScope, false, false, changedBlocks, shiftedBlocks); }
public AnalyzingTask(GherkinLanguageService languageService, GherkinFileScopeChange change) { this.languageService = languageService; this.change = change; }
private void RegisterScopeChange(GherkinFileScopeChange scopeChange) { lastGherkinFileScope = scopeChange.GherkinFileScope; TriggerScopeChange(scopeChange); }
private GherkinFileScopeChange FullParse(ITextSnapshot textSnapshot, GherkinDialect gherkinDialect) { visualStudioTracer.Trace("Start full parsing", ParserTraceCategory); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); partialParseCount = 0; var gherkinListener = new GherkinTextBufferParserListener(gherkinDialect, textSnapshot, projectScope); var scanner = new GherkinScanner(gherkinDialect, textSnapshot.GetText(), 0); scanner.Scan(gherkinListener); var gherkinFileScope = gherkinListener.GetResult(); var result = new GherkinFileScopeChange( gherkinFileScope, true, true, gherkinFileScope.GetAllBlocks(), Enumerable.Empty<IGherkinFileBlock>()); stopwatch.Stop(); TraceFinishParse(stopwatch, "full", result); return result; }
private void TraceFinishParse(Stopwatch stopwatch, string parseKind, GherkinFileScopeChange result) { visualStudioTracer.Trace( string.Format("Finished {0} parsing in {1} ms, {2} errors", parseKind, stopwatch.ElapsedMilliseconds, result.GherkinFileScope.TotalErrorCount()), ParserTraceCategory); }
public GherkinFileScopeChange Analyze(GherkinFileScopeChange change) { visualStudioTracer.Trace("Analyzing started", "GherkinScopeAnalyzer"); return change; //TODO }