Here is a possible scope optimizer for CC. If anyone has time to test, let me know how well it works.
Index: src/plugins/codecompletion/nativeparser.cpp
===================================================================
--- src/plugins/codecompletion/nativeparser.cpp (revision 8571)
+++ src/plugins/codecompletion/nativeparser.cpp (working copy)
@@ -1826,7 +1826,7 @@
if (blockStart != -1)
{
++blockStart; // skip {
- const int pos = caretPos == -1 ? searchData->control->GetCurrentPos() : caretPos;
+ const int pos = (caretPos == -1 ? searchData->control->GetCurrentPos() : caretPos);
const int line = searchData->control->LineFromPosition(pos);
const int blockEnd = searchData->control->GetLineEndPosition(line);
if (blockEnd < 0 || blockEnd > searchData->control->GetLength())
@@ -1842,7 +1842,29 @@
if (blockStart >= blockEnd)
blockStart = blockEnd;
- wxString buffer = searchData->control->GetTextRange(blockStart, blockEnd);
+ wxString buffer; // = searchData->control->GetTextRange(blockStart, blockEnd);
+ // condense out-of-scope braces {...}
+ int scanPos = blockEnd;
+ for (int i = pos; i > blockStart; --i)
+ {
+ if (searchData->control->GetCharAt(i) != wxT('}'))
+ continue;
+ const int style = searchData->control->GetStyleAt(i);
+ if ( searchData->control->IsString(style)
+ || searchData->control->IsCharacter(style)
+ || searchData->control->IsComment(style))
+ {
+ continue;
+ }
+ const int scopeStart = searchData->control->BraceMatch(i);
+ if (scopeStart < blockStart)
+ break;
+ buffer.Prepend(searchData->control->GetTextRange(i, scanPos));
+ scanPos = scopeStart + 1;
+ i = scopeStart;
+ }
+ buffer.Prepend(searchData->control->GetTextRange(blockStart, scanPos));
+
buffer.Trim();
if ( !buffer.IsEmpty()
&& !m_Parser->ParseBuffer(buffer, false, false, true, searchData->file, m_LastFuncTokenIdx, initLine) )