Skip to content

Support multiple extends clauses per class#566

Open
AntoineGautier wants to merge 14 commits into
mainfrom
ag/507-multiple-extends
Open

Support multiple extends clauses per class#566
AntoineGautier wants to merge 14 commits into
mainfrom
ag/507-multiple-extends

Conversation

@AntoineGautier
Copy link
Copy Markdown
Collaborator

@AntoineGautier AntoineGautier commented May 20, 2026

Description

Closes #507.

A Modelica class can have more than one extends clause, but the parser only handled a single one — other clauses were silently ignored. This PR fixes that and cleans up expression handling that was blocking the schedule builder from working correctly with these expanded classes.

Dependencies

This includes #561 and #565, and should be merged after those PR.

Testing

Unit tests have been included to validate the comparison with literal string assignment, where the literal string matches an instance name in the loaded context: docker exec ctrl-flow sh -c 'cd /server && npx jest -t "Multiple extends clauses"'

End-to-end tests have also been performed by creating the SOO document with the following system options.

AHU

  • Separate dampers w/ dp
  • Modulating relief w/o fan
  • No heating coil
  • Freeze stat hardwired to both

Cooling-only box

  • 3 sensors = true

✅ The parameter dialogs are identical to the ones on main.
✅ The feature branch produces the same document as the main branch.

The fix has two parts:

1. **`transformIgnorePatterns`** — overrides the default "ignore all of
`node_modules`" rule, telling Jest it *should* transform uuid package.
2. **`babel-jest` transform + `babel.config.js`** — provides the actual
transformer for `.js` files, using `@babel/preset-env` targeting the
current Node version to convert ESM to CommonJS that Jest can consume.
Remove the `expandStringOperand` function and `evaluateExpression`
calls. Expressions are now kept in their raw form (strings or objects)
and only evaluated on the client side. This simplifies the server logic
and allows the client to handle type resolution in its own context.

Update type annotations to use `Expression | Literal` where applicable.
Replace single extend properties with extendsInfo array and
provide backward-compatible getters.
Extends clause modifiers must only apply to parameters at the
current level. Mutating the original modMap caused values to
propagate into nested component scopes, creating self-referencing
parameters. A separate localModMap is used for extractAttributes
calls while preserving modMap for child component scopes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Multiple extends clauses not supported

1 participant