Skip to main content

open-harness-scopelens

File length linter for any language. Reports files that exceed a configured line limit. Single native binary, zero runtime dependencies.

Part of the open-harness monorepo. Español abajo.

Same tool, other ecosystems: also available on npm (@open_harness/scopelens) and on Packagist (open-harness/scopelens). Identical binary, identical config; pick the registry that matches your stack.

Install

pip install open-harness-scopelens

pip picks the right native wheel for your platform automatically (Linux x86_64, macOS arm64, macOS x86_64, Windows x86_64). Each wheel embeds the Go binary — no runtime deps.

Usage

scopelens check               # scan current directory
scopelens check --fail        # exit 1 on violations (CI / git hooks)
scopelens check --dir ./src   # scan a specific directory
scopelens check --max 200     # override the line limit
scopelens check --no-color    # plain output for logs
scopelens init                # generate a default scopelens.json
scopelens version             # print version

Configuration

Place a scopelens.json at the repo root:

{
  "default": { "maxLines": 100 },
  "rules": [
    { "pattern": "**/*_test.go",     "maxLines": 300 },
    { "pattern": "**/*.spec.*",      "maxLines": 300 },
    { "pattern": "**/migrations/**", "skip": true }
  ],
  "exclude": ["node_modules", "vendor", ".git", "dist"]
}

Pattern semantics follow .gitignore style. The first matching rules entry wins; if no rule matches, default.maxLines applies.

Alternative: configure inside pyproject.toml or the dedicated scopelens.json

If you prefer not to keep a separate scopelens.json, add a scopelens key in your package.json with the same shape:

{
  "name": "my-project",
  "scopelens": {
    "default": { "maxLines": 100 },
    "rules": [{ "pattern": "**/*_test.go", "maxLines": 300 }],
    "exclude": ["node_modules", "dist"]
  }
}

Precedence: --config <path> > scopelens.json > package.json key > built-in defaults. CLI flags (--max, --no-color, etc.) always win.

Integrations

# Husky pre-commit
scopelens check --fail
# lefthook.yml
pre-commit:
  commands:
    scopelens:
      run: scopelens check --fail --no-color
# GitHub Actions
- name: Run scopelens
  run: npx @open_harness/scopelens check --fail

Why a line limit?

Large files concentrate too many responsibilities and become hard to read, test, and refactor. A soft cap (e.g. 100 lines, with exceptions for tests) keeps modules focused and forces responsibility-split decisions early — when they are cheap.

Exit codes

Code Meaning
0 No violations (or --fail not passed)
1 Violations found and --fail was passed, or config error

Español

Linter de longitud de archivos, agnóstico al lenguaje. Reporta los archivos que superan un límite de líneas configurable. Un solo binario nativo, cero dependencias en tiempo de ejecución.

Parte del monorepo open-harness.

Instalación

pip install open-harness-scopelens

pip elige automáticamente la wheel nativa correcta para tu plataforma (Linux x86_64, macOS arm64, macOS x86_64, Windows x86_64). Cada wheel embebe el binario Go — sin deps en runtime.

Uso

scopelens check               # escanea el directorio actual
scopelens check --fail        # exit 1 si hay violaciones (CI / git hooks)
scopelens check --dir ./src   # escanea un directorio específico
scopelens check --max 200     # sobrescribe el límite de líneas
scopelens check --no-color    # salida sin colores
scopelens init                # genera un scopelens.json por defecto
scopelens version             # imprime la versión

Configuración

Colocá un scopelens.json en la raíz del repo. Ver ejemplo arriba. La semántica de patrones sigue el estilo .gitignore. La primera regla coincidente en rules gana; si ninguna coincide, aplica default.maxLines.

Alternativa: configurar dentro de pyproject.toml o scopelens.json

Si preferís no tener un scopelens.json separado, agregá una key scopelens en tu package.json con la misma forma del archivo dedicado. Precedencia: --config <path> > scopelens.json > key en package.json > defaults del binario. Los flags CLI (--max, --no-color, etc.) siempre ganan.

Integraciones

Mismos snippets que arriba — sirven con Husky (.husky/pre-commit), lefthook (lefthook.yml) o GitHub Actions.

Por qué un límite de líneas

Los archivos grandes concentran demasiadas responsabilidades y son difíciles de leer, testear y refactorizar. Un tope blando (por ejemplo 100 líneas, con excepciones para tests) mantiene los módulos enfocados y obliga a tomar decisiones de partición temprano — cuando son baratas.

Códigos de salida

Código Significado
0 Sin violaciones (o no se pasó --fail)
1 Hubo violaciones con --fail, o error de configuración

License

MIT — see the main repository.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

open_harness_scopelens-0.2.1-py3-none-win_amd64.whl (2.3 MB view details)

Uploaded Python 3Windows x86-64

open_harness_scopelens-0.2.1-py3-none-macosx_11_0_arm64.whl (1.0 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

open_harness_scopelens-0.2.1-py3-none-macosx_10_9_x86_64.whl (1.1 MB view details)

Uploaded Python 3macOS 10.9+ x86-64

File details

Details for the file open_harness_scopelens-0.2.1-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for open_harness_scopelens-0.2.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 8416f8362a5c1fd6df37ee4f6cca0be39349fab73e7f1baa58f18289d3ddb80a
MD5 e97533e57138d846c7051cf3dadfc9c0
BLAKE2b-256 1411659266e26b6aa12aa2d8be97497a55d86e739ca4854cbe5f1e1031ba5c69

See more details on using hashes here.

File details

Details for the file open_harness_scopelens-0.2.1-py3-none-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for open_harness_scopelens-0.2.1-py3-none-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a769abf3a87191bb0f2e10ea28ab3ba426f5e955b138b95e6b7a9608eadcecbd
MD5 09cc1aa1eae13bc4b5ae0acd8d43d4fc
BLAKE2b-256 b28c05fccc5c87102bdadbbd05b93beac52f9255f9d8c434004e5d892585b051

See more details on using hashes here.

File details

Details for the file open_harness_scopelens-0.2.1-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for open_harness_scopelens-0.2.1-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0ba5395b6bffe41fd9c04e0cd23610f9c1df3d5d79d5a5ceea91facabda08d56
MD5 7cb5b968c997c730db1d2e364ef621dc
BLAKE2b-256 e578982cedba8211f513e4b89272f5bc0076a748a7da19631eccc725957f81bc

See more details on using hashes here.

File details

Details for the file open_harness_scopelens-0.2.1-py3-none-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for open_harness_scopelens-0.2.1-py3-none-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 2f671d665c734258a1995bc63774bcab55ab3d03d7d3c5b2cf9ff773cb1a568f
MD5 0ea2d4c26ca95320b62237bc0a76fc99
BLAKE2b-256 c62b107e06a37a0c46ae253d585ef1b9429149e88789d3386380e8c54de84145

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.2.1 This release

4 files

0.2.0

4 files

0.1.0

4 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page