172 def _resolve(self):
173 """Return the final command list plus the duplicate/conflict report."""
174 layers = _ordered_layers(self.layers)
175 separators = layers[0].separators if layers else ("=",)
176 keep = layers[0].keep if layers else GeneratorSettingsKeep.LAST
177 precedences_seen = {}
178 for layer in layers:
179 if (
180 layer.separators == separators
181 and layer.keep == keep
182 ):
183 if layer.precedence in precedences_seen:
184 previous_layer = precedences_seen[layer.precedence]
185 raise ValueError(
186 f"cannot merge generator settings with duplicate "
187 f"precedence {layer.precedence.name}: "
188 f"{previous_layer.source} and {layer.source}"
189 )
190 precedences_seen[layer.precedence] = layer
191 continue
192
193 summary = ", ".join(
194 f"{entry.source}: separators={entry.separators}, "
195 f"keep={entry.keep.value}"
196 for entry in layers
197 )
198 raise ValueError(
199 f"cannot merge generator settings with different parsing "
200 f"settings: "
201 f"{summary}"
202 )
203
204 records = _build_records(layers, separators)
205 kept_records, removed_records = _deduplicate_records(records, keep)
206 return (
207 [record["original_setting"] for record in kept_records],
208 _build_report(records, kept_records, removed_records),
209 )
210
211