Просмотр исходного кода

HackStudio: Always re-match curlies/parens after a re-highlight

While you are typing in HackStudio, we re-lex the C++ as you type,
so this means we also need to keep re-checking for matching curlies and
parentheses at the cursor.

Fixes #769 (although it's not optional, because it's too cool. :^)
Andreas Kling 5 лет назад
Родитель
Сommit
15fb341eb4
3 измененных файлов с 24 добавлено и 10 удалено
  1. 20 10
      DevTools/HackStudio/Editor.cpp
  2. 3 0
      DevTools/HackStudio/Editor.h
  3. 1 0
      DevTools/HackStudio/main.cpp

+ 20 - 10
DevTools/HackStudio/Editor.cpp

@@ -172,17 +172,8 @@ void Editor::mousemove_event(GMouseEvent& event)
     GApplication::the().hide_tooltip();
 }
 
-void Editor::cursor_did_change()
+void Editor::highlight_matching_curlies_or_parens()
 {
-    if (m_has_brace_buddies) {
-        if (m_brace_buddies[0].index >= 0 && m_brace_buddies[0].index < document().spans().size())
-            document().set_span_at_index(m_brace_buddies[0].index, m_brace_buddies[0].span_backup);
-        if (m_brace_buddies[1].index >= 0 && m_brace_buddies[1].index < document().spans().size())
-            document().set_span_at_index(m_brace_buddies[1].index, m_brace_buddies[1].span_backup);
-        m_has_brace_buddies = false;
-        update();
-    }
-
     enum class Direction {
         Forward,
         Backward,
@@ -254,3 +245,22 @@ void Editor::cursor_did_change()
         }
     }
 }
+
+void Editor::cursor_did_change()
+{
+    if (m_has_brace_buddies) {
+        if (m_brace_buddies[0].index >= 0 && m_brace_buddies[0].index < document().spans().size())
+            document().set_span_at_index(m_brace_buddies[0].index, m_brace_buddies[0].span_backup);
+        if (m_brace_buddies[1].index >= 0 && m_brace_buddies[1].index < document().spans().size())
+            document().set_span_at_index(m_brace_buddies[1].index, m_brace_buddies[1].span_backup);
+        m_has_brace_buddies = false;
+        update();
+    }
+    highlight_matching_curlies_or_parens();
+}
+
+void Editor::notify_did_rehighlight()
+{
+    m_has_brace_buddies = false;
+    highlight_matching_curlies_or_parens();
+}

+ 3 - 0
DevTools/HackStudio/Editor.h

@@ -15,6 +15,8 @@ public:
     EditorWrapper& wrapper();
     const EditorWrapper& wrapper() const;
 
+    void notify_did_rehighlight();
+
 private:
     virtual void focusin_event(CEvent&) override;
     virtual void focusout_event(CEvent&) override;
@@ -23,6 +25,7 @@ private:
     virtual void cursor_did_change() override;
 
     void show_documentation_tooltip_if_available(const String&, const Point& screen_location);
+    void highlight_matching_curlies_or_parens();
 
     explicit Editor(GWidget* parent);
 

+ 1 - 0
DevTools/HackStudio/main.cpp

@@ -488,6 +488,7 @@ static void rehighlight()
         spans.append(span);
     }
     current_editor().document().set_spans(spans);
+    static_cast<Editor&>(current_editor()).notify_did_rehighlight();
     current_editor().update();
 }