public void PartialScanning() { var code1 = "/* hello world "; var code2 = " goodbye */"; CollectingErrorSink errorSink = new CollectingErrorSink(true); var scanner = new JSScanner(code1, errorSink, new CodeSettings() { AllowShebangLine = true }); var tokens = scanner.ReadTokens(Int32.MaxValue); VerifyTokens( tokens, new TokenInfo(JSToken.MultipleLineComment, new SourceLocation(0, 1, 1), new SourceLocation(15, 1, 16)) ); scanner.Initialize(code2, scanner.CurrentState, new SourceLocation(code1.Length, 2, 1)); tokens = scanner.ReadTokens(Int32.MaxValue); VerifyTokens( tokens, new TokenInfo(JSToken.MultipleLineComment, new SourceLocation(15, 2, 16), new SourceLocation(28, 2, 29)) ); Assert.IsTrue(scanner.CurrentState.Equals(scanner.CurrentState)); Assert.IsFalse(scanner.CurrentState.Equals(new object())); Assert.AreEqual(scanner.CurrentState.GetHashCode(), 2); }
private static List<TokenWithSpan> ReadTokens(string code, bool collectWarnings, params ErrorInfo[] errors) { CollectingErrorSink errorSink = new CollectingErrorSink(collectWarnings); var scanner = new JSScanner(code, errorSink, new CodeSettings() { AllowShebangLine = true }); var tokens = scanner.ReadTokens(Int32.MaxValue); errorSink.CheckErrors(errors); return tokens; }
private static List<TokenWithSpan> ScanTokens(string code, bool collectWarnings, params ErrorInfo[] errors) { CollectingErrorSink errorSink = new CollectingErrorSink(collectWarnings); var scanner = new JSScanner(code, errorSink, new CodeSettings() { AllowShebangLine = true }); List<TokenWithSpan> tokens = new List<TokenWithSpan>(); for (TokenWithSpan curToken = scanner.ScanNextTokenWithSpan(true); curToken.Token != JSToken.EndOfFile; curToken = scanner.ScanNextTokenWithSpan(true)) { tokens.Add(curToken); } errorSink.CheckErrors(errors); return tokens; }
private void UpdateErrorsAndWarnings( IProjectEntry entry, ITextSnapshot snapshot, CollectingErrorSink errorSink ) { // There are some scenarios during ES6 Mode where a textview is still opened using NodeLS. // In these cases, we do not properly parse ES6 syntax, and therefore do not want to display errors. if (NodejsPackage.Instance.IntellisenseOptionsPage.AnalysisLevel == AnalysisLevel.Preview) { return; } // Update the warn-on-launch state for this entry bool changed = false; lock (_hasParseErrors) { if (errorSink.Errors.Any() ? _hasParseErrors.Add(entry) : _hasParseErrors.Remove(entry)) { changed = true; } } if (changed) { OnShouldWarnOnLaunchChanged(entry); } var f = new TaskProviderItemFactory(snapshot); // Update the parser warnings/errors if (errorSink.Warnings.Any() || errorSink.Errors.Any()) { TaskProvider.ReplaceItems( entry, ParserTaskMoniker, errorSink.Warnings .Where(ShouldIncludeWarning) .Select(er => f.FromParseWarning(er)) .Concat(errorSink.Errors.Select(er => f.FromParseError(er))) .ToList() ); } else { TaskProvider.Clear(entry, ParserTaskMoniker); } #if FALSE // Add a handler for the next complete analysis _unresolvedSquiggles.ListenForNextNewAnalysis(entry as IJsProjectEntry); #endif }
private void ParseNodejsCode(TextReader content, out JsAst ast, out CollectingErrorSink errorSink) { ast = null; errorSink = new CollectingErrorSink(); var parser = CreateParser(content, errorSink); ast = ParseOneFile(ast, parser); }
private void UpdateErrorsAndWarnings( IProjectEntry entry, ITextSnapshot snapshot, CollectingErrorSink errorSink ) { // Update the warn-on-launch state for this entry bool changed = false; lock (_hasParseErrors) { if (errorSink.Errors.Any() ? _hasParseErrors.Add(entry) : _hasParseErrors.Remove(entry)) { changed = true; } } if (changed) { OnShouldWarnOnLaunchChanged(entry); } var f = new TaskProviderItemFactory(snapshot); // Update the parser warnings/errors if (errorSink.Warnings.Any() || errorSink.Errors.Any()) { TaskProvider.ReplaceItems( entry, ParserTaskMoniker, errorSink.Warnings .Where(ShouldIncludeWarning) .Select(er => f.FromParseWarning(er)) .Concat(errorSink.Errors.Select(er => f.FromParseError(er))) .ToList() ); } else { TaskProvider.Clear(entry, ParserTaskMoniker); } #if FALSE // Add a handler for the next complete analysis _unresolvedSquiggles.ListenForNextNewAnalysis(entry as IJsProjectEntry); #endif }