Use the current custom-controls API, move onto the released view builder - #24
Merged
Merged
Conversation
The frozen z2ui5_cl_xml_view carries one method per control; the released z2ui5_cl_ui5_view_builder in the core's src/02 has five generic verbs. The translation was derived from the old class's own source - which control each of its 455 methods stands for, which parameter becomes which attribute, which of those went through the boolean conversion, and whether the method descended into the new element or stayed put - so it reproduces that class's behaviour rather than a guess about it. Two things the old builder hid had to be carried by hand: - it collected the namespace prefixes a view used and wrote the xmlns declarations onto the root itself. The new one declares them by hand, and a prefix that is used but not declared makes the view fail to parse. - a boolean went through boolean_abap_2_json( ). The new a( ) has its own b = for that; with v = an abap_false renders as an empty string, which UI5 reads as true. Verified against the whole addon set at once: abaplint over all eleven repositories together reports the same findings as before the change, minus four - nothing new, nothing masked. abap2ui5lint, which could not read a line of these views before, now reconstructs and renders them. This repository did not compile: it named z2ui5_cl_cc_spreadsheet, which custom-controls renamed to z2ui5_cl_cci_spreadsheet when it moved to the cci namespace. abaplint had been reporting four errors, and the last run predates the rename. The export control's XML element is no longer built here by hand - that is what let the two drift apart. z2ui5_cl_cci_spreadsheet=>render( ) owns the tag, and the exporter's JavaScript, which used to be injected into an html:script tag through _cc_plain_xml( ), now arrives with the custom-controls BSP. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XUhL1rra5QZbr4hV14YZXM
Three things that had drifted, and one that was never there. **The workflows follow the naming rule again** (CONVENTIONS §2): lower kebab case, a verb prefix that means the same in every repository, and a `name:` a reader can trace back to the file when they see a red check. This retitles every required status check at once - branch protection has to be moved with it. **A weekly run.** The sibling repositories are resolved from their main branch with no version pin, and not one workflow here had a schedule. A rename upstream therefore broke this repository silently and stayed broken until somebody happened to open a pull request. rap-ext spent ten days that way with a green badge; this is the trigger that would have caught it. **`check` and `test`.** CONVENTIONS §3 asks every repository for both, because they are the two commands somebody types before reading anything - and `check` runs what CI runs, so a contributor can reproduce it. abaplint is pinned through the lockfile, actions are pinned to a commit with the version in a trailing comment, and Dependabot groups the updates into one pull request. **abap2ui5lint**, which is the new one. It reads an app class and the view it builds together, and until the views moved onto the released builder it could not read a line of this repository. What it finds today is frozen in abap2ui5lint-baseline.json: those entries are counted and never listed, a NEW finding fails the gate, and an entry whose finding is gone is stale and fails too - so the file only shrinks. The README badge block follows the samples layout: what the addon is, then the workflows grouped by what they prove, then two shields.io endpoints the linter rewrites on every run. Those two exist because a green workflow badge only says the job exited zero - which was equally true when the linter had nothing here it could check. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XUhL1rra5QZbr4hV14YZXM
CONVENTIONS §6 asks every repository for a README, an AGENTS.md, a CLAUDE.md pointing at it, a CONTRIBUTING.md and a SECURITY.md. Between the eleven addons there were four AGENTS.md, no CLAUDE.md at all, no CONTRIBUTING.md at all, and six SECURITY.md. The CONTRIBUTING.md is the one that earns its keep: it names the gates this repository actually has, what each one proves, and how the abap2UI5-linter baseline works - that a recorded finding is counted and never listed, that a new one fails, and that an entry whose finding is gone is stale and fails too, so the file only shrinks. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XUhL1rra5QZbr4hV14YZXM
This was referenced Aug 20, 2026
Merged
The two shields.io endpoints the linter writes were sitting in a row of their own at the bottom, next to a check-abap2ui5 workflow badge. samples arranges them differently, and the arrangement carries the meaning: - the CORPUS badge belongs in the identity row, beside the namespace. "2 apps · 2 views · 20 controls" is what this repository IS, not what a run made of it. - the CHECKS badge REPLACES the check-abap2ui5 workflow badge instead of standing beside it. A workflow badge only says the job exited zero, which was equally true while the linter could not read a single view here; the endpoint says how many rules passed, and goes grey when there is nothing to check. Carrying both said the weaker thing twice. Where the linter runs as one job of a broader `check` workflow rather than in a dedicated one, that workflow badge stays - it reports abaplint and the build gates too, which the endpoint does not. Also fixed while rearranging: the ABAP badge was linking to `#install` in every repository, and only three of them have such a section. It links to the real heading where there is one and is a plain image where there is not - a badge whose link goes nowhere being the thing this audit was about. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XUhL1rra5QZbr4hV14YZXM
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This repository does not compile on
maintoday. Part of an audit across all thirteen abap2UI5 repositories.The four errors
custom-controlsrenamed the class toz2ui5_cl_cci_spreadsheetwhen it moved to theccinamespace. This repository was never updated, and with no scheduled run and no pull request in between, nothing said so.The fix, and why it is more than a rename
The export control's XML element was being built here by hand —
tag( n = 'ExportSpreadsheet' ns = 'z2ui5' )with its attributes — while custom-controls owned the JavaScript. That is what let the two drift apart in the first place: a rename on one side could not reach the other.z2ui5_cl_cci_spreadsheet=>render( )owns the tag now. The exporter's JavaScript, which used to be injected into anhtml:scripttag through_cc_plain_xml( z2ui5_cl_cc_spreadsheet=>get_js( ) ), arrives with the custom-controls BSP instead —get_js( )no longer exists, and the manual injection is the old delivery mechanism.NEW z2ui5_cl_cc_spreadsheet( )as a JSON filter becomesNEW z2ui5_cl_cci_json_filter( ).The views
Both app classes move from
z2ui5_cl_xml_view(frozen,src/99, outside the released API) toz2ui5_cl_ui5_view_builder(src/02). The translation was derived from the old class's own source — which control each of its 455 methods stands for, which parameter becomes which attribute, which went throughboolean_abap_2_json( ).Two things the old builder did silently: it declared the namespaces itself, and it turned a boolean into
true/false. The new root declaresxmlns:editor,xmlns:layout,xmlns:tableandxmlns:z2ui5by hand — a prefix used but not declared makes the view fail to parse — and booleans go intob =, whereabap_falserenders asfalserather than the empty string UI5 reads as true.CI
ABAP_CLOUD.yaml→abap-cloud.yaml,rename_test.yaml→check-rename.yaml,build_rename.yaml→build-rename.yaml.checkandtest; three dead README badges removed (ABAP_702,auto_cloud,auto_downport— workflows this repository does not have).Verification
abaplint over all eleven addon repositories at once, before and after: 285 findings → 271, the difference entirely findings that are gone — these four among them. The view gate reports 2 files, 0 failing.
Generated by Claude Code