Skip to content

Releases

v0.1.0-alpha.21

v0.1.0-alpha.21 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 07 Nov 16:06
Immutable release. Only release title and notes can be modified.
9e345a1

Changes

  • The repository moved to GetFluvo/odoo-lint, with odoo-lint-pre-commit and odoo-lint-action. Old bosd/... URLs redirect; update pre-commit repo: and Action uses: lines when convenient.
  • The MCP server is now io.github.GetFluvo/odoo-lint in the MCP Registry.
  • The Zed extension downloads its binaries from GetFluvo/odoo-lint.

No linter changes since 0.1.0-alpha.20.

v0.1.0-alpha.20

v0.1.0-alpha.20 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 01 Nov 23:47
Immutable release. Only release title and notes can be modified.
1e29bef

New

  • odl check --show-fixes: with --fix or --diff, lists the fixes per file and rule, the most frequent first. (#152)

Changed

  • PO106 without the module's dependencies on the addons path reports only terms of its code and data files that the template lacks (a new _() message or view label), and offers no fix: the labels of its models may then be wrong, which made every template look outdated. With the dependencies it reports and fixes as before. (#150)

v0.1.0-alpha.19

v0.1.0-alpha.19 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 31 Oct 00:12
Immutable release. Only release title and notes can be modified.
4877b2b

New

  • PO106 pot-outdated (opt-in): reports a module's i18n/<module>.pot that differs from what odl pot writes from its source, with how many terms it lacks and how many the source no longer exports. The fix writes the template; it is unsafe when dependencies are missing from the addons path. odl pot --check as a rule, for the editor and odl check. (#147)

v0.1.0-alpha.18

v0.1.0-alpha.18 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 29 Oct 18:31
Immutable release. Only release title and notes can be modified.
4525cfc

New

  • odl pot writes a module's .pot template without running Odoo: the terms of its Python code, models (labels, help, selections, constraints) and the records its data files create, at 99% parity with OCA's templates on 19.0. --merge updates the module's .po files from it. (#118, #120, #133, #140)
  • noqa comments in XML and .po files: <!-- noqa: XML004 --> and # noqa: PO003. (#138)
  • odl check --statistics counts the findings per rule, the most frequent first; [*] marks the rules --fix fixes. (#145)
  • Colours on a terminal: the path in bold, the code in red. NO_COLOR turns them off; piped output is unchanged. (#145)
  • odl rule W83 lists the rules of a code prefix, odl rule 8101 those of a number. (#144)

Changed

  • No banner or "No config found" notice by default; -v/--verbose prints the Odoo version source and config, -q/--quiet only the findings. (#128)
  • An unknown --select/--ignore selector, or a config select that matches no rule, exits 2 instead of linting nothing. (#128)
  • A path that does not exist exits 2; a file odoo-lint does not lint (a README.md) is skipped. (#121)
  • With an addons path, odl check warns about a folder that does not exist, one a level too high (the Odoo checkout instead of its addons), and dependencies it cannot find. (#128, #136)

Fixes

From a review of the whole code base. (#121–#126)

  • C8116 no longer removes "installable": False (regression in alpha.17).
  • W8161's fix no longer rewrites _() in parameter defaults and decorators, where there is no self; its quick fix keeps the import while other calls use it.
  • XML023/XML024 fixes no longer corrupt a <field> tag over several lines; XML002 handles a BOM or CRLF.
  • odl format keeps whitespace that is alone in an element, and formats stylesheets again.
  • PO007 wraps Thai, Devanagari and Arabic as polib does; PO metadata sorts as polib does; PO005 puts merged references one per line (#117).
  • exclude and per-file-ignores work from a subdirectory and with a relative --config; ignore = ["ALL"] turns opt-in rules off too; # noqa after a string over several lines covers the line it starts on.
  • odl server survives a malformed request and finds references in unsaved files; odl hook reports only the edited file's findings; odl mcp rejects a string where a list is expected; the LSP, hook and editor integrations lint JavaScript.
  • Upgrade rules: U1701 keeps the attrs of columns added to a list through an xpath, renames inside nested xpaths go to the right model, version guards on the new name count, U1902 gives no fix for a name Python would mangle.
  • ODOO004, ODOO008 and ODOO013 false positives; widgets and OWL templates no longer go stale in the LSP.
  • odl check | head no longer panics.

Performance

  • Hints about where a missing model or field lives parse only modules that mention it (5.3 s → 0.5 s on a large addons path). (#127)
  • The index computes line numbers by index and parses modules and their files in parallel. (#139)

Docs

  • Getting started, migrating from OCA's tooling, and which output goes to stdout or stderr. (#129, #145)

v0.1.0-alpha.17

v0.1.0-alpha.17 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 23 Oct 11:18
Immutable release. Only release title and notes can be modified.
af57c51

Changed defaults

Defaults that match the checks OCA's CI runs today, measured over every OCA repository on 18.0 and 19.0. (#115)

  • Opt-in now: PO007 po-pretty-format (every OCA repository disables it), XML002, XML003, XML009 and XML024 (style checks newer than the hooks OCA runs), and MOD009 field-string-redundant, which W8113 covers. Select them by code to keep them.
  • W8113 attribute-string-redundant gets a safe fix that removes the redundant label.
  • C8116 manifest-superfluous-key leaves "installable": True alone; keys-values-true = ["active", "installable"] restores pylint-odoo's behaviour.
  • ODOO001 missing-depends reports stored computes only; [rules.missing-depends] non-stored = true reports non-stored ones too.

Fixes

False positives found by running every rule over the OCA repositories on 18.0, 19.0 and 20.0. (#111)

  • PO rules skip documentation catalogs (doc/, docs/, LC_MESSAGES/).
  • Removed models and fields that a dependency defines again are not reported.
  • A module's own field classes (JobSerialized(...), fs_fields.FsFolder()) are known to ODOO004, ODOO007 and ODOO009.
  • _inherits keyed by a class attribute and delegate=True with comodel_name= are seen as delegations.
  • ODOO005 knows the XML ids Odoo creates at install (account.1_... of chart templates, field_* of delegated fields) and of web, and no longer reads a chart template's ref() in an eval as Odoo's.
  • ODOO010 leaves abstract models that leave a compute to their heirs alone.
  • ODOO011 skips special buttons and buttons an extension inserts at a button.
  • ODOO015 sees widgets registered in a chain (.add(...).add(...)).
  • U1712 does not report flush() on an object in a private attribute; the rename rules skip OpenUpgrade's openupgrade_scripts.

v0.1.0-alpha.16

v0.1.0-alpha.16 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 20 Oct 14:12
Immutable release. Only release title and notes can be modified.
0223c17

Features

  • PO105 po-translation-missing: with [rules.po-translation-missing] languages = [...], reports a module with translatable terms but no i18n/<lang>.po, and a .po that leaves terms of the .pot untranslated. (#108)
  • MOD011 readme-fragments-missing (opt-in): an installable module without readme/DESCRIPTION.md or .rst. (#109)
  • MOD012 module-icon: with [rules.module-icon] (icon, replace, paths), reports a missing icon and an outdated one (oca-2015, oca-2025-01, sha256:<hex> or a file), and keeps a module's own icon; odl check --fix copies the configured icon. (#109)
  • MOD013 module-without-tests (opt-in): a module with Python models and no tests/test_*.py. (#109)
  • XML103 xml-inside-form-container (opt-in): a view extension that adds fields inside the whole <sheet> or <form>; settings views are skipped. (#109)

v0.1.0-alpha.15

v0.1.0-alpha.15 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 15 Oct 21:35
Immutable release. Only release title and notes can be modified.
8da6edb

Features

  • OWL 3 in Odoo 20.0: U2031–U2035 for the hooks, t-portal, t-esc and t-ref changes, and _rec_names_search tuples (U2035, opt-in). (#103)
  • U2036 upgrade-owl3-template-this: component templates read the component through this. in OWL 3; safe fix. (#106)
  • odl readme: [readme] style = "obs" writes Markdown READMEs without OCA branding, with org, repo, branch and remove-rst. (#104)

Fixes

  • MOD001 names a missing __init__.py instead of blaming the manifest. (#102)
  • OWL001–OWL003 skip inheritance specs, and OWL003 no longer reports calls that return a handler. (#105)

v0.1.0-alpha.14

v0.1.0-alpha.14 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 15 Oct 12:41
Immutable release. Only release title and notes can be modified.
691213d

Fixes

  • Drops the unused quick-xml dependency, which carried RUSTSEC-2026-0194 and RUSTSEC-2026-0195. Crates that embed odoo-lint now pass cargo-deny. (#100)

v0.1.0-alpha.13

v0.1.0-alpha.13 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 15 Oct 09:40
Immutable release. Only release title and notes can be modified.
5770974

New

  • JavaScript: odl now reads the JavaScript of a module's static/src and static/tests, parsed with oxc.
    • Upgrade rules: patch() with a name (U1722, safe fix), unpatch (U1723), and a class in the field registry instead of a descriptor (U1724) for 17.0; the rpc service (U1812) and the legacy Widget (U1813) for 18.0. (#95)
  • ODOO015–ODOO017: view widgets, a component's static template, and t-inherit/t-call that no module in the dependencies registers or defines. They run when Odoo's sources with their static folders are on the addons path. (#98)
  • odl format also formats SCSS, CSS and Less with lax-css, moving only whitespace. (#94)
  • Renamed XML ids per Odoo version (U1590–U1990), checked against the Odoo sources; safe fix. (#92)
  • upgrade-check: "ready" now says it covers the code only. The report names depends that odl cannot find for the target, and the JSON has scope and unresolved_depends. (#97)

Fixes

  • Asset globs are recursive, as Odoo globs them, and ("after", target, path) directives are read. Checks on asset XML now see nested files. (#98)
  • The crate packages its rename data again; alpha.12 was missing on crates.io. (#96)

v0.1.0-alpha.12

v0.1.0-alpha.12 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 14 Oct 23:52
Immutable release. Only release title and notes can be modified.
bbec238

New

  • odl format: formats XML with lax-markup, moving only whitespace. Domains, entities and text stay as written. Before writing, odl checks that the content (text, record field values, comments) is unchanged; if it would change, the file is left as it is. Replaces prettier's XML plugin. (#91)
  • odl requirements: writes requirements.txt from the manifests' external_dependencies. The output is byte-identical to OCA's oca-gen-external-dependencies, without building packages. (#89)
  • MOD010 manifest-website: the website set in the configuration, with a fix. Replaces oca-fix-manifest-website. (#88)
  • OWL001–OWL003: OWL templates in the assets: t-foreach without t-key, t-raw, and t-on-* handlers that are not functions. (#90)
  • Renamed and removed models and fields per Odoo version (U1590–U1991), from OpenUpgrade's migration scripts and analysis, checked against the Odoo sources of each version. Renames have a safe fix. (#85, #86)
  • ODOO014 action-read: env.ref(...).read()[0] on an action, which raises an access error for users who are not administrators; unsafe fix to _for_xml_id. (#84)
  • U1811: the http_routing slug helpers, which became ir.http class methods in Odoo 18; safe fix. (#83)
  • U1924: _notify_progress, deprecated in Odoo 19 for _commit_progress. (#82)
  • Language server: completion of methods after a record (order.). (#87)