|  | // Copyright 2018 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef TOOLS_GN_COMPILE_COMMANDS_WRITER_H_ | 
|  | #define TOOLS_GN_COMPILE_COMMANDS_WRITER_H_ | 
|  |  | 
|  | #include "tools/gn/err.h" | 
|  | #include "tools/gn/target.h" | 
|  |  | 
|  | class Builder; | 
|  | class BuildSettings; | 
|  |  | 
|  | class CompileCommandsWriter { | 
|  | public: | 
|  | // Write compile commands into a json file located by parameter file_name. | 
|  | // | 
|  | // Parameter target_filters should be in "target_name1,target_name2..." | 
|  | // format. If it is not empty, only targets that are reachable from targets | 
|  | // in target_filters are used to generate compile commands. | 
|  | // | 
|  | // Parameter quiet is not used. | 
|  | static bool RunAndWriteFiles(const BuildSettings* build_setting, | 
|  | const Builder& builder, | 
|  | const std::string& file_name, | 
|  | const std::string& target_filters, | 
|  | bool quiet, | 
|  | Err* err); | 
|  | static void RenderJSON(const BuildSettings* build_settings, | 
|  | std::vector<const Target*>& all_targets, | 
|  | std::string* compile_commands); | 
|  | static std::vector<const Target*> FilterTargets( | 
|  | const std::vector<const Target*>& all_targets, | 
|  | const std::set<std::string>& target_filters_set); | 
|  |  | 
|  | private: | 
|  | // This fuction visits the deps graph of a target in a DFS fashion. | 
|  | static void VisitDeps(const Target* target, std::set<const Target*>* visited); | 
|  | }; | 
|  |  | 
|  | #endif  // TOOLS_GN_COMPILE_COMMANDS_WRITER_H_ |