Avoid #include AST headers in Basic headers

Resolve a layering violation. `DiagnosticBehavior` was used in
`LangOptions`. Introduce a dedicated 'enum' for the possible values.
This commit is contained in:
Rintaro Ishizaki
2024-09-24 13:14:57 -07:00
parent 6e055d3b8f
commit c57025af67
5 changed files with 36 additions and 10 deletions

View File

@@ -1167,11 +1167,14 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args,
if (const Arg *A = Args.getLastArg(OPT_require_explicit_availability_EQ)) {
StringRef diagLevel = A->getValue();
if (diagLevel == "warn") {
Opts.RequireExplicitAvailability = DiagnosticBehavior::Warning;
Opts.RequireExplicitAvailabilityBehavior =
LangOptions::RequireExplicitAvailabilityDiagnosticBehavior::Warning;
} else if (diagLevel == "error") {
Opts.RequireExplicitAvailability = DiagnosticBehavior::Error;
Opts.RequireExplicitAvailabilityBehavior =
LangOptions::RequireExplicitAvailabilityDiagnosticBehavior::Error;
} else if (diagLevel == "ignore") {
Opts.RequireExplicitAvailability = std::nullopt;
Opts.RequireExplicitAvailabilityBehavior =
LangOptions::RequireExplicitAvailabilityDiagnosticBehavior::Ignore;
} else {
Diags.diagnose(SourceLoc(),
diag::error_unknown_require_explicit_availability,
@@ -1180,7 +1183,8 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args,
} else if (Args.getLastArg(OPT_require_explicit_availability,
OPT_require_explicit_availability_target) ||
Opts.LibraryLevel == LibraryLevel::API) {
Opts.RequireExplicitAvailability = DiagnosticBehavior::Warning;
Opts.RequireExplicitAvailabilityBehavior =
LangOptions::RequireExplicitAvailabilityDiagnosticBehavior::Warning;
}
if (const Arg *A = Args.getLastArg(OPT_require_explicit_availability_target)) {