blob: 76f0b8122cb92e6c5482299554f6c584ca3368d5 [file]
// Copyright 2026 The GN 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_EDIT_SUBCOMMANDS_H_
#define TOOLS_GN_EDIT_SUBCOMMANDS_H_
#include <functional>
#include <set>
#include <string>
#include <vector>
#include "gn/err.h"
#include "gn/label.h"
class BuildFile;
struct EditState {
explicit EditState(std::string context) : context(std::move(context)) {}
EditState() = default;
EditState(std::set<Label> review,
std::vector<Err> warn = {},
std::set<Label> needs_fix_deps = {})
: needs_manual_review(std::move(review)),
warnings(std::move(warn)),
needs_fix_deps(std::move(needs_fix_deps)) {}
// When something needs manual review, gn will output
// "# TODO(gn edit: <context>)"
std::string context;
// Each label in this list needs manual review. # TODO(gn edit) comments
// will have been added to the build file to give the user more precise
// instructions.
std::set<Label> needs_manual_review;
// Extra information the user should be wary of. For example, if the user
// runs: `gn edit "remove deps //bar" //foo`, but //bar was not a dependency
// of //foo.
std::vector<Err> warnings;
// Targets that have had dependencies stripped and need dependency resolution
// via `gn check <out_dir> --fix`.
std::set<Label> needs_fix_deps;
};
// EditCommand is a function that modifies a build file.
using EditCommand = std::function<Err(BuildFile& build_file, EditState& state)>;
// Parses a command such as ["set", "testonly", "true"] into an EditCommand.
Result<EditCommand> ParseCommand(std::vector<std::string> args);
#endif // TOOLS_GN_EDIT_SUBCOMMANDS_H_