MCPcopy Create free account
hub / github.com/MaskRay/ccls / process

Method process

src/project.cc:98–131  ·  view source on GitHub ↗

Expand %c %cpp ... in .ccls

Source from the content-addressed store, hash-verified

96
97 // Expand %c %cpp ... in .ccls
98 void process(Project::Entry &entry) {
99 std::vector<const char *> args(entry.args.begin(), entry.args.begin() + entry.compdb_size);
100 auto [lang, header] = lookupExtension(entry.filename);
101 for (int i = entry.compdb_size; i < entry.args.size(); i++) {
102 const char *arg = entry.args[i];
103 StringRef a(arg);
104 if (a[0] == '%') {
105 bool ok = false;
106 for (;;) {
107 if (a.consume_front("%c "))
108 ok |= lang == LanguageId::C;
109 else if (a.consume_front("%h "))
110 ok |= lang == LanguageId::C && header;
111 else if (a.consume_front("%cpp "))
112 ok |= lang == LanguageId::Cpp;
113 else if (a.consume_front("%cu "))
114 ok |= lang == LanguageId::Cuda;
115 else if (a.consume_front("%hpp "))
116 ok |= lang == LanguageId::Cpp && header;
117 else if (a.consume_front("%objective-c "))
118 ok |= lang == LanguageId::ObjC;
119 else if (a.consume_front("%objective-cpp "))
120 ok |= lang == LanguageId::ObjCpp;
121 else
122 break;
123 }
124 if (ok)
125 args.push_back(a.data());
126 } else if (!excludesArg(a, i)) {
127 args.push_back(arg);
128 }
129 }
130 entry.args = args;
131 }
132};
133
134std::vector<const char *> readCompilerArgumentsFromFile(const std::string &path) {

Callers 2

loadDirectoryListingFunction · 0.80
findEntryMethod · 0.80

Calls 3

lookupExtensionFunction · 0.85
beginMethod · 0.80
sizeMethod · 0.45

Tested by

no test coverage detected