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; } } }
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)))); } }