Coverage Report

Created: 2026-09-14 06:43

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/CMake/Source/cmCMakePresetsArgs.h
Line
Count
Source
1
/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
2
   file LICENSE.rst or https://cmake.org/licensing for details.  */
3
#pragma once
4
5
#include <string>
6
7
#include <cm/optional>
8
9
#include "cmCMakePresetsGraph.h"
10
11
class cmCMakePresetsArgsBase
12
{
13
public:
14
  using PresetListMode = cmCMakePresetsGraph::PresetListMode;
15
16
35
  virtual ~cmCMakePresetsArgsBase() = default;
17
18
35
  virtual bool HasPresetsArg() const { return !this->PresetName.empty(); };
19
0
  virtual void Clear() { this->PresetName.clear(); }
20
21
  static PresetListMode ParseListPresetsMode(std::string& type)
22
0
  {
23
0
    struct DefinedPresetType
24
0
    {
25
0
      char const* Type;
26
0
      char const* BaseType;
27
0
    };
28
0
    static constexpr DefinedPresetType definedPresetTypes[] = {
29
0
      { "defined", "" },
30
0
      { "configure-defined", "configure" },
31
0
      { "build-defined", "build" },
32
0
      { "test-defined", "test" },
33
0
      { "package-defined", "package" },
34
0
      { "workflow-defined", "workflow" },
35
0
      { "all-defined", "all" },
36
0
    };
37
38
0
    for (auto const& definedPresetType : definedPresetTypes) {
39
0
      if (type == definedPresetType.Type) {
40
0
        type = definedPresetType.BaseType;
41
0
        return PresetListMode::Defined;
42
0
      }
43
0
    }
44
0
    return PresetListMode::Available;
45
0
  }
46
47
  std::string PresetName;
48
  std::string PresetsFile;
49
50
protected:
51
35
  cmCMakePresetsArgsBase() = default;
52
};
53
54
class cmCMakePresetsArgs : public cmCMakePresetsArgsBase
55
{
56
public:
57
  bool HasPresetsArg() const override
58
0
  {
59
0
    return this->cmCMakePresetsArgsBase::HasPresetsArg() ||
60
0
      this->ListPresetsMode.has_value();
61
0
  }
62
63
  void Clear() override
64
0
  {
65
0
    this->cmCMakePresetsArgsBase::Clear();
66
0
    this->ListPresetsMode.reset();
67
0
  }
68
69
  bool SetListPresets(std::string const& value)
70
0
  {
71
0
    std::string type = value;
72
0
    auto const mode = ParseListPresetsMode(type);
73
0
    if (!type.empty()) {
74
0
      this->Clear();
75
0
      return false;
76
0
    }
77
0
    this->ListPresetsMode = mode;
78
0
    return true;
79
0
  }
80
81
  cm::optional<PresetListMode> ListPresetsMode;
82
};
83
84
class cmCMakePresetsConfigureArgs : public cmCMakePresetsArgsBase
85
{
86
public:
87
  enum class ListPresetsOption
88
  {
89
    None,
90
    Configure,
91
    Build,
92
    Test,
93
    Package,
94
    Workflow,
95
    All,
96
  };
97
98
  bool HasPresetsArg() const override
99
35
  {
100
35
    return this->cmCMakePresetsArgsBase::HasPresetsArg() ||
101
35
      this->ListPresets != ListPresetsOption::None;
102
35
  }
103
104
  void Clear() override
105
0
  {
106
0
    this->cmCMakePresetsArgsBase::Clear();
107
0
    this->ListPresets = ListPresetsOption::None;
108
0
    this->ListPresetsMode = PresetListMode::Available;
109
0
  }
110
111
  ListPresetsOption ListPresets = ListPresetsOption::None;
112
  PresetListMode ListPresetsMode = PresetListMode::Available;
113
};
114
115
class cmCMakePresetsWorkflowArgs : public cmCMakePresetsArgs
116
{
117
public:
118
  void Clear() override
119
0
  {
120
0
    this->cmCMakePresetsArgs::Clear();
121
0
    this->Fresh = false;
122
0
  }
123
124
  bool Fresh = false;
125
};