# How to Exclude Specific Files or Patterns from OpenCodeReview: 3 Configuration Methods

> Learn to exclude specific files from OpenCodeReview using CLI flags, rule.json, or default patterns. Master your code review filtering with three powerful methods.

- Repository: [Alibaba/open-code-review](https://github.com/alibaba/open-code-review)
- Tags: how-to-guide
- Published: 2026-08-06

---

**OpenCodeReview (OCR) lets you filter out files using the `--exclude` CLI flag, the `"exclude"` array in [`.opencodereview/rule.json`](https://github.com/alibaba/open-code-review/blob/main/.opencodereview/rule.json), or built-in default patterns, with precedence following CLI > Project rule > Global rule > Defaults.**

When using Alibaba's OpenCodeReview to analyze your codebase, you often need to skip generated files, dependencies, or test data to keep reviews focused on relevant code. The tool provides flexible mechanisms to exclude specific files or patterns from OpenCodeReview through multiple configuration layers that leverage Git-style glob syntax.

## Understanding the Exclusion Architecture

OCR implements file filtering across three distinct layers defined in the source code. The `--exclude` flag in [`cmd/opencodereview/shared_flags.go`](https://github.com/alibaba/open-code-review/blob/main/cmd/opencodereview/shared_flags.go) provides immediate command-line control, while project-level configuration resides in [`.opencodereview/rule.json`](https://github.com/alibaba/open-code-review/blob/main/.opencodereview/rule.json) and is processed by the `ProjectRule` struct in [`internal/config/rules/system_rules.go`](https://github.com/alibaba/open-code-review/blob/main/internal/config/rules/system_rules.go). Additionally, OCR ships with built-in exclusions for common directories like `node_modules/` and `vendor/`.

## Excluding Files via the Command Line

The fastest way to filter files is via the `--exclude` flag. This flag accepts comma-separated glob patterns that are parsed into a string slice in [`cmd/opencodereview/shared_flags.go`](https://github.com/alibaba/open-code-review/blob/main/cmd/opencodereview/shared_flags.go) (lines 40-45).

The `applyCLIExcludes` function in [`cmd/opencodereview/shared.go`](https://github.com/alibaba/open-code-review/blob/main/cmd/opencodereview/shared.go) (lines 17-28) merges these CLI patterns into the `FileFilter.Exclude` slice, appending them to any existing configuration:

```bash

# Exclude generated files and testdata directories

ocr review --exclude '**/generated/*,**/testdata/*' path/to/repo

```

## Configuring Project-Level Exclusions in rule.json

For persistent exclusions, create a [`.opencodereview/rule.json`](https://github.com/alibaba/open-code-review/blob/main/.opencodereview/rule.json) file at your repository root. The `"exclude"` array in this JSON file maps to the `Exclude` field in the `ProjectRule` struct defined in [`internal/config/rules/system_rules.go`](https://github.com/alibaba/open-code-review/blob/main/internal/config/rules/system_rules.go) (lines 102-107):

```json
{
  "exclude": [
    "**/node_modules/**",
    "**/*.log",
    "**/generated/**",
    "secret_config.yaml"
  ]
}

```

The `loadProjectRule` function reads this configuration and merges it into the `FileFilter` consulted by the scanner in [`internal/scan/provider.go`](https://github.com/alibaba/open-code-review/blob/main/internal/scan/provider.go) via the `IsUserExcluded` method.

## How Pattern Matching Works

OCR uses the **doublestar** library to support full Git-style glob syntax, including `**` for recursive directories, brace expansion (`{a,b}`), and case-insensitive matching. Before comparison, the `expandBraces` helper in [`system_rules.go`](https://github.com/alibaba/open-code-review/blob/main/system_rules.go) (lines 69-92) processes patterns to handle curly brace expansions.

The precedence order is **CLI > Project rule > Global rule > Built-in defaults**, meaning command-line arguments always override file-based configurations. When scanning paths, the `FileFilter.IsUserExcluded` method performs the validation:

```go
if cc.FileFilter.IsUserExcluded(path) {
    // file is skipped – see FileFilter.IsUserExcluded in system_rules.go
}

```

## Built-in Default Exclusions

Even without user configuration, OCR ignores common non-source directories through patterns embedded in [`default_exclude_patterns.json`](https://github.com/alibaba/open-code-review/blob/main/default_exclude_patterns.json). These defaults are applied automatically when initializing the `FileFilter` in [`system_rules.go`](https://github.com/alibaba/open-code-review/blob/main/system_rules.go), automatically excluding paths like `node_modules/`, `vendor/`, and common test file patterns unless overridden by user-defined rules.

## Summary

- **CLI exclusion**: Use `--exclude` with comma-separated patterns for ad-hoc filtering; defined in [`cmd/opencodereview/shared_flags.go`](https://github.com/alibaba/open-code-review/blob/main/cmd/opencodereview/shared_flags.go) and processed by `applyCLIExcludes` in [`shared.go`](https://github.com/alibaba/open-code-review/blob/main/shared.go).
- **Project configuration**: Define persistent patterns in [`.opencodereview/rule.json`](https://github.com/alibaba/open-code-review/blob/main/.opencodereview/rule.json) using the `"exclude"` array; loaded by `loadProjectRule` in [`internal/config/rules/system_rules.go`](https://github.com/alibaba/open-code-review/blob/main/internal/config/rules/system_rules.go).
- **Pattern syntax**: Supports `doublestar` globs with brace expansion via `expandBraces` (lines 69-92).
- **Precedence order**: CLI arguments override project rules, which override global rules, which override built-in defaults.
- **Implementation**: The `FileFilter.IsUserExcluded` method performs path validation during the scan process in [`internal/scan/provider.go`](https://github.com/alibaba/open-code-review/blob/main/internal/scan/provider.go).

## Frequently Asked Questions

### Can I combine CLI exclusions with rule.json configurations?

Yes. Command-line patterns are appended to the rule-file list rather than replacing them. The `applyCLIExcludes` function in [`cmd/opencodereview/shared.go`](https://github.com/alibaba/open-code-review/blob/main/cmd/opencodereview/shared.go) merges both sources, allowing you to maintain baseline exclusions in [`rule.json`](https://github.com/alibaba/open-code-review/blob/main/rule.json) while adding temporary filters via the `--exclude` flag.

### What glob syntax does OpenCodeReview support?

OCR uses the **doublestar** library, which supports Git-style glob patterns including `**` for recursive directory matching, brace expansion like `{a,b,c}`, and standard wildcards. The `expandBraces` function in [`internal/config/rules/system_rules.go`](https://github.com/alibaba/open-code-review/blob/main/internal/config/rules/system_rules.go) preprocesses patterns before matching occurs.

### Where are the default exclusion patterns defined?

Built-in exclusions for directories like `node_modules/` and `vendor/` are stored in [`default_exclude_patterns.json`](https://github.com/alibaba/open-code-review/blob/main/default_exclude_patterns.json) and embedded into the binary. These are applied automatically when initializing the `FileFilter` in [`system_rules.go`](https://github.com/alibaba/open-code-review/blob/main/system_rules.go) if no user-defined exclusions exist.

### How do I programmatically check if a file would be excluded?

You can instantiate a `FileFilter` struct from [`internal/config/rules/system_rules.go`](https://github.com/alibaba/open-code-review/blob/main/internal/config/rules/system_rules.go) and call `IsUserExcluded(path)`. This method performs brace expansion and doublestar matching to determine if a path matches any exclusion patterns in the filter, as implemented in lines 21-32 of the same file.