{"record":{"id":"a3054b8a8eb73305","repo":"bazelbuild/bazel","slug":"invalid-options-syntax-s-note-negative-target-p","errorCode":null,"errorMessage":"Invalid options syntax: %s\nNote: Negative target patterns can only appear after the end of options marker ('--'). Flags corresponding to Starlark-defined build settings always start with '--', not '-'.","messagePattern":"Invalid options syntax: (.+?)\nNote: Negative target patterns can only appear after the end of options marker \\('--'\\)\\. Flags corresponding to Starlark-defined build settings always start with '--', not '-'\\.","errorType":"exception","errorClass":"OptionsParsingException","httpStatus":null,"severity":"error","filePath":"src/main/java/com/google/devtools/common/options/OptionsParserImpl.java","lineNumber":518,"sourceCode":"    List<String> ignoredArgs = new ArrayList<>();\n\n    Iterator<ArgAndFallbackData> argsAndFallbackDataIterator =\n        argsPreProcessor.preProcess(args).iterator();\n    Iterator<String> argsIterator = Iterators.transform(argsAndFallbackDataIterator, a -> a.arg);\n    while (argsAndFallbackDataIterator.hasNext()) {\n      ArgAndFallbackData argAndFallbackData = argsAndFallbackDataIterator.next();\n      String arg = argAndFallbackData.arg;\n      @Nullable OptionsData fallbackData = argAndFallbackData.fallbackData;\n\n      if (!arg.startsWith(\"-\")) {\n        unparsedArgs.add(arg);\n        continue; // not an option arg\n      }\n\n      if (arg.startsWith(\"-//\") || arg.startsWith(\"-@\")) {\n        // Fail with a helpful error when an invalid option looks like an absolute negative target\n        // pattern or a typoed Starlark option.\n        throw new OptionsParsingException(\n            String.format(\n                \"Invalid options syntax: %s\\n\"\n                    + \"Note: Negative target patterns can only appear after the end of options\"\n                    + \" marker ('--'). Flags corresponding to Starlark-defined build settings\"\n                    + \" always start with '--', not '-'.\",\n                arg));\n      }\n\n      arg = swapShorthandAlias(arg);\n\n      if (arg.equals(\"--\")) { // \"--\" means all remaining args aren't options\n        Iterators.addAll(unparsedPostDoubleDashArgs, argsIterator);\n        break;\n      }\n\n      Optional<ParsedOptionDescription> parsedOption;\n      if (containsSkippedPrefix(arg)) {\n        // Parse the skipped arg into a synthetic allowMultiple option to preserve its order","sourceCodeStart":500,"sourceCodeEnd":536,"githubUrl":"https://github.com/bazelbuild/bazel/blob/e6e199d0601a244511b4cf18c8b2828aa73db1fd/src/main/java/com/google/devtools/common/options/OptionsParserImpl.java#L500-L536","documentation":"OptionsParserImpl throws this dedicated error when a command-line token starts with '-//' or '-@' — shapes that look like an absolute negative target pattern or a typoed single-dash Starlark flag. Single-dash args are parsed as short options, so these would otherwise fail with a confusing 'Unrecognized option' message; the check gives the user the actual rule: negative patterns go after '--' and Starlark build settings use '--'.","triggerScenarios":"Passing '-//pkg:target' or '-@file.txt' before the '--' end-of-options marker; typing '--//pkg:setting' with one dash instead of two.","commonSituations":"Trying to exclude a target (e.g. `bazel build //... -//pkg:target` — correct form puts the exclusion after '--' or uses it in target position); muscle-memory single-dash typo for a Starlark build setting like -//pkg:my_flag.","solutions":["For negative target patterns, place them after the end-of-options marker: `bazel build -- //... -//pkg:target`","For Starlark-defined build settings, use two dashes: `--//pkg:my_flag=value`","If you meant a short boolean option like -l, confirm the actual single-letter abbreviation with --help"],"exampleFix":"# before\nbazel build //... -//third_party:conscrypt\n# after\nbazel build -- //... -//third_party:conscrypt","handlingStrategy":"validation","validationCode":"# Reject single-dash // or @ tokens before the end-of-options marker\nfor arg in \"$@\"; do\n  case \"$arg\" in\n    -//*|-@*) echo \"Move negative patterns after '--' and use '--' for Starlark flags: $arg\" >&2; exit 2;;\n  esac\ndone","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always write Starlark build settings with two dashes: --//pkg:flag=value","Put negative target patterns after '--'","Lint generated command lines for '-//' and '-@' shapes"],"tags":["bazel","options","target-patterns","starlark","flag-parsing"],"backgroundTag":null,"analyzedSha":"e6e199d0601a244511b4cf18c8b2828aa73db1fd","analyzedAt":"2026-08-14T10:24:27.848Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}