{"ref":"capability:linting","page":"/capabilities/linting","json":"/capabilities/linting.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"linting","name":"Linting","domain":"developer-experience","ecosystems":["cap","ui5"],"universal":true,"description":"Catching in the editor what would otherwise be caught at deploy time, or not at all — problems in source code and models and in the project's configuration, found by rules rather than by review.","short":"Catching problems in code, models and configuration by rules","core_coverage":{"state":"core-and-community","assessed_at":"2026-09-08","what_core_does":"SAP publishes an ESLint plugin for CDS carrying a recommended rule set, described as best practice and universal to every CAP project — so the baseline is opinionated on purpose and arrives already chosen.","where_it_stops":"It stops at the model. Configuration is the other half of a CAP project and ages faster than the model does — a key deprecated two releases ago keeps working silently — and the entries here that cover it are independent, built on ESLint's JSON language support rather than on the CDS plugin.","sources":[{"url":"https://cap.cloud.sap/docs/tools/cds-lint/","title":"CDS Lint — capire","checked":"2026-09-08","quote":"CAP provides an ESLint plugin for CDS @sap/eslint-plugin-cds with a set of recommended rules that are considered best practice and universal for every CAP project."}],"relationship":"narrow-by-design"},"drafted_with_ai":true,"coverage_by_ecosystem":{"ui5":{"state":"core-and-community","assessed_at":"2026-10-19","relationship":"unassessed","what_core_does":"SAP publishes [UI5 linter](https://github.com/UI5/linter), which checks the JavaScript, TypeScript, XML and JSON files of a UI5 project by predefined rules and fixes part of what it finds with `ui5lint --fix`.","where_it_stops":"At what UI5 2.x removes: its findings are deprecated libraries, framework APIs and configuration, global variables and possible CSP violations. Its own README says it does not yet cover all aspects and best practices for UI5 2.x, and that not every finding can be fixed automatically.","community_adds":"[ui5plugin-linter](https://github.com/iljapostnovs/ui5plugin-linter) checks a project's own code rather than its readiness for UI5 2.x: XML attributes that do not exist or are duplicated, imported modules and members that do not exist or are deprecated, unused classes and translations, and IDs or event handlers that break a naming pattern the project sets. [SAPUI5 Extension](https://github.com/iljapostnovs/VSCodeUI5Plugin) shows its diagnostics in VS Code.","sources":[{"url":"https://github.com/UI5/linter","title":"UI5 linter — README","checked":"2026-10-19","quote":"UI5 linter scans your UI5 project and detects issues that might interfere with its smooth running with"},{"url":"https://github.com/UI5/linter","title":"UI5 linter — README","checked":"2026-10-19","quote":"While UI5 linter already provides many detection features, it is not yet covering all aspects and best practices for UI5 2.x."},{"url":"https://github.com/iljapostnovs/ui5plugin-linter","title":"ui5plugin-linter — README","checked":"2026-10-19","quote":"Command Line Linter for UI5 based projects."},{"url":"https://github.com/iljapostnovs/ui5plugin-linter","title":"ui5plugin-linter — README","checked":"2026-10-19","quote":"Checks if imported module exists and is not deprecated"},{"url":"https://github.com/iljapostnovs/VSCodeUI5Plugin","title":"iljapostnovs/VSCodeUI5Plugin — README","checked":"2026-10-19","quote":"VSCode extension is using UI5 Parser and UI5 Linter packages"}]}},"framing_by_ecosystem":{"ui5":{"description":"In a UI5 project linting is mostly about the next major release: [UI5 linter](https://github.com/UI5/linter) reports what was deprecated with or before UI5 1.136, and [ui5con-2026-ui5-linter-workshop](artifact:sap-samples-ui5con-2026-ui5-linter-workshop) takes a legacy Todo app from its first report to a clean, CSP-compliant one."},"cap":{"description":"Catching in the editor what would otherwise be caught at deploy time, or not at all — problems in the CDS model and in the project's configuration, found by rules rather than by review."}},"history":[{"date":"2026-09-14","field":"ecosystems","from":"cap","to":"cap, ui5","reason":"ui5con-2026-ui5-linter-workshop, a SAP-samples workshop in this batch, runs UI5 linter over a legacy UI5 app, which is this concern on the UI5 door. The UI5 reading comes from the UI5 linter README."},{"date":"2026-10-17","field":"description","from":"Catching in the editor what would otherwise be caught at deploy time, or not at all — problems in the CDS model and in the project's configuration, found by rules rather than by review.","to":"Catching in the editor what would otherwise be caught at deploy time, or not at all — problems in source code and models and in the project's configuration, found by rules rather than by review.","reason":"Keep the default capability wording neutral; preserve the previous wording in framing_by_ecosystem.cap. Maintainer-requested scope audit."},{"date":"2026-10-19","field":"coverage_by_ecosystem.ui5","from":"core-only","to":"core-and-community","reason":"UI5 linter (@ui5/linter) and ui5plugin-linter were staged in intake-20261019-bestofui5 with provides edges here, so the note that the graph holds no UI5 linter no longer holds and a community linter is present. The UI5 linter README was read again on 2026-10-19."}]},"sap_delivery":{"door":"cap","all":{"built_in":[],"documented_pattern":[],"announced":[],"packages":[{"ref":"artifact:sap-ux-eslint-plugin-fiori-tools","name":"@sap-ux/eslint-plugin-fiori-tools","json":"/artifacts/sap-ux-eslint-plugin-fiori-tools.json"},{"ref":"artifact:sap-eslint-plugin-cds","name":"@sap/eslint-plugin-cds","json":"/artifacts/sap-eslint-plugin-cds.json"}]},"by_flavor":{"node":null,"java":null}},"edges":{"use_cases":[],"shared_tasks":[],"related_tasks":[],"options":[{"ref":"artifact:cbs-consulting-cds-eslint","name":"@cbs-consulting/cds-eslint","json":"/artifacts/cbs-consulting-cds-eslint.json","ecosystem":"cap","origin_ring":"independent"},{"ref":"artifact:cbs-consulting-tools","name":"@cbs-consulting/tools","json":"/artifacts/cbs-consulting-tools.json","ecosystem":"cap","origin_ring":"independent"},{"ref":"artifact:sap-ux-eslint-plugin-fiori-tools","name":"@sap-ux/eslint-plugin-fiori-tools","json":"/artifacts/sap-ux-eslint-plugin-fiori-tools.json","ecosystem":"cap","origin_ring":"sap-official"},{"ref":"artifact:sap-eslint-plugin-cds","name":"@sap/eslint-plugin-cds","json":"/artifacts/sap-eslint-plugin-cds.json","ecosystem":"cap","origin_ring":"sap-official"},{"ref":"artifact:satiroglu-kaev","name":"@satiroglu/kaev","json":"/artifacts/satiroglu-kaev.json","ecosystem":"ui5","origin_ring":"independent"},{"ref":"artifact:ui5-linter","name":"@ui5/linter","json":"/artifacts/ui5-linter.json","ecosystem":"ui5","origin_ring":"sap-official"},{"ref":"artifact:mauriciolauffer-eslint-plugin-better-cap-config","name":"eslint-plugin-better-cap-config","json":"/artifacts/mauriciolauffer-eslint-plugin-better-cap-config.json","ecosystem":"cap","origin_ring":"independent"},{"ref":"artifact:qualiture-hana-linter","name":"hana-linter","json":"/artifacts/qualiture-hana-linter.json","ecosystem":"cap","origin_ring":"independent"},{"ref":"artifact:iljapostnovs-ui5plugin","name":"ui5plugin","json":"/artifacts/iljapostnovs-ui5plugin.json","ecosystem":"ui5","origin_ring":"independent"},{"ref":"artifact:iljapostnovs-ui5plugin-linter","name":"ui5plugin-linter","json":"/artifacts/iljapostnovs-ui5plugin-linter.json","ecosystem":"ui5","origin_ring":"independent"},{"ref":"artifact:sap-vscode-ui5-language-assistant","name":"vscode-ui5-language-assistant","json":"/artifacts/sap-vscode-ui5-language-assistant.json","ecosystem":"ui5","origin_ring":"sap-official"}],"samples":[{"ref":"artifact:ui5-sample-app","name":"@ui5/sample-app","json":"/artifacts/ui5-sample-app.json"},{"ref":"artifact:sap-samples-ui5con-2026-ui5-linter-workshop","name":"ui5con-2026-ui5-linter-workshop","json":"/artifacts/sap-samples-ui5con-2026-ui5-linter-workshop.json"}],"explained_by":[{"ref":"content:before-you-upgrade-s4hana-static-ui5-checks-with-mcp","name":"Before You Upgrade S/4HANA: Static UI5 Checks with MCP","json":"/content/before-you-upgrade-s4hana-static-ui5-checks-with-mcp.json"},{"ref":"content:building-secure-sapui5-applications-best-practices-for-developers","name":"Building Secure SAPUI5 Applications: Best Practices for Developers","json":"/content/building-secure-sapui5-applications-best-practices-for-developers.json"},{"ref":"content:introducing-eslint-plugin-better-cap-config","name":"Introducing eslint-plugin-better-cap-config an ESLint plugin to improve CAP configuration","json":"/content/introducing-eslint-plugin-better-cap-config.json"},{"ref":"content:migrate-your-code-with-ui5-linter-autofix-has-landed","name":"Migrate your code with UI5 linter – Autofix has landed","json":"/content/migrate-your-code-with-ui5-linter-autofix-has-landed.json"}],"normative_context":[]}}