{"record":{"id":"fc87198b668f1400","repo":"yarnpkg/yarn","slug":"toofewarguments","errorCode":null,"errorMessage":"tooFewArguments","messagePattern":"tooFewArguments","errorType":"exception","errorClass":"MessageError","httpStatus":null,"severity":"error","filePath":"src/cli/commands/remove.js","lineNumber":32,"sourceCode":"const emoji = require('node-emoji');\n\nexport const requireLockfile = true;\n\nexport function setFlags(commander: Object) {\n  commander.description('Removes a package from your direct dependencies updating your package.json and yarn.lock.');\n  commander.usage('remove [packages ...] [flags]');\n  commander.option('-W, --ignore-workspace-root-check', 'required to run yarn remove inside a workspace root');\n}\n\nexport function hasWrapper(commander: Object, args: Array<string>): boolean {\n  return true;\n}\n\nexport async function run(config: Config, reporter: Reporter, flags: Object, args: Array<string>): Promise<void> {\n  const isWorkspaceRoot = config.workspaceRootFolder && config.cwd === config.workspaceRootFolder;\n\n  if (!args.length) {\n    throw new MessageError(reporter.lang('tooFewArguments', 1));\n  }\n\n  // running \"yarn remove something\" in a workspace root is often a mistake\n  if (isWorkspaceRoot && !flags.ignoreWorkspaceRootCheck) {\n    throw new MessageError(reporter.lang('workspacesRemoveRootCheck'));\n  }\n\n  const totalSteps = args.length + 1;\n  let step = 0;\n\n  // load manifests\n  const lockfile = await Lockfile.fromDirectory(config.lockfileFolder);\n  const rootManifests = await config.getRootManifests();\n  const manifests = [];\n\n  for (const name of args) {\n    reporter.step(++step, totalSteps, `Removing module ${name}`, emoji.get('wastebasket'));\n","sourceCodeStart":14,"sourceCodeEnd":50,"githubUrl":"https://github.com/yarnpkg/yarn/blob/c2dda503f3759b5be5f0e24ecd9cf5c97a540147/src/cli/commands/remove.js#L14-L50","documentation":"`yarn remove` requires at least one package name argument; an empty args array (remove.js:34) throws tooFewArguments with the minimum count (1).","triggerScenarios":"Running bare `yarn remove`, or a script that calls `yarn remove` with no package names (e.g., `yarn remove \"$@\"` when no args were forwarded).","commonSituations":"Typing the command without operands; an automation step that conditionally removes packages but forwarded an empty list.","solutions":["Provide one or more dependency names: `yarn remove lodash`.","In scripts, guard with `[ \"$#\" -gt 0 ]` (or check the array length) before invoking `yarn remove`.","Double-check the intended dependency names against package.json `dependencies`."],"exampleFix":"# before\n$ yarn remove\n# after\n$ yarn remove lodash","handlingStrategy":"validation","validationCode":"function assertRemoveArgs(args) {\n  if (!args || args.length === 0) {\n    throw new Error('yarn remove requires at least one package name.');\n  }\n}","typeGuard":null,"tryCatchPattern":"try {\n  await runYarn(['remove', ...args]);\n} catch (e) {\n  if (/tooFewArguments/.test(e.message)) {\n    console.error('Provide at least one dependency name to remove.');\n    return;\n  }\n  throw e;\n}","preventionTips":["Always pass explicit package names to `yarn remove`.","Guard scripts so empty lists short-circuit before calling yarn.","Cross-check names against package.json dependencies."],"tags":["cli","remove","arguments","validation"],"backgroundTag":null,"analyzedSha":"c2dda503f3759b5be5f0e24ecd9cf5c97a540147","analyzedAt":"2026-08-13T04:17:06.305Z","schemaVersion":2},"datasetVersion":"2026-08-13T09:17:06.757Z"}