Skip to content

Commit

Permalink
project: support %cu directive and strip -M* options
Browse files Browse the repository at this point in the history
  • Loading branch information
MaskRay committed Jun 28, 2019
1 parent ab4b4ef commit c728fe9
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 8 deletions.
9 changes: 8 additions & 1 deletion src/lsp.hh
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,13 @@ struct ShowMessageParam {
// Used to identify the language at a file level. The ordering is important, as
// a file previously identified as `C`, will be changed to `Cpp` if it
// encounters a c++ declaration.
enum class LanguageId { Unknown = -1, C = 0, Cpp = 1, ObjC = 2, ObjCpp = 3 };
enum class LanguageId {
Unknown = -1,
C = 0,
Cpp = 1,
ObjC = 2,
ObjCpp = 3,
Cuda = 4,
};

} // namespace ccls
22 changes: 15 additions & 7 deletions src/project.cc
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,8 @@ std::pair<LanguageId, bool> lookupExtension(std::string_view filename) {
bool objc = types::isObjC(I);
LanguageId ret;
if (types::isCXX(I))
ret = objc ? LanguageId::ObjCpp : LanguageId::Cpp;
ret = types::isCuda(I) ? LanguageId::Cuda
: objc ? LanguageId::ObjCpp : LanguageId::Cpp;
else if (objc)
ret = LanguageId::ObjC;
else if (I == types::TY_C || I == types::TY_CHeader)
Expand Down Expand Up @@ -83,7 +84,12 @@ struct ProjectProcessor {
LOG_S(WARNING) << toString(glob_or_err.takeError());
}

bool ExcludesArg(StringRef arg) {
bool ExcludesArg(StringRef arg, int &i) {
if (arg.startswith("-M")) {
if (arg == "-MF" || arg == "-MT" || arg == "-MQ")
i++;
return true;
}
return exclude_args.count(arg) || any_of(exclude_globs,
[&](const GlobPattern &glob) { return glob.match(arg); });
}
Expand All @@ -105,6 +111,8 @@ struct ProjectProcessor {
ok |= lang == LanguageId::C && header;
else if (A.consume_front("%cpp "))
ok |= lang == LanguageId::Cpp;
else if (A.consume_front("%cu "))
ok |= lang == LanguageId::Cuda;
else if (A.consume_front("%hpp "))
ok |= lang == LanguageId::Cpp && header;
else if (A.consume_front("%objective-c "))
Expand All @@ -116,7 +124,7 @@ struct ProjectProcessor {
}
if (ok)
args.push_back(A.data());
} else if (!ExcludesArg(A)) {
} else if (!ExcludesArg(A, i)) {
args.push_back(arg);
}
}
Expand Down Expand Up @@ -399,10 +407,10 @@ void Project::LoadDirectory(const std::string &root, Project::Folder &folder) {

std::vector<std::string> args = std::move(Cmd.CommandLine);
entry.args.reserve(args.size());
for (std::string &arg : args) {
DoPathMapping(arg);
if (!proc.ExcludesArg(arg))
entry.args.push_back(Intern(arg));
for (int i = 0; i < args.size(); i++) {
DoPathMapping(args[i]);
if (!proc.ExcludesArg(args[i], i))
entry.args.push_back(Intern(args[i]));
}
entry.compdb_size = entry.args.size();

Expand Down

0 comments on commit c728fe9

Please sign in to comment.