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