private static void DoParse() { try { if (OnStart != null) { OnStart(); } DoInLock(() => { // make sure to always parse the current file Parse.Parser parser = null; do { _lastFilePathParsed = Npp.CurrentFileInfo.Path; if (Npp.CurrentFileInfo.IsProgress) { parser = new Parse.Parser(Sci.Text, _lastFilePathParsed, null, true); // visitor var visitor = new ParserVisitor(true); parser.Accept(visitor); // send completionItems if (OnEndSendCompletionItems != null) { OnEndSendCompletionItems(visitor.ParsedCompletionItemsList); } // send codeExplorerItems if (OnEndSendCodeExplorerItems != null) { OnEndSendCodeExplorerItems(visitor.ParsedExplorerItemsList); } } else { var textLexer = new TextTokenizer(Sci.GetTextAroundFirstVisibleLine(Config.Instance.NppAutoCompleteMaxLengthToParse), AutoCompletion.CurrentLangAdditionalChars); var textVisitor = new TextTokenizerVisitor(_lastFilePathParsed) { IgnoreNumbers = Config.Instance.NppAutoCompleteIgnoreNumbers, MinWordLengthRequired = Config.Instance.NppAutoCompleteMinWordLengthRequired, KnownWords = KnownWords != null ? new HashSet <string>(KnownWords, AutoCompletion.ParserStringComparer) : new HashSet <string>(AutoCompletion.ParserStringComparer) }; textLexer.Accept(textVisitor); // send completionItems if (OnEndSendCompletionItems != null) { OnEndSendCompletionItems(textVisitor.ParsedCompletionItemsList); } // send codeExplorerItems if (OnEndSendCodeExplorerItems != null) { OnEndSendCodeExplorerItems(null); } } } while (!_lastFilePathParsed.Equals(Npp.CurrentFileInfo.Path)); if (parser != null) { _lineInfo = new Dictionary <int, ParsedLineInfo>(parser.LineInfo); } // send parserItems if (OnEndSendParserItems != null) { if (parser != null) { OnEndSendParserItems(parser.ParserErrors, parser.LineInfo, parser.ParsedItemsList); } else { OnEndSendParserItems(null, null, null); } } }); if (OnEnd != null) { OnEnd(); } } catch (Exception e) { ErrorHandler.ShowErrors(e, "Error while analyzing the current document"); } }