Skip to main content

open-harness-linelens

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/linelens) and on Packagist (open-harness/linelens). Identical binary, identical config; pick the registry that matches your stack.

Install

pip install open-harness-linelens

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

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

Configuration

Place a linelens.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 linelens.json

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

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

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

Integrations

# Husky pre-commit
linelens check --fail
# lefthook.yml
pre-commit:
  commands:
    linelens:
      run: linelens check --fail --no-color
# GitHub Actions
- name: Run linelens
  run: npx @open_harness/linelens 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-linelens

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

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

Configuración

Colocá un linelens.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 linelens.json

Si preferís no tener un linelens.json separado, agregá una key linelens en tu package.json con la misma forma del archivo dedicado. Precedencia: --config <path> > linelens.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_linelens-0.3.2-py3-none-win_amd64.whl (2.1 MB view details)

Uploaded Python 3Windows x86-64

open_harness_linelens-0.3.2-py3-none-macosx_11_0_arm64.whl (970.3 kB view details)

Uploaded Python 3macOS 11.0+ ARM64

open_harness_linelens-0.3.2-py3-none-macosx_10_9_x86_64.whl (1.0 MB view details)

Uploaded Python 3macOS 10.9+ x86-64

File details

Details for the file open_harness_linelens-0.3.2-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for open_harness_linelens-0.3.2-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 c6cc03b59f5d3be989f2b559e4ee66d4c36f0b0e842a7d753d9aae5f5d550317
MD5 de34d96895a5f6bf1b3dec6a92bf5611
BLAKE2b-256 686bb9ae253c1887f6c735f93069706be1c10c10f1b297e29b02285c809a1f5f

See more details on using hashes here.

File details

Details for the file open_harness_linelens-0.3.2-py3-none-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for open_harness_linelens-0.3.2-py3-none-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 56e3fe5b00b9057fe599db8c8f75d1c34c03d2516a4b065e2eac53749d8e087a
MD5 f221a4b3eef09cb4a9deddabb8df714a
BLAKE2b-256 60a2909cc0d23d79a1934e116d607ae7cead714668aab8b235c10c2702acea39

See more details on using hashes here.

File details

Details for the file open_harness_linelens-0.3.2-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for open_harness_linelens-0.3.2-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 89530de8973825b3a942d4e7a9e080d382832d1f33e38ce57f0fc5b75f0fa612
MD5 4b28098f4753e63b3499d7ac051fb0ab
BLAKE2b-256 e415dd23cb79de14a27a878cf041e11fa1115675340ff2e36df0251fbc53909f

See more details on using hashes here.

File details

Details for the file open_harness_linelens-0.3.2-py3-none-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for open_harness_linelens-0.3.2-py3-none-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 e16b866a6539de998008c3eb10db6389a935d0e3ab6eb62b2308be29a5fc2c02
MD5 a5a021037eb557a6f1244f9a4f4b8d7c
BLAKE2b-256 513da445436921de46d185acc0a26dd60d8d5fd0c70643903a23d2615475ee22

See more details on using hashes here.

Release history Release notifications | RSS feed

0.3.3

4 files

This release

0.3.2 This release

4 files

0.3.1

4 files

0.3.0

4 files

0.2.1

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