From 22016410174805456ab2d22c9db188263d550462 Mon Sep 17 00:00:00 2001 From: eidheim Date: Sun, 28 Jun 2015 14:04:19 +0200 Subject: [PATCH 01/19] Added llvm version 3.6.1. --- cmake/Modules/FindLibClang.cmake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cmake/Modules/FindLibClang.cmake b/cmake/Modules/FindLibClang.cmake index 8a4ed46..3d15636 100644 --- a/cmake/Modules/FindLibClang.cmake +++ b/cmake/Modules/FindLibClang.cmake @@ -14,7 +14,8 @@ # Known LLVM release numbers. # most recent versions come first -set(LIBCLANG_KNOWN_LLVM_VERSIONS 3.6 +set(LIBCLANG_KNOWN_LLVM_VERSIONS 3.6.1 + 3.6 3.5.1 3.5.0 #Arch Linux 3.5 #LLVM Debian/Ubuntu packages from http://llvm.org/apt/ From f313af410c855bdc253dc612670ac186d1050c23 Mon Sep 17 00:00:00 2001 From: eidheim Date: Mon, 29 Jun 2015 16:15:20 +0200 Subject: [PATCH 02/19] Added diagnostics. --- src/CMakeLists.txt | 1 + src/Diagnostic.h | 20 ++++++++++++++++++++ src/SourceLocation.h | 2 ++ src/TranslationUnit.cc | 35 +++++++++++++++++++++++++++++++++++ src/TranslationUnit.h | 3 +++ src/clangmm.h | 1 + tests/CMakeLists.txt | 3 ++- tests/Diagnostics_Test.cc | 32 ++++++++++++++++++++++++++++++++ 8 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 src/Diagnostic.h create mode 100644 tests/Diagnostics_Test.cc diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6c74fa5..042a89c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -25,6 +25,7 @@ set(header_files Token.h Tokens.h TranslationUnit.h + Diagnostic.h ) set(cc_files CodeCompleteResults.cc diff --git a/src/Diagnostic.h b/src/Diagnostic.h new file mode 100644 index 0000000..75b58a9 --- /dev/null +++ b/src/Diagnostic.h @@ -0,0 +1,20 @@ +#ifndef DIAGNOSTICS_H_ +#define DIAGNOSTICS_H_ +#include "TranslationUnit.h" + +namespace clang { + class Diagnostic { + public: + class LocationData { + public: + unsigned line, column, offset; + }; + + unsigned severity; + std::string spelling; + std::string path; + LocationData start_location, end_location; + }; +} + +#endif // DIAGNOSTICS_H_ \ No newline at end of file diff --git a/src/SourceLocation.h b/src/SourceLocation.h index e6cd3b0..286ddbb 100644 --- a/src/SourceLocation.h +++ b/src/SourceLocation.h @@ -21,6 +21,8 @@ namespace clang { const std::string &filepath, int offset); + SourceLocation(CXSourceLocation location) {location_=location;} + explicit SourceLocation(Cursor *cursor); void get_location_info(std::string* path, diff --git a/src/TranslationUnit.cc b/src/TranslationUnit.cc index a91fa6d..71c535e 100644 --- a/src/TranslationUnit.cc +++ b/src/TranslationUnit.cc @@ -1,4 +1,6 @@ #include "TranslationUnit.h" +#include "SourceLocation.h" +#include "Tokens.h" clang::TranslationUnit:: ~TranslationUnit() { @@ -87,3 +89,36 @@ ReparseTranslationUnit(const std::string &file_path, unsigned clang::TranslationUnit::DefaultFlags() { return CXTranslationUnit_CacheCompletionResults | CXTranslationUnit_PrecompiledPreamble | CXTranslationUnit_Incomplete; } + +std::vector clang::TranslationUnit::get_diagnostics() { + std::vector diagnostics; + for(unsigned c=0;c #include #include "Index.h" +#include "Diagnostic.h" namespace clang { class Token; @@ -34,6 +35,8 @@ namespace clang { &buffers, unsigned flags=DefaultFlags()); static unsigned DefaultFlags(); + std::vector get_diagnostics(); + private: friend Token; friend Tokens; diff --git a/src/clangmm.h b/src/clangmm.h index d5b11c5..3ffe3ae 100644 --- a/src/clangmm.h +++ b/src/clangmm.h @@ -12,4 +12,5 @@ #include "CompletionString.h" #include "Index.h" #include "Cursor.h" +#include "Diagnostic.h" #endif // CLANGMM_H_ diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 01899af..de61c79 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,6 +1,6 @@ set(project_tests ${project_name}_tests) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall") set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_HOME_DIRECTORY}/cmake/Modules/") @@ -23,6 +23,7 @@ add_executable(${project_tests} Cursor_H_Test.cc Token_H_Test.cc SourceLocation_H_Test.cc + Diagnostics_Test.cc ) include_directories(${LIBCLANG_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} "${CMAKE_SOURCE_DIR}/src") diff --git a/tests/Diagnostics_Test.cc b/tests/Diagnostics_Test.cc new file mode 100644 index 0000000..f9e819d --- /dev/null +++ b/tests/Diagnostics_Test.cc @@ -0,0 +1,32 @@ +#include +#include "clangmm.h" +#include +#include + +using namespace std; + +BOOST_AUTO_TEST_CASE(diagnostics_test) { + std::string path("./case/main_error.cpp"); + + clang::Index index(0, 0); + + std::map map_buffers; + ifstream ifs(path, ifstream::in); + stringstream ss; + ss << ifs.rdbuf(); + + map_buffers["./case/main_error.cpp"]=ss.str(); + + std::vector args; + clang::TranslationUnit tu(&index, path, args, map_buffers); + + auto diagnostics=tu.get_diagnostics(); + BOOST_CHECK(diagnostics.size()==1); + BOOST_CHECK(diagnostics[0].spelling=="use of undeclared identifier 'undeclared_variable'"); + BOOST_CHECK(diagnostics[0].path=="./case/main_error.cpp"); + BOOST_CHECK(diagnostics[0].severity==3); + BOOST_CHECK(diagnostics[0].start_location.line==5); + BOOST_CHECK(diagnostics[0].end_location.line==5); + BOOST_CHECK(diagnostics[0].start_location.column==16); + BOOST_CHECK(diagnostics[0].end_location.column==35); +} From af513e95d983789b81e13b097169dd53377b6b70 Mon Sep 17 00:00:00 2001 From: eidheim Date: Mon, 29 Jun 2015 16:16:59 +0200 Subject: [PATCH 03/19] Minor fix. --- src/Diagnostic.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Diagnostic.h b/src/Diagnostic.h index 75b58a9..04660f9 100644 --- a/src/Diagnostic.h +++ b/src/Diagnostic.h @@ -1,5 +1,5 @@ -#ifndef DIAGNOSTICS_H_ -#define DIAGNOSTICS_H_ +#ifndef DIAGNOSTIC_H_ +#define DIAGNOSTIC_H_ #include "TranslationUnit.h" namespace clang { @@ -17,4 +17,4 @@ namespace clang { }; } -#endif // DIAGNOSTICS_H_ \ No newline at end of file +#endif // DIAGNOSTIC_H_ \ No newline at end of file From 7f9f9b8be2a1d611a227cd2d1f3576b990d848c0 Mon Sep 17 00:00:00 2001 From: eidheim Date: Mon, 29 Jun 2015 16:29:56 +0200 Subject: [PATCH 04/19] Forgot main_error.cpp in tests. --- tests/case/main_error.cpp | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tests/case/main_error.cpp diff --git a/tests/case/main_error.cpp b/tests/case/main_error.cpp new file mode 100644 index 0000000..21f9c23 --- /dev/null +++ b/tests/case/main_error.cpp @@ -0,0 +1,7 @@ +#include + +int main(int argc, char *argv[]) { + std::cout << "Hello, World!" << std::endl; + std::cout << undeclared_variable << std::endl; + return 0; +} From 5d6fc5846e5df8aac2a1ba1454bc2f340c577f7f Mon Sep 17 00:00:00 2001 From: eidheim Date: Tue, 30 Jun 2015 21:52:25 +0200 Subject: [PATCH 05/19] Added severity_spelling to clang::Diagnostic. --- src/CMakeLists.txt | 1 + src/Diagnostic.cc | 18 ++++++++++++++++++ src/Diagnostic.h | 5 ++++- src/TranslationUnit.cc | 1 + 4 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 src/Diagnostic.cc diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 042a89c..af536e8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -40,6 +40,7 @@ set(cc_files Token.cc Tokens.cc TranslationUnit.cc + Diagnostic.cc ) add_library(${project_name} SHARED ${header_files} ${cc_files}) diff --git a/src/Diagnostic.cc b/src/Diagnostic.cc new file mode 100644 index 0000000..e0d5ec9 --- /dev/null +++ b/src/Diagnostic.cc @@ -0,0 +1,18 @@ +#include "Diagnostic.h" + +const std::string clang::Diagnostic::get_severity_spelling(unsigned severity) { + switch(severity) { + case 0: + return "Ignored"; + case 1: + return "Note"; + case 2: + return "Warning"; + case 3: + return "Error"; + case 4: + return "Fatal"; + default: + return ""; + } +} \ No newline at end of file diff --git a/src/Diagnostic.h b/src/Diagnostic.h index 04660f9..ce4cf28 100644 --- a/src/Diagnostic.h +++ b/src/Diagnostic.h @@ -1,6 +1,6 @@ #ifndef DIAGNOSTIC_H_ #define DIAGNOSTIC_H_ -#include "TranslationUnit.h" +#include namespace clang { class Diagnostic { @@ -9,8 +9,11 @@ namespace clang { public: unsigned line, column, offset; }; + + static const std::string get_severity_spelling(unsigned severity); unsigned severity; + std::string severity_spelling; std::string spelling; std::string path; LocationData start_location, end_location; diff --git a/src/TranslationUnit.cc b/src/TranslationUnit.cc index 71c535e..63d52e0 100644 --- a/src/TranslationUnit.cc +++ b/src/TranslationUnit.cc @@ -98,6 +98,7 @@ std::vector clang::TranslationUnit::get_diagnostics() { auto& diagnostic=diagnostics.back(); diagnostic.severity=clang_getDiagnosticSeverity(clang_diagnostic); + diagnostic.severity_spelling=clang::Diagnostic::get_severity_spelling(diagnostic.severity); diagnostic.spelling=clang_getCString(clang_getDiagnosticSpelling(clang_diagnostic)); SourceLocation location(clang_getDiagnosticLocation(clang_diagnostic)); std::string path; From 8294a9890522db4110de414a98e0173e352601c2 Mon Sep 17 00:00:00 2001 From: eidheim Date: Wed, 1 Jul 2015 16:12:11 +0200 Subject: [PATCH 06/19] Fixed segmentation fault if file was empty. --- src/SourceLocation.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SourceLocation.cc b/src/SourceLocation.cc index 36564df..c68d32f 100644 --- a/src/SourceLocation.cc +++ b/src/SourceLocation.cc @@ -52,7 +52,7 @@ get_location_info(std::string* path, unsigned *offset) { CXFile file; clang_getExpansionLocation(location_, &file, line, column, offset); - if (path != NULL) { + if (path != NULL && file!=NULL) { path->operator=(((clang_getCString((clang_getFileName(file)))))); } } From 0c0615f9ee0a957c77fc616509c8c92434817dc3 Mon Sep 17 00:00:00 2001 From: eidheim Date: Thu, 2 Jul 2015 09:48:38 +0200 Subject: [PATCH 07/19] Some cleanup. --- src/Diagnostic.cc | 38 +++++++++++++++++++++++++++++++++----- src/Diagnostic.h | 5 +++++ src/SourceRange.cc | 2 -- src/SourceRange.h | 3 ++- src/Tokens.h | 2 +- src/TranslationUnit.cc | 27 +-------------------------- src/TranslationUnit.h | 3 ++- 7 files changed, 44 insertions(+), 36 deletions(-) diff --git a/src/Diagnostic.cc b/src/Diagnostic.cc index e0d5ec9..2167181 100644 --- a/src/Diagnostic.cc +++ b/src/Diagnostic.cc @@ -1,16 +1,44 @@ #include "Diagnostic.h" +#include "SourceLocation.h" +#include "Tokens.h" + +clang::Diagnostic::Diagnostic(clang::TranslationUnit& tu, CXDiagnostic clang_diagnostic) { + severity=clang_getDiagnosticSeverity(clang_diagnostic); + severity_spelling=get_severity_spelling(severity); + spelling=clang_getCString(clang_getDiagnosticSpelling(clang_diagnostic)); + clang::SourceLocation location(clang_getDiagnosticLocation(clang_diagnostic)); + std::string tmp_path; + unsigned line, column, offset; + location.get_location_info(&tmp_path, &line, &column, &offset); + path=tmp_path; + start_location.line=line; + start_location.column=column; + start_location.offset=offset; + + clang::SourceRange range(&location, &location); + clang::Tokens tokens(&tu, &range); + if(tokens.tokens().size()==1) { + auto& token=tokens.tokens()[0]; + clang::SourceRange range=token.get_source_range(&tu); + clang::SourceLocation location(&range, false); + location.get_location_info(NULL, &line, &column, &offset); + end_location.line=line; + end_location.column=column; + end_location.offset=offset; + } +} const std::string clang::Diagnostic::get_severity_spelling(unsigned severity) { switch(severity) { - case 0: + case CXDiagnostic_Ignored: return "Ignored"; - case 1: + case CXDiagnostic_Note: return "Note"; - case 2: + case CXDiagnostic_Warning: return "Warning"; - case 3: + case CXDiagnostic_Error: return "Error"; - case 4: + case CXDiagnostic_Fatal: return "Fatal"; default: return ""; diff --git a/src/Diagnostic.h b/src/Diagnostic.h index ce4cf28..9ac3b2f 100644 --- a/src/Diagnostic.h +++ b/src/Diagnostic.h @@ -1,6 +1,9 @@ #ifndef DIAGNOSTIC_H_ #define DIAGNOSTIC_H_ #include +#include +#include +#include "TranslationUnit.h" namespace clang { class Diagnostic { @@ -10,6 +13,8 @@ namespace clang { unsigned line, column, offset; }; + Diagnostic(clang::TranslationUnit& tu, CXDiagnostic clang_diagnostic); + static const std::string get_severity_spelling(unsigned severity); unsigned severity; diff --git a/src/SourceRange.cc b/src/SourceRange.cc index d6edc89..87581d4 100644 --- a/src/SourceRange.cc +++ b/src/SourceRange.cc @@ -10,8 +10,6 @@ SourceRange(clang::SourceLocation *start, clang::SourceLocation *end) { range_ = clang_getRange(start->location_, end->location_); } -clang::SourceRange::~SourceRange() { } - clang::SourceRange::SourceRange(Cursor *cursor) { range_ = clang_getCursorExtent(cursor->cursor_); } diff --git a/src/SourceRange.h b/src/SourceRange.h index 8cc9afe..d1f772b 100644 --- a/src/SourceRange.h +++ b/src/SourceRange.h @@ -7,16 +7,17 @@ namespace clang { class SourceRange { public: + SourceRange() {} SourceRange(TranslationUnit *tu, Token *token); SourceRange(SourceLocation *start, SourceLocation *end); explicit SourceRange(Cursor *cursor); - ~SourceRange(); private: CXSourceRange range_; friend Tokens; friend SourceLocation; + friend Diagnostic; }; } // namespace clang #endif // SOURCERANGE_H_ diff --git a/src/Tokens.h b/src/Tokens.h index 344b0a0..254b74c 100644 --- a/src/Tokens.h +++ b/src/Tokens.h @@ -10,7 +10,7 @@ namespace clang { Tokens(TranslationUnit *tu, SourceRange *range); ~Tokens(); std::vector& tokens(); - protected: + private: std::vector tks; CXToken *tokens_; unsigned num_tokens_; diff --git a/src/TranslationUnit.cc b/src/TranslationUnit.cc index 63d52e0..e9cac42 100644 --- a/src/TranslationUnit.cc +++ b/src/TranslationUnit.cc @@ -94,32 +94,7 @@ std::vector clang::TranslationUnit::get_diagnostics() { std::vector diagnostics; for(unsigned c=0;c get_diagnostics(); + std::vector get_diagnostics(); private: friend Token; From 30e9f3755aa39ee3791f6eea8f5f3093a2ff026a Mon Sep 17 00:00:00 2001 From: eidheim Date: Fri, 3 Jul 2015 15:26:15 +0200 Subject: [PATCH 08/19] Types are now received, even for auto. Some commented out testing code included, sorry. --- src/Cursor.h | 2 ++ src/Token.h | 2 +- src/Tokens.cc | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/Tokens.h | 1 + 4 files changed, 65 insertions(+), 1 deletion(-) diff --git a/src/Cursor.h b/src/Cursor.h index f7cd903..5740226 100644 --- a/src/Cursor.h +++ b/src/Cursor.h @@ -174,12 +174,14 @@ namespace clang { class Cursor { public: + Cursor() {} Cursor(TranslationUnit *tu, SourceLocation *source_location); const CursorKind kind(); private: CXCursor cursor_; friend SourceRange; friend SourceLocation; + friend Tokens; }; } // namespace clang #endif // CURSOR_H_ diff --git a/src/Token.h b/src/Token.h index 6ff1ffc..5208b6b 100644 --- a/src/Token.h +++ b/src/Token.h @@ -19,7 +19,7 @@ namespace clang { std::string get_token_spelling(TranslationUnit *tu); SourceLocation get_source_location(TranslationUnit *tu); SourceRange get_source_range(TranslationUnit *tu); - + std::string type; private: explicit Token(const CXToken &token); friend SourceRange; diff --git a/src/Tokens.cc b/src/Tokens.cc index 0b709b5..575102a 100644 --- a/src/Tokens.cc +++ b/src/Tokens.cc @@ -1,4 +1,7 @@ #include "Tokens.h" +#include +using namespace std; + clang::Tokens::Tokens(clang::TranslationUnit *tu, clang::SourceRange *range) { clang_tokenize(tu->tu_, range->range_, @@ -19,3 +22,61 @@ clang::Tokens::~Tokens() { std::vector& clang::Tokens::tokens() { return tks; } + +std::vector clang::Tokens::get_token_cursors(clang::TranslationUnit *tu) { + std::vector clang_tokens; + for(auto& token: tks) + clang_tokens.emplace_back(token.token_); + std::vector clang_cursors(clang_tokens.size()); + clang_annotateTokens(tu->tu_, clang_tokens.data(), clang_tokens.size(), &clang_cursors.data()[0]); + + std::vector cursors; + for(auto clang_cursor: clang_cursors) { + cursors.emplace_back(); + cursors.back().cursor_=clang_cursor; + } + + for(int c=0;c& tokens(); + std::vector get_token_cursors(clang::TranslationUnit *tu); private: std::vector tks; CXToken *tokens_; From 4e208526d55d65b65f8ec98f5069f2ad24a35e6d Mon Sep 17 00:00:00 2001 From: eidheim Date: Fri, 3 Jul 2015 16:00:57 +0200 Subject: [PATCH 09/19] Fixed cursor types hopefully. --- src/Tokens.cc | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/Tokens.cc b/src/Tokens.cc index 575102a..11e654d 100644 --- a/src/Tokens.cc +++ b/src/Tokens.cc @@ -39,12 +39,22 @@ std::vector clang::Tokens::get_token_cursors(clang::TranslationUn for(int c=0;c Date: Fri, 3 Jul 2015 16:18:09 +0200 Subject: [PATCH 10/19] Minor fix. --- src/Tokens.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Tokens.cc b/src/Tokens.cc index 11e654d..8d12f27 100644 --- a/src/Tokens.cc +++ b/src/Tokens.cc @@ -42,11 +42,11 @@ std::vector clang::Tokens::get_token_cursors(clang::TranslationUn auto type=clang_getCursorType(referenced); std::string spelling=clang_getCString(clang_getTypeSpelling(type)); std::string auto_end=""; - if(spelling.substr(0, 4)=="auto") { + if(spelling.size()>=4 && spelling.substr(0, 4)=="auto") { auto_end=spelling.substr(4); auto type=clang_getCanonicalType(clang_getCursorType(cursors[c].cursor_)); spelling=clang_getCString(clang_getTypeSpelling(type)); - if(spelling.substr(0, 4)!="auto" && spelling.substr(4)!=auto_end) + if(spelling.size()>=4 && spelling.substr(0, 4)!="auto" && spelling.substr(4)!=auto_end) spelling+=auto_end; } tks[c].type=spelling; From 331dc99b907565db243185418611685e066c666c Mon Sep 17 00:00:00 2001 From: eidheim Date: Fri, 3 Jul 2015 16:55:56 +0200 Subject: [PATCH 11/19] Minor fix, same issue as last commit, hopefully fixed now. --- src/Tokens.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Tokens.cc b/src/Tokens.cc index 8d12f27..85ba9d1 100644 --- a/src/Tokens.cc +++ b/src/Tokens.cc @@ -46,7 +46,7 @@ std::vector clang::Tokens::get_token_cursors(clang::TranslationUn auto_end=spelling.substr(4); auto type=clang_getCanonicalType(clang_getCursorType(cursors[c].cursor_)); spelling=clang_getCString(clang_getTypeSpelling(type)); - if(spelling.size()>=4 && spelling.substr(0, 4)!="auto" && spelling.substr(4)!=auto_end) + if(spelling.find(" ")==std::string::npos) spelling+=auto_end; } tks[c].type=spelling; From ac252c8ef466ee29873aead34cdd3234f480f1ef Mon Sep 17 00:00:00 2001 From: eidheim Date: Fri, 3 Jul 2015 21:57:09 +0200 Subject: [PATCH 12/19] Cleanup. --- src/Diagnostic.cc | 2 +- src/Diagnostic.h | 2 +- src/Token.h | 2 +- src/Tokens.cc | 29 +++++++++++++---------------- src/Tokens.h | 3 ++- src/TranslationUnit.cc | 1 + 6 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/Diagnostic.cc b/src/Diagnostic.cc index 2167181..46693d2 100644 --- a/src/Diagnostic.cc +++ b/src/Diagnostic.cc @@ -2,7 +2,7 @@ #include "SourceLocation.h" #include "Tokens.h" -clang::Diagnostic::Diagnostic(clang::TranslationUnit& tu, CXDiagnostic clang_diagnostic) { +clang::Diagnostic::Diagnostic(clang::TranslationUnit& tu, CXDiagnostic& clang_diagnostic) { severity=clang_getDiagnosticSeverity(clang_diagnostic); severity_spelling=get_severity_spelling(severity); spelling=clang_getCString(clang_getDiagnosticSpelling(clang_diagnostic)); diff --git a/src/Diagnostic.h b/src/Diagnostic.h index 9ac3b2f..c858d33 100644 --- a/src/Diagnostic.h +++ b/src/Diagnostic.h @@ -13,7 +13,7 @@ namespace clang { unsigned line, column, offset; }; - Diagnostic(clang::TranslationUnit& tu, CXDiagnostic clang_diagnostic); + Diagnostic(clang::TranslationUnit& tu, CXDiagnostic& clang_diagnostic); static const std::string get_severity_spelling(unsigned severity); diff --git a/src/Token.h b/src/Token.h index 5208b6b..dd8efe4 100644 --- a/src/Token.h +++ b/src/Token.h @@ -25,7 +25,7 @@ namespace clang { friend SourceRange; friend SourceLocation; friend Tokens; - CXToken token_; + const CXToken& token_; }; } // namespace clang #endif // TOKEN_H_ diff --git a/src/Tokens.cc b/src/Tokens.cc index 85ba9d1..baf70aa 100644 --- a/src/Tokens.cc +++ b/src/Tokens.cc @@ -2,7 +2,7 @@ #include using namespace std; -clang::Tokens::Tokens(clang::TranslationUnit *tu, clang::SourceRange *range) { +clang::Tokens::Tokens(clang::TranslationUnit *tu, clang::SourceRange *range): tu(*tu) { clang_tokenize(tu->tu_, range->range_, &tokens_, @@ -13,22 +13,16 @@ clang::Tokens::Tokens(clang::TranslationUnit *tu, clang::SourceRange *range) { } clang::Tokens::~Tokens() { - // instead of using clang_disposeTokens() the implementation - // of the latter method is just free(token_) the same as - // delete(tokens_) eliminating the need of tu* - delete tokens_; + clang_disposeTokens(tu.tu_, tokens_, tks.size()); } std::vector& clang::Tokens::tokens() { return tks; } -std::vector clang::Tokens::get_token_cursors(clang::TranslationUnit *tu) { - std::vector clang_tokens; - for(auto& token: tks) - clang_tokens.emplace_back(token.token_); - std::vector clang_cursors(clang_tokens.size()); - clang_annotateTokens(tu->tu_, clang_tokens.data(), clang_tokens.size(), &clang_cursors.data()[0]); +void clang::Tokens::get_token_types(clang::TranslationUnit *tu) { + std::vector clang_cursors(tks.size()); + clang_annotateTokens(tu->tu_, tokens_, tks.size(), clang_cursors.data()); std::vector cursors; for(auto clang_cursor: clang_cursors) { @@ -37,15 +31,19 @@ std::vector clang::Tokens::get_token_cursors(clang::TranslationUn } for(int c=0;c=4 && spelling.substr(0, 4)=="auto") { auto_end=spelling.substr(4); - auto type=clang_getCanonicalType(clang_getCursorType(cursors[c].cursor_)); - spelling=clang_getCString(clang_getTypeSpelling(type)); + auto type=clang_getCanonicalType(clang_getCursorType(clang_cursors[c])); + auto cxstr=clang_getTypeSpelling(type); + spelling=clang_getCString(cxstr); + clang_disposeString(cxstr); if(spelling.find(" ")==std::string::npos) spelling+=auto_end; } @@ -88,5 +86,4 @@ std::vector clang::Tokens::get_token_cursors(clang::TranslationUn } }*/ } - return cursors; } \ No newline at end of file diff --git a/src/Tokens.h b/src/Tokens.h index c381fe8..2fc3de8 100644 --- a/src/Tokens.h +++ b/src/Tokens.h @@ -10,11 +10,12 @@ namespace clang { Tokens(TranslationUnit *tu, SourceRange *range); ~Tokens(); std::vector& tokens(); - std::vector get_token_cursors(clang::TranslationUnit *tu); + void get_token_types(clang::TranslationUnit *tu); private: std::vector tks; CXToken *tokens_; unsigned num_tokens_; + TranslationUnit& tu; }; } // namespace clang #endif // TOKENS_H_ diff --git a/src/TranslationUnit.cc b/src/TranslationUnit.cc index e9cac42..1587a6c 100644 --- a/src/TranslationUnit.cc +++ b/src/TranslationUnit.cc @@ -95,6 +95,7 @@ std::vector clang::TranslationUnit::get_diagnostics() { for(unsigned c=0;c Date: Sun, 5 Jul 2015 14:04:07 +0200 Subject: [PATCH 13/19] Cleanup of Tokens.*. --- src/Diagnostic.cc | 4 ++-- src/Tokens.cc | 21 +++++++++------------ src/Tokens.h | 6 ++---- src/TranslationUnit.cc | 5 ++--- src/TranslationUnit.h | 3 ++- tests/Diagnostics_Test.cc | 18 +++++++++--------- tests/SourceLocation_H_Test.cc | 2 +- tests/Token_H_Test.cc | 6 +++--- 8 files changed, 30 insertions(+), 35 deletions(-) diff --git a/src/Diagnostic.cc b/src/Diagnostic.cc index 46693d2..5712527 100644 --- a/src/Diagnostic.cc +++ b/src/Diagnostic.cc @@ -17,8 +17,8 @@ clang::Diagnostic::Diagnostic(clang::TranslationUnit& tu, CXDiagnostic& clang_di clang::SourceRange range(&location, &location); clang::Tokens tokens(&tu, &range); - if(tokens.tokens().size()==1) { - auto& token=tokens.tokens()[0]; + if(tokens.size()==1) { + auto& token=tokens[0]; clang::SourceRange range=token.get_source_range(&tu); clang::SourceLocation location(&range, false); location.get_location_info(NULL, &line, &column, &offset); diff --git a/src/Tokens.cc b/src/Tokens.cc index baf70aa..0975a97 100644 --- a/src/Tokens.cc +++ b/src/Tokens.cc @@ -8,21 +8,17 @@ clang::Tokens::Tokens(clang::TranslationUnit *tu, clang::SourceRange *range): tu &tokens_, &num_tokens_); for (int i = 0; i < num_tokens_; i++) { - tks.push_back(clang::Token(tokens_[i])); + push_back(clang::Token(tokens_[i])); } } clang::Tokens::~Tokens() { - clang_disposeTokens(tu.tu_, tokens_, tks.size()); + clang_disposeTokens(tu.tu_, tokens_, size()); } -std::vector& clang::Tokens::tokens() { - return tks; -} - -void clang::Tokens::get_token_types(clang::TranslationUnit *tu) { - std::vector clang_cursors(tks.size()); - clang_annotateTokens(tu->tu_, tokens_, tks.size(), clang_cursors.data()); +void clang::Tokens::update_types(clang::TranslationUnit *tu) { + std::vector clang_cursors(size()); + clang_annotateTokens(tu->tu_, tokens_, size(), clang_cursors.data()); std::vector cursors; for(auto clang_cursor: clang_cursors) { @@ -30,7 +26,7 @@ void clang::Tokens::get_token_types(clang::TranslationUnit *tu) { cursors.back().cursor_=clang_cursor; } - for(int c=0;c=4 && spelling.substr(0, 4)=="auto") { + //TODO fix const auto + if((spelling.size()>=4 && spelling.substr(0, 4)=="auto")) { auto_end=spelling.substr(4); auto type=clang_getCanonicalType(clang_getCursorType(clang_cursors[c])); auto cxstr=clang_getTypeSpelling(type); @@ -47,7 +44,7 @@ void clang::Tokens::get_token_types(clang::TranslationUnit *tu) { if(spelling.find(" ")==std::string::npos) spelling+=auto_end; } - tks[c].type=spelling; + (*this)[c].type=spelling; //std::cout << clang_getCString(clang_getTypeSpelling(type)) << ": " << type.kind << endl; ////auto cursor=clang_getTypeDeclaration(type); ////tks[c].type=clang_getCString(clang_getCursorSpelling(cursor)); diff --git a/src/Tokens.h b/src/Tokens.h index 2fc3de8..ee3f883 100644 --- a/src/Tokens.h +++ b/src/Tokens.h @@ -5,14 +5,12 @@ #include "Token.h" namespace clang { - class Tokens { + class Tokens : public std::vector { public: Tokens(TranslationUnit *tu, SourceRange *range); ~Tokens(); - std::vector& tokens(); - void get_token_types(clang::TranslationUnit *tu); + void update_types(clang::TranslationUnit *tu); private: - std::vector tks; CXToken *tokens_; unsigned num_tokens_; TranslationUnit& tu; diff --git a/src/TranslationUnit.cc b/src/TranslationUnit.cc index 1587a6c..09a9b67 100644 --- a/src/TranslationUnit.cc +++ b/src/TranslationUnit.cc @@ -90,12 +90,11 @@ unsigned clang::TranslationUnit::DefaultFlags() { return CXTranslationUnit_CacheCompletionResults | CXTranslationUnit_PrecompiledPreamble | CXTranslationUnit_Incomplete; } -std::vector clang::TranslationUnit::get_diagnostics() { - std::vector diagnostics; +void clang::TranslationUnit::update_diagnostics() { + diagnostics.clear(); for(unsigned c=0;c get_diagnostics(); + void update_diagnostics(); + std::vector diagnostics; private: friend Token; friend Tokens; diff --git a/tests/Diagnostics_Test.cc b/tests/Diagnostics_Test.cc index f9e819d..6351552 100644 --- a/tests/Diagnostics_Test.cc +++ b/tests/Diagnostics_Test.cc @@ -20,13 +20,13 @@ BOOST_AUTO_TEST_CASE(diagnostics_test) { std::vector args; clang::TranslationUnit tu(&index, path, args, map_buffers); - auto diagnostics=tu.get_diagnostics(); - BOOST_CHECK(diagnostics.size()==1); - BOOST_CHECK(diagnostics[0].spelling=="use of undeclared identifier 'undeclared_variable'"); - BOOST_CHECK(diagnostics[0].path=="./case/main_error.cpp"); - BOOST_CHECK(diagnostics[0].severity==3); - BOOST_CHECK(diagnostics[0].start_location.line==5); - BOOST_CHECK(diagnostics[0].end_location.line==5); - BOOST_CHECK(diagnostics[0].start_location.column==16); - BOOST_CHECK(diagnostics[0].end_location.column==35); + tu.update_diagnostics(); + BOOST_CHECK(tu.diagnostics.size()==1); + BOOST_CHECK(tu.diagnostics[0].spelling=="use of undeclared identifier 'undeclared_variable'"); + BOOST_CHECK(tu.diagnostics[0].path=="./case/main_error.cpp"); + BOOST_CHECK(tu.diagnostics[0].severity==3); + BOOST_CHECK(tu.diagnostics[0].start_location.line==5); + BOOST_CHECK(tu.diagnostics[0].end_location.line==5); + BOOST_CHECK(tu.diagnostics[0].start_location.column==16); + BOOST_CHECK(tu.diagnostics[0].end_location.column==35); } diff --git a/tests/SourceLocation_H_Test.cc b/tests/SourceLocation_H_Test.cc index 776fcf7..308fe6a 100644 --- a/tests/SourceLocation_H_Test.cc +++ b/tests/SourceLocation_H_Test.cc @@ -13,7 +13,7 @@ BOOST_AUTO_TEST_CASE(source_location) { clang::SourceRange range(&start, &end); clang::Tokens tokens(&tu, &range); - clang::SourceRange token_range = tokens.tokens()[28].get_source_range(&tu); + clang::SourceRange token_range = tokens[28].get_source_range(&tu); unsigned token_start_line, token_start_column, token_start_offset, token_end_line, token_end_column, token_end_offset; diff --git a/tests/Token_H_Test.cc b/tests/Token_H_Test.cc index 0b166e2..8befb20 100644 --- a/tests/Token_H_Test.cc +++ b/tests/Token_H_Test.cc @@ -15,9 +15,9 @@ BOOST_AUTO_TEST_CASE(token) { clang::Tokens tokens(&tu, &range); - BOOST_CHECK(tokens.tokens().size() == 32); - BOOST_CHECK(tokens.tokens()[1].kind() == clang::TokenKind::Token_Identifier); + BOOST_CHECK(tokens.size() == 32); + BOOST_CHECK(tokens[1].kind() == clang::TokenKind::Token_Identifier); - std::string str = tokens.tokens()[28].get_token_spelling(&tu); + std::string str = tokens[28].get_token_spelling(&tu); BOOST_CHECK(str == "return"); } From 794091bd421c9bc101c4940934cd08f8386afefd Mon Sep 17 00:00:00 2001 From: eidheim Date: Sun, 5 Jul 2015 19:35:45 +0200 Subject: [PATCH 14/19] Can now receive brief comments given a cursor/token_id. --- src/CMakeLists.txt | 2 +- src/Tokens.cc | 66 ++++++++++++++++++++++++++++++++++++++++------ src/Tokens.h | 2 ++ 3 files changed, 61 insertions(+), 9 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index af536e8..1a1ae1c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,4 +1,4 @@ -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O3") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O3 -Wall -Wno-reorder") set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_HOME_DIRECTORY}/cmake/Modules/") diff --git a/src/Tokens.cc b/src/Tokens.cc index 0975a97..1b46dbb 100644 --- a/src/Tokens.cc +++ b/src/Tokens.cc @@ -17,16 +17,11 @@ clang::Tokens::~Tokens() { } void clang::Tokens::update_types(clang::TranslationUnit *tu) { - std::vector clang_cursors(size()); + clang_cursors.clear(); + clang_cursors.reserve(size()); clang_annotateTokens(tu->tu_, tokens_, size(), clang_cursors.data()); - std::vector cursors; - for(auto clang_cursor: clang_cursors) { - cursors.emplace_back(); - cursors.back().cursor_=clang_cursor; - } - - for(int c=0;c=2) + break; + for(unsigned c=0;c0) + comment_string.pop_back(); + if(clang_InlineCommandComment_getNumArgs(grandchild_comment)==0) + comment_string+=clang_getCString(cxstr); + clang_disposeString(cxstr); + for(unsigned arg_c=0;arg_c0) + comment_string+=" "; + comment_string+=clang_getCString(cxstr); + clang_disposeString(cxstr); + } + } + } + } + } + /*cout << " " << clang_Comment_getKind(child_comment) << ", children: " << clang_Comment_getNumChildren(child_comment) << endl; + auto cxstr=clang_FullComment_getAsHTML(child_comment); + cout << " " << clang_getCString(cxstr) << endl; + clang_disposeString(cxstr);*/ + } + while(comment_string.size()>0 && (comment_string.back()=='\n' || comment_string.back()==' ')) + comment_string.pop_back(); + } + + return comment_string; } \ No newline at end of file diff --git a/src/Tokens.h b/src/Tokens.h index ee3f883..c15cd25 100644 --- a/src/Tokens.h +++ b/src/Tokens.h @@ -10,9 +10,11 @@ namespace clang { Tokens(TranslationUnit *tu, SourceRange *range); ~Tokens(); void update_types(clang::TranslationUnit *tu); + std::string get_brief_comment(size_t cursor_id); private: CXToken *tokens_; unsigned num_tokens_; + std::vector clang_cursors; TranslationUnit& tu; }; } // namespace clang From eed0d359368e815177961290409428cdb4d43d94 Mon Sep 17 00:00:00 2001 From: eidheim Date: Thu, 9 Jul 2015 15:12:02 +0200 Subject: [PATCH 15/19] Added codecompletion comments, and some cleanup. --- src/CodeCompleteResults.cc | 2 +- src/CodeCompleteResults.h | 1 + src/CompletionString.cc | 10 +++++++ src/CompletionString.h | 1 + src/Tokens.cc | 2 +- src/Tokens.h | 2 +- src/TranslationUnit.cc | 55 +++++++++++++++++++++----------------- src/TranslationUnit.h | 5 ++++ 8 files changed, 51 insertions(+), 27 deletions(-) diff --git a/src/CodeCompleteResults.cc b/src/CodeCompleteResults.cc index bb77346..db4cdb5 100644 --- a/src/CodeCompleteResults.cc +++ b/src/CodeCompleteResults.cc @@ -22,7 +22,7 @@ CodeCompleteResults(clang::TranslationUnit *tu, column, files.data(), files.size(), - clang_defaultCodeCompleteOptions()); + clang_defaultCodeCompleteOptions()|CXCodeComplete_IncludeBriefComments); clang_sortCodeCompletionResults(results_->Results, results_->NumResults); } diff --git a/src/CodeCompleteResults.h b/src/CodeCompleteResults.h index ef05d4c..ff9c43c 100644 --- a/src/CodeCompleteResults.h +++ b/src/CodeCompleteResults.h @@ -13,6 +13,7 @@ namespace clang { const std::map &buffers, int line_num, int column); + ~CodeCompleteResults() {clang_disposeCodeCompleteResults(results_);} CompletionString get(int index); int size(); diff --git a/src/CompletionString.cc b/src/CompletionString.cc index 06bc9cb..9cccaa0 100644 --- a/src/CompletionString.cc +++ b/src/CompletionString.cc @@ -26,6 +26,16 @@ get_chunks() { return res; } +std::string clang::CompletionString::get_brief_comments() { + std::string brief_comments; + auto cxstr=clang_getCompletionBriefComment(str_); + if(cxstr.data!=NULL) { + brief_comments=clang_getCString(cxstr); + clang_disposeString(cxstr); + } + return brief_comments; +} + clang::CompletionChunk:: CompletionChunk(std::string chunk, clang::CompletionChunkKind kind) : chunk_(chunk), kind_(kind) { } diff --git a/src/CompletionString.h b/src/CompletionString.h index 040c87a..34f04b7 100644 --- a/src/CompletionString.h +++ b/src/CompletionString.h @@ -31,6 +31,7 @@ namespace clang { class CompletionString { public: std::vector get_chunks(); + std::string get_brief_comments(); int get_num_chunks(); private: explicit CompletionString(const CXCompletionString &str); diff --git a/src/Tokens.cc b/src/Tokens.cc index 1b46dbb..571d0db 100644 --- a/src/Tokens.cc +++ b/src/Tokens.cc @@ -81,7 +81,7 @@ void clang::Tokens::update_types(clang::TranslationUnit *tu) { } } -std::string clang::Tokens::get_brief_comment(size_t cursor_id) { +std::string clang::Tokens::get_brief_comments(size_t cursor_id) { std::string comment_string; auto referenced=clang_getCursorReferenced(clang_cursors[cursor_id]); auto comment=clang_Cursor_getParsedComment(referenced); diff --git a/src/Tokens.h b/src/Tokens.h index c15cd25..8696337 100644 --- a/src/Tokens.h +++ b/src/Tokens.h @@ -10,7 +10,7 @@ namespace clang { Tokens(TranslationUnit *tu, SourceRange *range); ~Tokens(); void update_types(clang::TranslationUnit *tu); - std::string get_brief_comment(size_t cursor_id); + std::string get_brief_comments(size_t cursor_id); private: CXToken *tokens_; unsigned num_tokens_; diff --git a/src/TranslationUnit.cc b/src/TranslationUnit.cc index 09a9b67..de1c2aa 100644 --- a/src/TranslationUnit.cc +++ b/src/TranslationUnit.cc @@ -1,6 +1,8 @@ #include "TranslationUnit.h" #include "SourceLocation.h" #include "Tokens.h" +#include +#include clang::TranslationUnit:: ~TranslationUnit() { @@ -17,27 +19,24 @@ clang::TranslationUnit:: TranslationUnit(Index *index, const std::string &filepath, const std::vector &command_line_args) { - std::vector args; - for(auto &a: command_line_args) { - args.push_back(a.c_str()); - } - tu_ = clang_createTranslationUnitFromSourceFile(index->index_, - filepath.c_str(), - args.size(), - args.data(), - 0, - NULL); + std::map buffers; + std::ifstream ifs(filepath, std::ifstream::in); + std::stringstream ss; + ss << ifs.rdbuf(); + buffers[filepath]=ss.str(); + parse(index, filepath, command_line_args, buffers); } clang::TranslationUnit:: TranslationUnit(Index *index, const std::string &filepath) { - tu_ = clang_createTranslationUnitFromSourceFile(index->index_, - filepath.c_str(), - 0, - NULL, - 0, - NULL); + std::vector command_line_args; + std::map buffers; + std::ifstream ifs(filepath, std::ifstream::in); + std::stringstream ss; + ss << ifs.rdbuf(); + buffers[filepath]=ss.str(); + parse(index, filepath, command_line_args, buffers); } clang::TranslationUnit:: @@ -46,6 +45,14 @@ TranslationUnit(clang::Index *index, const std::vector &command_line_args, const std::map &buffers, unsigned flags) { + parse(index, filepath, command_line_args, buffers, flags); +} + +void clang::TranslationUnit::parse(Index *index, + const std::string &filepath, + const std::vector &command_line_args, + const std::map &buffers, + unsigned flags) { std::vector files; for (auto &buffer : buffers) { CXUnsavedFile file; @@ -59,13 +66,13 @@ TranslationUnit(clang::Index *index, args.push_back(a.c_str()); } tu_ = - clang_parseTranslationUnit(index->index_, - filepath.c_str(), - args.data(), - args.size(), - files.data(), - files.size(), - flags); + clang_parseTranslationUnit(index->index_, + filepath.c_str(), + args.data(), + args.size(), + files.data(), + files.size(), + flags); } int clang::TranslationUnit:: @@ -87,7 +94,7 @@ ReparseTranslationUnit(const std::string &file_path, } unsigned clang::TranslationUnit::DefaultFlags() { - return CXTranslationUnit_CacheCompletionResults | CXTranslationUnit_PrecompiledPreamble | CXTranslationUnit_Incomplete; + return CXTranslationUnit_CacheCompletionResults | CXTranslationUnit_PrecompiledPreamble | CXTranslationUnit_Incomplete | CXTranslationUnit_IncludeBriefCommentsInCodeCompletion; } void clang::TranslationUnit::update_diagnostics() { diff --git a/src/TranslationUnit.h b/src/TranslationUnit.h index 038093c..b04a93e 100644 --- a/src/TranslationUnit.h +++ b/src/TranslationUnit.h @@ -40,6 +40,11 @@ namespace clang { std::vector diagnostics; private: + void parse(Index *index, + const std::string &filepath, + const std::vector &command_line_args, + const std::map &buffers, + unsigned flags=DefaultFlags()); friend Token; friend Tokens; friend SourceLocation; From 6d31b5de4061c2c2ec59b9063d9b3dcc0070c7bf Mon Sep 17 00:00:00 2001 From: eidheim Date: Thu, 9 Jul 2015 15:23:29 +0200 Subject: [PATCH 16/19] Missing clang_disposeCodeCompleteResults on older versions of libclang. --- src/CodeCompleteResults.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/CodeCompleteResults.h b/src/CodeCompleteResults.h index ff9c43c..dc53e01 100644 --- a/src/CodeCompleteResults.h +++ b/src/CodeCompleteResults.h @@ -13,7 +13,8 @@ namespace clang { const std::map &buffers, int line_num, int column); - ~CodeCompleteResults() {clang_disposeCodeCompleteResults(results_);} + //TODO: Fix this for older versions of libclang + //~CodeCompleteResults() {clang_disposeCodeCompleteResults(results_);} CompletionString get(int index); int size(); From e330f7ea588016a53a03f9637fcf92346447d15b Mon Sep 17 00:00:00 2001 From: eidheim Date: Fri, 10 Jul 2015 12:21:27 +0200 Subject: [PATCH 17/19] Fixed CodeCompleteResults destructor for all libclang versions. --- src/CodeCompleteResults.cc | 5 +++++ src/CodeCompleteResults.h | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/CodeCompleteResults.cc b/src/CodeCompleteResults.cc index db4cdb5..6a281e8 100644 --- a/src/CodeCompleteResults.cc +++ b/src/CodeCompleteResults.cc @@ -26,6 +26,11 @@ CodeCompleteResults(clang::TranslationUnit *tu, clang_sortCodeCompletionResults(results_->Results, results_->NumResults); } +clang::CodeCompleteResults::~CodeCompleteResults() { + delete[] results_->Results; + delete results_; +} + int clang::CodeCompleteResults:: size() { return results_->NumResults; diff --git a/src/CodeCompleteResults.h b/src/CodeCompleteResults.h index dc53e01..e1552a2 100644 --- a/src/CodeCompleteResults.h +++ b/src/CodeCompleteResults.h @@ -14,7 +14,7 @@ namespace clang { int line_num, int column); //TODO: Fix this for older versions of libclang - //~CodeCompleteResults() {clang_disposeCodeCompleteResults(results_);} + ~CodeCompleteResults(); CompletionString get(int index); int size(); From bf38c2ca8d1f51c82bbd2c95c9146d6adfb7a272 Mon Sep 17 00:00:00 2001 From: eidheim Date: Fri, 10 Jul 2015 12:22:24 +0200 Subject: [PATCH 18/19] Removed TODO comment. --- src/CodeCompleteResults.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/CodeCompleteResults.h b/src/CodeCompleteResults.h index e1552a2..8446a74 100644 --- a/src/CodeCompleteResults.h +++ b/src/CodeCompleteResults.h @@ -13,7 +13,6 @@ namespace clang { const std::map &buffers, int line_num, int column); - //TODO: Fix this for older versions of libclang ~CodeCompleteResults(); CompletionString get(int index); int size(); From 918bfab524bd9144f969f8df70226accd55adf44 Mon Sep 17 00:00:00 2001 From: eidheim Date: Fri, 10 Jul 2015 13:35:37 +0200 Subject: [PATCH 19/19] Minor cleanup. --- src/CompletionString.cc | 2 +- src/CompletionString.h | 7 ++----- tests/CodeCompleteResults_H_Test.cc | 2 +- tests/CompletionString_H_Test.cc | 4 ++-- 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/CompletionString.cc b/src/CompletionString.cc index 9cccaa0..07dd5bc 100644 --- a/src/CompletionString.cc +++ b/src/CompletionString.cc @@ -38,4 +38,4 @@ std::string clang::CompletionString::get_brief_comments() { clang::CompletionChunk:: CompletionChunk(std::string chunk, clang::CompletionChunkKind kind) : - chunk_(chunk), kind_(kind) { } + chunk(chunk), kind(kind) { } diff --git a/src/CompletionString.h b/src/CompletionString.h index 34f04b7..0018bc3 100644 --- a/src/CompletionString.h +++ b/src/CompletionString.h @@ -21,11 +21,8 @@ namespace clang { class CompletionChunk { public: CompletionChunk(std::string chunk, CompletionChunkKind kind); - const std::string& chunk() const { return chunk_; } - const CompletionChunkKind& kind() const { return kind_; } - private: - std::string chunk_; - CompletionChunkKind kind_; + std::string chunk; + CompletionChunkKind kind; }; class CompletionString { diff --git a/tests/CodeCompleteResults_H_Test.cc b/tests/CodeCompleteResults_H_Test.cc index 32bcd76..c696727 100644 --- a/tests/CodeCompleteResults_H_Test.cc +++ b/tests/CodeCompleteResults_H_Test.cc @@ -32,7 +32,7 @@ BOOST_AUTO_TEST_CASE(code_complete_results) { bool substr_found=false; for(int c=0;c