Skip to content

feat: support dot-path namespace names#186

Open
SoundMatt wants to merge 1 commit into
COVESA:masterfrom
SoundMatt:feat/ifex-93-dot-path-namespace
Open

feat: support dot-path namespace names#186
SoundMatt wants to merge 1 commit into
COVESA:masterfrom
SoundMatt:feat/ifex-93-dot-path-namespace

Conversation

@SoundMatt

Copy link
Copy Markdown

Closes #93

Summary

A namespace name containing dots (e.g. name: com.example.vehicle) is now expanded to the equivalent nested structure at parse time:

# These two files now produce identical ASTs:

# dot-path form
namespaces:
  - name: com.example.vehicle
    methods:
      - name: start

# explicit nesting
namespaces:
  - name: com
    namespaces:
      - name: example
        namespaces:
          - name: vehicle
            methods:
              - name: start

Implementation

_expand_dot_namespace() is added to ifex_parser.py and called from get_ast_from_yaml_file() immediately after dacite.from_dict(). It recursively processes the namespace tree, splitting any dot-path name into nested Namespace objects. All content (methods, properties, events, structs, typedefs, enumerations, interface, child namespaces) is moved to the innermost namespace; intermediate layers are empty containers.

Since all generation tools share the same parser entry point, they all benefit automatically without individual changes.

Tests

tests/test_dot_path_namespace/ contains:

  • dotpath.ifex / nested.ifex — equivalent YAML fixtures
  • test_dot_path_namespace.py — three test cases:
    1. Full three-part dot path produces same namespace tree as explicit nesting, with content in innermost
    2. Plain (non-dot) namespace names are unchanged
    3. Unit test of _expand_dot_namespace() directly for a two-part path

A namespace like `name: A.B.C` is now expanded to the same AST as
explicitly nested `A -> B -> C` namespaces.  All content (methods,
properties, events, structs, typedefs, enumerations, interface) is
placed on the innermost namespace; intermediate layers are empty
containers.  Expansion is recursive so children of a dot-path
namespace are also expanded.

Implementation: `_expand_dot_namespace()` in ifex_parser.py, called
from `get_ast_from_yaml_file()` immediately after dacite conversion.
All generation tools benefit automatically since they all go through
the same parser entry point.

Tests: three pytest cases cover full three-part path equivalence,
plain names staying unchanged, and a two-part path unit-tested
directly against the helper function.

Signed-off-by: Matt Jones <47545907+SoundMatt@users.noreply.github.com>
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.

Support dot-path as full name for Namespace

1 participant