コード例 #1
0
        private void GetCompleteStatement(
            ITextSnapshot snapshot, SnapshotPoint snapPos, out StringBuilder sbErrors, out ITree treeStmt)
        {
            string sql = snapshot.GetText();

            treeStmt  = null;
            sbErrors  = new StringBuilder();
            _position = snapPos.Position;
            _tokens   = RemoveToken(sql, snapPos);
            if (_tokens.Count == 1 && _tokens.Get(0).Type == MySQL51Lexer.EOF)
            {
                return;
            }
            MySQL51Parser.program_return r =
                LanguageServiceUtil.ParseSql(sql, false, out sbErrors, _tokens);
            if (r == null)
            {
                return;
            }
            ITree t = r.Tree as ITree;

            treeStmt = t;
            // locate current statement's AST
            if (t.IsNil)
            {
                ITree tmp = FindStmt(t);
                if (tmp != null)
                {
                    treeStmt = tmp;
                }
            }
        }
コード例 #2
0
        void ReParse()
        {
            ITextSnapshot newSnapshot = buffer.CurrentSnapshot;
            List <Region> newRegions  = new List <Region>();

            string        sql = newSnapshot.GetText();
            StringBuilder sb  = new StringBuilder();

            MySQL51Parser.statement_list_return r = LanguageServiceUtil.ParseSql(sql, false, out sb);

            if (sb.Length != 0)
            {
                return;
            }

            CommonTree ct = (CommonTree)r.Tree;

            foreach (ITree c in ct.Children)
            {
                newRegions.Add(new Region()
                {
                    Level         = 1,
                    StartLine     = c.Line,
                    StartOffset   = c.TokenStartIndex,
                    EndLine       = -1,
                    EndOffset     = c.TokenStopIndex,
                    PartialParent = null
                });
            }

            ITextSnapshot snap = this.snapshot;

            if (this.TagsChanged != null)
            {
                this.TagsChanged(this, new SnapshotSpanEventArgs(
                                     new SnapshotSpan(this.snapshot, Span.FromBounds(0, snap.Length))));
            }
        }