52 lines
1.5 KiB
C++
52 lines
1.5 KiB
C++
#pragma once
|
||
|
||
#include <QObject>
|
||
#include <QString>
|
||
#include <QHash>
|
||
|
||
class CodeEditor;
|
||
class SignatureTooltip;
|
||
|
||
// ---------------------------------------------------------------------------
|
||
// SignatureHelper – Lädt die PHP-Funktionsdatenbank und zeigt beim Tippen
|
||
// automatisch die passende Funktionssignatur als Tooltip.
|
||
//
|
||
// Logik:
|
||
// • Bei jedem Tastendruck: Text links vom Cursor analysieren
|
||
// • Wenn "funktionsname(" erkannt wird → Tooltip anzeigen
|
||
// • Wenn ")" die öffnende Klammer schließt → Tooltip verstecken
|
||
// • Wenn Cursor sich weg bewegt → Tooltip verstecken
|
||
// ---------------------------------------------------------------------------
|
||
class SignatureHelper : public QObject
|
||
{
|
||
Q_OBJECT
|
||
|
||
public:
|
||
explicit SignatureHelper(CodeEditor *editor);
|
||
|
||
private slots:
|
||
void onCursorPositionChanged();
|
||
|
||
private:
|
||
struct FunctionInfo
|
||
{
|
||
QString signature;
|
||
QString description;
|
||
};
|
||
|
||
void loadDatabase();
|
||
void loadProjectFunctions();
|
||
|
||
// Extrahiert den Funktionsnamen direkt links vor dem letzten '('
|
||
// Gibt leeren String zurück wenn kein Kontext gefunden
|
||
QString extractFunctionName(const QString &textUpToCursor) const;
|
||
|
||
// Zählt offene Klammern — bei 0 ist der Aufruf abgeschlossen
|
||
int countOpenParens(const QString &textUpToCursor) const;
|
||
|
||
CodeEditor *m_editor = nullptr;
|
||
SignatureTooltip *m_tooltip = nullptr;
|
||
|
||
QHash<QString, FunctionInfo> m_functions; // name → info
|
||
};
|