From f1a8b66d7d67a17c11c6a3fc7c5cf4abbda0ff17 Mon Sep 17 00:00:00 2001 From: cxl Date: Mon, 21 Jul 2014 17:17:32 +0000 Subject: [PATCH] ide: Jump to definition improved #802 git-svn-id: svn://ultimatepp.org/upp/trunk@7525 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/CodeEditor/FindReplace.cpp | 2 ++ uppsrc/ide/Assist.cpp | 26 ++++++++++++++++++++++++++ uppsrc/ide/icon.ico | Bin 2862 -> 2862 bytes uppsrc/ide/ide.h | 1 + 4 files changed, 29 insertions(+) diff --git a/uppsrc/CodeEditor/FindReplace.cpp b/uppsrc/CodeEditor/FindReplace.cpp index 3c0e502af..5d3b69772 100644 --- a/uppsrc/CodeEditor/FindReplace.cpp +++ b/uppsrc/CodeEditor/FindReplace.cpp @@ -514,6 +514,8 @@ int CodeEditor::BlockReplace() void CodeEditor::OpenNormalFindReplace0(bool replace) { + if(GetLength() > 1000000) + findreplace.incremental <<= false; findreplace.Setup(replace); findreplace.find.SetFocus(); findreplace.itext = GetI(); diff --git a/uppsrc/ide/Assist.cpp b/uppsrc/ide/Assist.cpp index 130c7c8a9..a3520e1b0 100644 --- a/uppsrc/ide/Assist.cpp +++ b/uppsrc/ide/Assist.cpp @@ -1067,6 +1067,30 @@ bool IsPendif(const String& l) return l.Find("#endif") >= 0; } +void Ide::FindId(const String& id) +{ + int pos = editor.GetCursor(); + int h = min(editor.GetLength(), pos + 4000); + for(;;) { + if(pos >= h || findarg(editor[pos], ';', '{', '}') >= 0) + break; + if(iscib(editor[pos])) { + int p0 = pos; + String tid; + while(pos < h && iscid(editor[pos])) { + tid.Cat(editor[pos]); + pos++; + } + if(tid == id) { + editor.SetCursor(p0); + return; + } + } + else + pos++; + } +} + void Ide::ContextGoto0(int pos) { if(designer) @@ -1174,6 +1198,7 @@ void Ide::ContextGoto0(int pos) if(q >= 0) { AddHistory(); editor.SetCursor(editor.GetPos(parser.local[q].line - 1)); + FindId(id); return; } } @@ -1218,6 +1243,7 @@ void Ide::ContextGoto0(int pos) for(int i = 0; i < n.GetCount(); i++) { if(n[i].IsType() == istype && n[i].name == id) { JumpToDefinition(n, i, scope[j]); + FindId(id); return; } } diff --git a/uppsrc/ide/icon.ico b/uppsrc/ide/icon.ico index ed674dab4681e8f6a8a54a9f03063eb6fa681734..42fe9074dc7d523b005b236290ec9cd7a64b5088 100644 GIT binary patch literal 2862 zcmcguOKam+6#o1+SxuK+Rd~}3gM*!vWEv9~KV(-#eh}FX3Zx=i{ zpYaX{``*1RLKZv-VNb^LYRMtar-;Mt!;AAo4&^)6W%I)7fK7 zD4x#vAfB>B9hA71!@dLd@45Uok{CqpqxdDCqsz8-2VMM@9FGLn>2_?%7 z?RdUI=H+^yfEOgoe7g^fweh^?_QtE+UN1GyUm5Mk+@ToF1xdm0Ji&%iVl5gVV#~B*TnTWx=XUFFFo>v;?YCXNW(?Pc)qIGV(h z!!VO4TZ4Hy!aypb-y1_O8>DHBi;0B7Df#CHy5=?IU12Y+BWDb$HwyAWQ|HP!LW z&hTk70$M?9|m))C}c<$BJG%#)Vp-rYRObMyI6!c~Xx@y>Gul2-x zry5SFj&ss!UQ>Usj*w>FH}+j_XzLqPZ*!v_;|;xQ&hMtBB7e%dQ*<}}U+lWiKj{?a z^sap;HXi=^7Jt65*XxUE$$N-nsjNpT6;5`}7a&zdqgo literal 2862 zcmcguy^hmB5FVe6&r5ZbRGhBi%1A*-bS~fpkW!{XLOcPqktm=;5ONncJc|n&dL9SK z%r~>MyIv(Ax_gv?&&u`C@p-JWu9xe$V{Dvm1|32wvRx2)vN^dYuEXibpQYChc7JzGs~k&O>eF zh;ivrj znzMnq@~@I5GgoKHByJ@fk-2k@3l=3x}0T#}c*!0~^0%p>-E z==`)U?roltBjzN=Zjj0R{pirX?}J}6|7`;*Zcc*Nr%%t*IbyFqa>;Dt$+{cOibLU> z7#^`i6}5MD$4On5p|C6pSJ$OuBhs|3Th_H}y^r8>S!>d{lEuxIOKcERe>V2p+062S zYulOO9r!C&;}^e5{HAebRk1F-*I2iU?+etkeI@qu`sMZoGV5npGr8-W F{sOt@+Oq%v diff --git a/uppsrc/ide/ide.h b/uppsrc/ide/ide.h index b3ba8992c..b8e4f6a93 100644 --- a/uppsrc/ide/ide.h +++ b/uppsrc/ide/ide.h @@ -984,6 +984,7 @@ public: void ScanFile(); bool SwapSIf(const char *cref); void SwapS(); + void FindId(const String& id); void ContextGoto0(int pos); void ContextGoto(); void CtrlClick(int pos);