Browse Source

Cleanup of Tokens.*.

merge-requests/37/head
eidheim 11 years ago
parent
commit
e845d58531
  1. 4
      src/Diagnostic.cc
  2. 21
      src/Tokens.cc
  3. 6
      src/Tokens.h
  4. 5
      src/TranslationUnit.cc
  5. 3
      src/TranslationUnit.h
  6. 18
      tests/Diagnostics_Test.cc
  7. 2
      tests/SourceLocation_H_Test.cc
  8. 6
      tests/Token_H_Test.cc

4
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);

21
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::Token>& clang::Tokens::tokens() {
return tks;
}
void clang::Tokens::get_token_types(clang::TranslationUnit *tu) {
std::vector<CXCursor> clang_cursors(tks.size());
clang_annotateTokens(tu->tu_, tokens_, tks.size(), clang_cursors.data());
void clang::Tokens::update_types(clang::TranslationUnit *tu) {
std::vector<CXCursor> clang_cursors(size());
clang_annotateTokens(tu->tu_, tokens_, size(), clang_cursors.data());
std::vector<clang::Cursor> 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<tks.size();c++) {
for(int c=0;c<size();c++) {
auto referenced=clang_getCursorReferenced(clang_cursors[c]);
if(!clang_Cursor_isNull(referenced)) {
auto type=clang_getCursorType(referenced);
@ -38,7 +34,8 @@ void clang::Tokens::get_token_types(clang::TranslationUnit *tu) {
std::string spelling=clang_getCString(cxstr);
clang_disposeString(cxstr);
std::string auto_end="";
if(spelling.size()>=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));

6
src/Tokens.h

@ -5,14 +5,12 @@
#include "Token.h"
namespace clang {
class Tokens {
class Tokens : public std::vector<clang::Token> {
public:
Tokens(TranslationUnit *tu, SourceRange *range);
~Tokens();
std::vector<Token>& tokens();
void get_token_types(clang::TranslationUnit *tu);
void update_types(clang::TranslationUnit *tu);
private:
std::vector<clang::Token> tks;
CXToken *tokens_;
unsigned num_tokens_;
TranslationUnit& tu;

5
src/TranslationUnit.cc

@ -90,12 +90,11 @@ unsigned clang::TranslationUnit::DefaultFlags() {
return CXTranslationUnit_CacheCompletionResults | CXTranslationUnit_PrecompiledPreamble | CXTranslationUnit_Incomplete;
}
std::vector<clang::Diagnostic> clang::TranslationUnit::get_diagnostics() {
std::vector<clang::Diagnostic> diagnostics;
void clang::TranslationUnit::update_diagnostics() {
diagnostics.clear();
for(unsigned c=0;c<clang_getNumDiagnostics(tu_);c++) {
CXDiagnostic clang_diagnostic=clang_getDiagnostic(tu_, c);
diagnostics.emplace_back(clang::Diagnostic(*this, clang_diagnostic));
clang_disposeDiagnostic(clang_diagnostic);
}
return diagnostics;
}

3
src/TranslationUnit.h

@ -36,8 +36,9 @@ namespace clang {
&buffers,
unsigned flags=DefaultFlags());
static unsigned DefaultFlags();
std::vector<clang::Diagnostic> get_diagnostics();
void update_diagnostics();
std::vector<clang::Diagnostic> diagnostics;
private:
friend Token;
friend Tokens;

18
tests/Diagnostics_Test.cc

@ -20,13 +20,13 @@ BOOST_AUTO_TEST_CASE(diagnostics_test) {
std::vector<std::string> 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);
}

2
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;

6
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");
}

Loading…
Cancel
Save