124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- CommandCompletions.h ------------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef lldb_CommandCompletions_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define lldb_CommandCompletions_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes
1549ce8969d3154e1560106cfe530444c09410f217Greg Clayton#include <set>
1649ce8969d3154e1560106cfe530444c09410f217Greg Clayton
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-private.h"
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/SearchFilter.h"
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/FileSpecList.h"
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/RegularExpression.h"
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass CommandCompletions
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //----------------------------------------------------------------------
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // This is the command completion callback that is used to complete the argument of the option
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // it is bound to (in the OptionDefinition table below).  Return the total number of matches.
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //----------------------------------------------------------------------
3463094e0bb161580564954dee512955c1c79d3476Greg Clayton    typedef int (*CompletionCallback) (CommandInterpreter &interpreter,
3563094e0bb161580564954dee512955c1c79d3476Greg Clayton                                       const char *completion_str,          // This is the argument we are completing
3663094e0bb161580564954dee512955c1c79d3476Greg Clayton                                       int match_start_point,               // This is the point in the list of matches that you should start returning elements
3763094e0bb161580564954dee512955c1c79d3476Greg Clayton                                       int max_return_elements,             // This is the number of matches requested.
3863094e0bb161580564954dee512955c1c79d3476Greg Clayton                                       lldb_private::SearchFilter *searcher,// A search filter to limit the search...
39802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham                                       bool &word_complete,
4063094e0bb161580564954dee512955c1c79d3476Greg Clayton                                       lldb_private::StringList &matches);  // The array of matches we return.
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    typedef enum
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
435e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton        eNoCompletion             = 0u,
445e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton        eSourceFileCompletion     = (1u << 0),
455e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton        eDiskFileCompletion       = (1u << 1),
465e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton        eDiskDirectoryCompletion  = (1u << 2),
475e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton        eSymbolCompletion         = (1u << 3),
485e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton        eModuleCompletion         = (1u << 4),
495e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton        eSettingsNameCompletion   = (1u << 5),
505e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton        ePlatformPluginCompletion = (1u << 6),
515e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton        eArchitectureCompletion   = (1u << 7),
52946618a80e17d210e6592e94d10a15ad592572baGreg Clayton        eVariablePathCompletion   = (1u << 8),
535e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton        // This item serves two purposes.  It is the last element in the enum,
545e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton        // so you can add custom enums starting from here in your Option class.
555e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton        // Also if you & in this bit the base code will not process the option.
56946618a80e17d210e6592e94d10a15ad592572baGreg Clayton        eCustomCompletion         = (1u << 9)
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    } CommonCompletionTypes;
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    struct CommonCompletionElement
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
6254e7afa84d945f9137f9372ecde432f9e1a702fcGreg Clayton        uint32_t type;
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        CompletionCallback callback;
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    };
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6663094e0bb161580564954dee512955c1c79d3476Greg Clayton    static bool InvokeCommonCompletionCallbacks (CommandInterpreter &interpreter,
6763094e0bb161580564954dee512955c1c79d3476Greg Clayton                                                 uint32_t completion_mask,
6863094e0bb161580564954dee512955c1c79d3476Greg Clayton                                                 const char *completion_str,
6963094e0bb161580564954dee512955c1c79d3476Greg Clayton                                                 int match_start_point,
7063094e0bb161580564954dee512955c1c79d3476Greg Clayton                                                 int max_return_elements,
7163094e0bb161580564954dee512955c1c79d3476Greg Clayton                                                 SearchFilter *searcher,
72802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham                                                 bool &word_complete,
7363094e0bb161580564954dee512955c1c79d3476Greg Clayton                                                 StringList &matches);
7463094e0bb161580564954dee512955c1c79d3476Greg Clayton
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //----------------------------------------------------------------------
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // These are the generic completer functions:
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //----------------------------------------------------------------------
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static int
79802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham    DiskFiles (CommandInterpreter &interpreter,
8073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton               const char *partial_file_name,
8173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton               int match_start_point,
8273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton               int max_return_elements,
8373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton               SearchFilter *searcher,
8473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton               bool &word_complete,
8573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton               StringList &matches);
86802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham    static int
87802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham    DiskDirectories (CommandInterpreter &interpreter,
8873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                     const char *partial_file_name,
8973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                     int match_start_point,
9073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                     int max_return_elements,
9173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                     SearchFilter *searcher,
9273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                     bool &word_complete,
9373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton                     StringList &matches);
94802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham
95802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham    static int
9663094e0bb161580564954dee512955c1c79d3476Greg Clayton    SourceFiles (CommandInterpreter &interpreter,
9763094e0bb161580564954dee512955c1c79d3476Greg Clayton                 const char *partial_file_name,
9863094e0bb161580564954dee512955c1c79d3476Greg Clayton                 int match_start_point,
9963094e0bb161580564954dee512955c1c79d3476Greg Clayton                 int max_return_elements,
10063094e0bb161580564954dee512955c1c79d3476Greg Clayton                 SearchFilter *searcher,
101802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham                 bool &word_complete,
10263094e0bb161580564954dee512955c1c79d3476Greg Clayton                 StringList &matches);
10363094e0bb161580564954dee512955c1c79d3476Greg Clayton
10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static int
10563094e0bb161580564954dee512955c1c79d3476Greg Clayton    Modules (CommandInterpreter &interpreter,
10663094e0bb161580564954dee512955c1c79d3476Greg Clayton             const char *partial_file_name,
10763094e0bb161580564954dee512955c1c79d3476Greg Clayton             int match_start_point,
10863094e0bb161580564954dee512955c1c79d3476Greg Clayton             int max_return_elements,
10963094e0bb161580564954dee512955c1c79d3476Greg Clayton             SearchFilter *searcher,
110802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham             bool &word_complete,
11163094e0bb161580564954dee512955c1c79d3476Greg Clayton             lldb_private::StringList &matches);
11263094e0bb161580564954dee512955c1c79d3476Greg Clayton
11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static int
11463094e0bb161580564954dee512955c1c79d3476Greg Clayton    Symbols (CommandInterpreter &interpreter,
11563094e0bb161580564954dee512955c1c79d3476Greg Clayton             const char *partial_file_name,
11663094e0bb161580564954dee512955c1c79d3476Greg Clayton             int match_start_point,
11763094e0bb161580564954dee512955c1c79d3476Greg Clayton             int max_return_elements,
11863094e0bb161580564954dee512955c1c79d3476Greg Clayton             SearchFilter *searcher,
119802f8b0e11525a61f6becfd3562222b2cfaea965Jim Ingham             bool &word_complete,
12063094e0bb161580564954dee512955c1c79d3476Greg Clayton             lldb_private::StringList &matches);
12163094e0bb161580564954dee512955c1c79d3476Greg Clayton
1226e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice    static int
1236e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice    SettingsNames (CommandInterpreter &interpreter,
1246e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice                   const char *partial_file_name,
1256e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice                   int match_start_point,
1266e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice                   int max_return_elements,
1276e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice                   SearchFilter *searcher,
1286e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice                   bool &word_complete,
1296e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice                   lldb_private::StringList &matches);
1305e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton
1315e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton    static int
1325e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton    PlatformPluginNames (CommandInterpreter &interpreter,
1335e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton                         const char *partial_file_name,
1345e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton                         int match_start_point,
1355e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton                         int max_return_elements,
1365e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton                         SearchFilter *searcher,
1375e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton                         bool &word_complete,
1385e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton                         lldb_private::StringList &matches);
1395e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton
1405e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton
1415e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton    static int
1425e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton    ArchitectureNames (CommandInterpreter &interpreter,
1435e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton                       const char *partial_file_name,
1445e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton                       int match_start_point,
1455e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton                       int max_return_elements,
1465e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton                       SearchFilter *searcher,
1475e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton                       bool &word_complete,
1485e342f50b42b265d8568e1c926328858e74b2c0aGreg Clayton                       lldb_private::StringList &matches);
149946618a80e17d210e6592e94d10a15ad592572baGreg Clayton
150946618a80e17d210e6592e94d10a15ad592572baGreg Clayton    static int
151946618a80e17d210e6592e94d10a15ad592572baGreg Clayton    VariablePath (CommandInterpreter &interpreter,
152946618a80e17d210e6592e94d10a15ad592572baGreg Clayton                  const char *partial_file_name,
153946618a80e17d210e6592e94d10a15ad592572baGreg Clayton                  int match_start_point,
154946618a80e17d210e6592e94d10a15ad592572baGreg Clayton                  int max_return_elements,
155946618a80e17d210e6592e94d10a15ad592572baGreg Clayton                  SearchFilter *searcher,
156946618a80e17d210e6592e94d10a15ad592572baGreg Clayton                  bool &word_complete,
157946618a80e17d210e6592e94d10a15ad592572baGreg Clayton                  lldb_private::StringList &matches);
158946618a80e17d210e6592e94d10a15ad592572baGreg Clayton
15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //----------------------------------------------------------------------
16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // The Completer class is a convenient base class for building searchers
16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // that go along with the SearchFilter passed to the standard Completer
16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // functions.
16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //----------------------------------------------------------------------
16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    class Completer : public Searcher
16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    public:
16763094e0bb161580564954dee512955c1c79d3476Greg Clayton        Completer (CommandInterpreter &interpreter,
16863094e0bb161580564954dee512955c1c79d3476Greg Clayton                   const char *completion_str,
16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                   int match_start_point,
17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                   int max_return_elements,
17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                   StringList &matches);
17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        virtual ~Completer ();
17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        virtual CallbackReturn
17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        SearchCallback (SearchFilter &filter,
17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                        SymbolContext &context,
17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                        Address *addr,
17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                        bool complete) = 0;
18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        virtual Depth
18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        GetDepth () = 0;
18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        virtual size_t
18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        DoCompletion (SearchFilter *filter) = 0;
18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        protected:
18863094e0bb161580564954dee512955c1c79d3476Greg Clayton            CommandInterpreter &m_interpreter;
18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            std::string m_completion_str;
19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            int m_match_start_point;
19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            int m_max_return_elements;
19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            StringList &m_matches;
19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        private:
19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner            DISALLOW_COPY_AND_ASSIGN (Completer);
19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    };
19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //----------------------------------------------------------------------
19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // SouceFileCompleter implements the source file completer
19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //----------------------------------------------------------------------
20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    class SourceFileCompleter : public Completer
20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    public:
20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
20463094e0bb161580564954dee512955c1c79d3476Greg Clayton        SourceFileCompleter (CommandInterpreter &interpreter,
20563094e0bb161580564954dee512955c1c79d3476Greg Clayton                             bool include_support_files,
20663094e0bb161580564954dee512955c1c79d3476Greg Clayton                             const char *completion_str,
20763094e0bb161580564954dee512955c1c79d3476Greg Clayton                             int match_start_point,
20863094e0bb161580564954dee512955c1c79d3476Greg Clayton                             int max_return_elements,
20963094e0bb161580564954dee512955c1c79d3476Greg Clayton                             StringList &matches);
21063094e0bb161580564954dee512955c1c79d3476Greg Clayton
21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        virtual Searcher::Depth GetDepth ();
21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        virtual Searcher::CallbackReturn
21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        SearchCallback (SearchFilter &filter,
21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                        SymbolContext &context,
21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                        Address *addr,
21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                        bool complete);
21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        size_t
22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        DoCompletion (SearchFilter *filter);
22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    private:
22324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        bool m_include_support_files;
22424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        FileSpecList m_matching_files;
22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        const char *m_file_name;
22624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        const char *m_dir_name;
22724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        DISALLOW_COPY_AND_ASSIGN (SourceFileCompleter);
22824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
22924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    };
23024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //----------------------------------------------------------------------
23224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // ModuleCompleter implements the module completer
23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //----------------------------------------------------------------------
23424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    class ModuleCompleter : public Completer
23524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
23624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    public:
23724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
23863094e0bb161580564954dee512955c1c79d3476Greg Clayton        ModuleCompleter (CommandInterpreter &interpreter,
23963094e0bb161580564954dee512955c1c79d3476Greg Clayton                         const char *completion_str,
24063094e0bb161580564954dee512955c1c79d3476Greg Clayton                         int match_start_point,
24163094e0bb161580564954dee512955c1c79d3476Greg Clayton                         int max_return_elements,
24263094e0bb161580564954dee512955c1c79d3476Greg Clayton                         StringList &matches);
24363094e0bb161580564954dee512955c1c79d3476Greg Clayton
24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        virtual Searcher::Depth GetDepth ();
24524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
24624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        virtual Searcher::CallbackReturn
24724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        SearchCallback (SearchFilter &filter,
24824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                        SymbolContext &context,
24924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                        Address *addr,
25024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                        bool complete);
25124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
25224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        size_t
25324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        DoCompletion (SearchFilter *filter);
25424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
25524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    private:
25624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        const char *m_file_name;
25724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        const char *m_dir_name;
25824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        DISALLOW_COPY_AND_ASSIGN (ModuleCompleter);
25924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
26024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    };
26124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
26224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //----------------------------------------------------------------------
26324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // SymbolCompleter implements the symbol completer
26424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //----------------------------------------------------------------------
26524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    class SymbolCompleter : public Completer
26624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
26724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    public:
26824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
26963094e0bb161580564954dee512955c1c79d3476Greg Clayton        SymbolCompleter (CommandInterpreter &interpreter,
27063094e0bb161580564954dee512955c1c79d3476Greg Clayton                         const char *completion_str,
27163094e0bb161580564954dee512955c1c79d3476Greg Clayton                         int match_start_point,
27263094e0bb161580564954dee512955c1c79d3476Greg Clayton                         int max_return_elements,
27363094e0bb161580564954dee512955c1c79d3476Greg Clayton                         StringList &matches);
27463094e0bb161580564954dee512955c1c79d3476Greg Clayton
27524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        virtual Searcher::Depth GetDepth ();
27624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
27724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        virtual Searcher::CallbackReturn
27824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        SearchCallback (SearchFilter &filter,
27924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                        SymbolContext &context,
28024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                        Address *addr,
28124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                        bool complete);
28224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
28324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        size_t
28424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        DoCompletion (SearchFilter *filter);
28524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
28624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    private:
28763094e0bb161580564954dee512955c1c79d3476Greg Clayton//        struct NameCmp {
28863094e0bb161580564954dee512955c1c79d3476Greg Clayton//            bool operator() (const ConstString& lhs, const ConstString& rhs) const
28963094e0bb161580564954dee512955c1c79d3476Greg Clayton//            {
29063094e0bb161580564954dee512955c1c79d3476Greg Clayton//                return lhs < rhs;
29163094e0bb161580564954dee512955c1c79d3476Greg Clayton//            }
29263094e0bb161580564954dee512955c1c79d3476Greg Clayton//        };
29324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
29424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        RegularExpression m_regex;
29563094e0bb161580564954dee512955c1c79d3476Greg Clayton        typedef std::set<ConstString> collection;
29624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        collection m_match_set;
29724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        DISALLOW_COPY_AND_ASSIGN (SymbolCompleter);
29824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
29924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    };
30024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
30124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate:
30224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static CommonCompletionElement g_common_completions[];
30324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
30424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
30524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
30687c871847dba627a07cf6f4ac8cfb4d6722eccb5Eli Friedman} // namespace lldb_private
30724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // lldb_CommandCompletions_h_
308