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
|
// Copyright (C) 2011, 2012 Google Inc.
//
// This file is part of ycmd.
//
// ycmd 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 3 of the License, or
// (at your option) any later version.
//
// ycmd is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with ycmd. If not, see <http://www.gnu.org/licenses/>.
#ifndef TRANSLATIONUNIT_H_XQ7I6SVA
#define TRANSLATIONUNIT_H_XQ7I6SVA
#include "Diagnostic.h"
#include "Documentation.h"
#include "Location.h"
#include "UnsavedFile.h"
#include <clang-c/Index.h>
#include <mutex>
#include <string>
#include <vector>
namespace YouCompleteMe {
struct CompletionData;
class TranslationUnit {
public:
// This constructor creates an invalid, sentinel TU. All of it's methods
// return empty vectors, and IsCurrentlyUpdating always returns true so that
// no callers try to rely on the invalid TU.
YCM_EXPORT TranslationUnit();
TranslationUnit( const TranslationUnit& ) = delete;
TranslationUnit& operator=( const TranslationUnit& ) = delete;
YCM_EXPORT TranslationUnit(
const std::string &filename,
const std::vector< UnsavedFile > &unsaved_files,
const std::vector< std::string > &flags,
CXIndex clang_index );
YCM_EXPORT ~TranslationUnit();
void Destroy();
YCM_EXPORT bool IsCurrentlyUpdating() const;
YCM_EXPORT std::vector< Diagnostic > Reparse(
const std::vector< UnsavedFile > &unsaved_files );
YCM_EXPORT std::vector< CompletionData > CandidatesForLocation(
const std::string &filename,
int line,
int column,
const std::vector< UnsavedFile > &unsaved_files );
YCM_EXPORT Location GetDeclarationLocation(
const std::string &filename,
int line,
int column,
const std::vector< UnsavedFile > &unsaved_files,
bool reparse = true );
YCM_EXPORT Location GetDefinitionLocation(
const std::string &filename,
int line,
int column,
const std::vector< UnsavedFile > &unsaved_files,
bool reparse = true );
YCM_EXPORT Location GetDefinitionOrDeclarationLocation(
const std::string &filename,
int line,
int column,
const std::vector< UnsavedFile > &unsaved_files,
bool reparse = true );
YCM_EXPORT std::string GetTypeAtLocation(
const std::string &filename,
int line,
int column,
const std::vector< UnsavedFile > &unsaved_files,
bool reparse = true );
YCM_EXPORT std::string GetEnclosingFunctionAtLocation(
const std::string &filename,
int line,
int column,
const std::vector< UnsavedFile > &unsaved_files,
bool reparse = true );
std::vector< FixIt > GetFixItsForLocationInFile(
const std::string &filename,
int line,
int column,
const std::vector< UnsavedFile > &unsaved_files,
bool reparse = true );
YCM_EXPORT DocumentationData GetDocsForLocation(
const Location &location,
const std::vector< UnsavedFile > &unsaved_files,
bool reparse = true );
bool LocationIsInSystemHeader( const Location &location );
private:
void Reparse( std::vector< CXUnsavedFile > &unsaved_files );
void Reparse( std::vector< CXUnsavedFile > &unsaved_files,
size_t parse_options );
void UpdateLatestDiagnostics();
// These four methods must be called under the clang_access_mutex_ lock.
CXSourceLocation GetSourceLocation( const std::string& filename,
int line,
int column );
CXCursor GetCursor( const std::string& filename, int line, int column );
Location GetDeclarationLocationForCursor( CXCursor cursor );
Location GetDefinitionLocationForCursor( CXCursor cursor );
/////////////////////////////
// PRIVATE MEMBER VARIABLES
/////////////////////////////
std::mutex diagnostics_mutex_;
std::vector< Diagnostic > latest_diagnostics_;
mutable std::mutex clang_access_mutex_;
CXTranslationUnit clang_translation_unit_;
};
} // namespace YouCompleteMe
#endif /* end of include guard: TRANSLATIONUNIT_H_XQ7I6SVA */
|