示例#1
0
        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");
            }
        }