@optique/core 0.7.8 → 0.7.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -333,10 +333,23 @@ function multiple(parser, options = {}) {
333
333
  },
334
334
  suggest(context, prefix) {
335
335
  const innerState = context.state.length > 0 ? context.state.at(-1) : parser.initialState;
336
- return parser.suggest({
336
+ const suggestions = parser.suggest({
337
337
  ...context,
338
338
  state: innerState
339
339
  }, prefix);
340
+ const selectedValues = /* @__PURE__ */ new Set();
341
+ for (const s of context.state) {
342
+ const completed = parser.complete(s);
343
+ if (completed.success) {
344
+ const valueStr = String(completed.value);
345
+ selectedValues.add(valueStr);
346
+ }
347
+ }
348
+ if (selectedValues.size > 0) return Array.from(suggestions).filter((suggestion) => {
349
+ if (suggestion.kind === "literal") return !selectedValues.has(suggestion.text);
350
+ return true;
351
+ });
352
+ return suggestions;
340
353
  },
341
354
  getDocFragments(state, defaultValue) {
342
355
  const innerState = state.kind === "unavailable" ? { kind: "unavailable" } : state.state.length > 0 ? {
package/dist/modifiers.js CHANGED
@@ -333,10 +333,23 @@ function multiple(parser, options = {}) {
333
333
  },
334
334
  suggest(context, prefix) {
335
335
  const innerState = context.state.length > 0 ? context.state.at(-1) : parser.initialState;
336
- return parser.suggest({
336
+ const suggestions = parser.suggest({
337
337
  ...context,
338
338
  state: innerState
339
339
  }, prefix);
340
+ const selectedValues = /* @__PURE__ */ new Set();
341
+ for (const s of context.state) {
342
+ const completed = parser.complete(s);
343
+ if (completed.success) {
344
+ const valueStr = String(completed.value);
345
+ selectedValues.add(valueStr);
346
+ }
347
+ }
348
+ if (selectedValues.size > 0) return Array.from(suggestions).filter((suggestion) => {
349
+ if (suggestion.kind === "literal") return !selectedValues.has(suggestion.text);
350
+ return true;
351
+ });
352
+ return suggestions;
340
353
  },
341
354
  getDocFragments(state, defaultValue) {
342
355
  const innerState = state.kind === "unavailable" ? { kind: "unavailable" } : state.state.length > 0 ? {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@optique/core",
3
- "version": "0.7.8",
3
+ "version": "0.7.9",
4
4
  "description": "Type-safe combinatorial command-line interface parser",
5
5
  "keywords": [
6
6
  "CLI",