File: php_code_completion.h

package info (click to toggle)
codelite 17.0.0%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 136,244 kB
  • sloc: cpp: 491,547; ansic: 280,393; php: 10,259; sh: 8,930; lisp: 7,664; vhdl: 6,518; python: 6,020; lex: 4,920; yacc: 3,123; perl: 2,385; javascript: 1,715; cs: 1,193; xml: 1,110; makefile: 804; cobol: 741; sql: 709; ruby: 620; f90: 566; ada: 534; asm: 464; fortran: 350; objc: 289; tcl: 258; java: 157; erlang: 61; pascal: 51; ml: 49; awk: 44; haskell: 36
file content (175 lines) | stat: -rw-r--r-- 6,083 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//
// Copyright            : (C) 2015 Eran Ifrah
// File name            : php_code_completion.h
//
// -------------------------------------------------------------------------
// A
//              _____           _      _     _ _
//             /  __ \         | |    | |   (_) |
//             | /  \/ ___   __| | ___| |    _| |_ ___
//             | |    / _ \ / _  |/ _ \ |   | | __/ _ )
//             | \__/\ (_) | (_| |  __/ |___| | ||  __/
//              \____/\___/ \__,_|\___\_____/_|\__\___|
//
//                                                  F i l e
//
//    This program is free software; you can redistribute it and/or modify
//    it under the terms of the GNU General Public License as published by
//    the Free Software Foundation; either version 2 of the License, or
//    (at your option) any later version.
//
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////

#ifndef PHPCODECOMPLETION_H
#define PHPCODECOMPLETION_H

#include "PHPEntityBase.h"
#include "PHPExpression.h"
#include "PHPLookupTable.h"
#include "ServiceProvider.h"
#include "cl_command_event.h"
#include "ieditor.h"
#include "php_event.h"
#include "precompiled_header.h"
#include "wxStringHash.h"
#include <cc_box_tip_window.h>
#include <cl_command_event.h>
#include <smart_ptr.h>
#include <vector>

struct PHPLocation {
    wxString what;     // Token name
    wxString filename; // file name (absolute path)
    int linenumber;    // line number within filename
    PHPEntityBase::Ptr_t entity;
    typedef SmartPtr<PHPLocation> Ptr_t;
};

class IManager;
struct ResourceItem;
class PHPCodeCompletion : public ServiceProvider
{
public:
    enum {
        kCC_FUNCTIONS_ONLY = 0x00000001,
        kCC_SELF_FUNCTIONS = 0x00000002, // self::
        kCC_SELF_MEMBERS = 0x00000004,   // self::
        kCC_STATIC = 0x00000008,         // static::
        kCC_SELF = kCC_SELF_FUNCTIONS | kCC_SELF_MEMBERS,
    };

    static PHPCodeCompletion* Instance();
    static void Release();

protected:
    static PHPCodeCompletion* m_instance;
    IManager* m_manager;
    CCBoxTipWindow* m_typeInfoTooltip;
    PHPLookupTable m_lookupTable;
    std::unordered_map<wxString, PHPEntityBase::Ptr_t> m_currentNavBarFunctions;

    static bool CanCodeComplete(clCodeCompletionEvent& e, IEditor* editor);
    void DoShowCompletionBox(const PHPEntityBase::List_t& entries, PHPExpression::Ptr_t expr);
    IEditor* GetEditor(const wxString& filepath) const;

protected:
    /**
     * @brief convert PHP's entity to CodeLite's TagEntry class
     * This is needed mainly for display purposes (CodeLite's API requires
     * TagEntry for display)
     * This function never fails.
     */
    TagEntryPtr DoPHPEntityToTagEntry(PHPEntityBase::Ptr_t entry);
    PHPEntityBase::Ptr_t DoGetPHPEntryUnderTheAtPos(IEditor* editor, int pos, bool forFunctionCalltip);
    PHPEntityBase::List_t PhpKeywords(const wxString& prefix) const;

private:
    PHPCodeCompletion();
    virtual ~PHPCodeCompletion();

    // Event handlers
    void OnCodeComplete(clCodeCompletionEvent& e);
    void OnCodeCompleteLangKeywords(clCodeCompletionEvent& e);
    void OnFunctionCallTip(clCodeCompletionEvent& e);
    void OnTypeinfoTip(clCodeCompletionEvent& e);
    void OnCodeCompletionBoxDismissed(clCodeCompletionEvent& e);
    void OnFindSymbol(clCodeCompletionEvent& e);
    void OnQuickJump(clCodeCompletionEvent& e);
    void OnInsertDoxyBlock(clCodeCompletionEvent& e);
    void OnRetagWorkspace(wxCommandEvent& event);
    void OnParseEnded(clParseEvent& event);
    void OnActiveEditorChanged(wxCommandEvent& e);

    // Workspace events
    void OnFileSaved(clCommandEvent& event);
    void DoSelectInEditor(IEditor* editor, const wxString& what, int from);

    void DoOpenEditorForEntry(PHPEntityBase::Ptr_t entry);

public:
    /**
     * @brief go to the definition of the word starting at pos
     * @param editor
     * @param pos
     */
    void GotoDefinition(IEditor* editor, int pos);

    void SetManager(IManager* manager) { this->m_manager = manager; }
    /**
     * @brief return a PHPLocation::Ptr_t for the declaration of the
     * expression in the given editor / position
     * @return a valid PHPLocation or NULL
     */
    PHPLocation::Ptr_t FindDefinition(IEditor* editor, int pos);

    /**
     * @brief return the PHPEntity under the caret
     */
    PHPEntityBase::Ptr_t GetPHPEntityAtPos(IEditor* editor, int pos);

    /**
     * @brief open the symbols database for the given workspace file.
     * Close any opened database
     */
    void Open(const wxFileName& workspaceFile);

    /**
     * @brief close the lookup database
     */
    void Close();

    /**
     * @brief called by the PHP symbols cache job.
     * This is to optimize the searching the database (loading the symbols into the
     * memory forces a kernel caching)
     */
    void OnSymbolsCached();

    /**
     * @brief same as the above function, but the caching went bad...
     */
    void OnSymbolsCacheError();
    /**
     * @brief expand 'require_once' line (or any require) by replacing __file__ etc with the proper
     * values and appending everything
     */
    wxString ExpandRequire(const wxFileName& curfile, const wxString& require);

    /**
     * @brief return the best location for inserting generated code inside a class name
     * @param filecontent
     * @return wxNOT_FOUND when could not determine the location
     */
    int GetLocationForSettersGetters(const wxString& filecontent, const wxString& classname);

    /**
     * @brief list members of a class defined in an editor at the current position
     * This only returns member variables (i.e. no constants, nor static members)
     */
    void GetMembers(IEditor* editor, PHPEntityBase::List_t& members, wxString& scope);
};

#endif // PHPCODECOMPLETION_H