Browse Source

docs(tools): correct the propagated branch-name example to the index-derived 1

Chinesezjc 2 months ago
parent
commit
581d2ee621
2 changed files with 8 additions and 4 deletions
  1. 5 2
      packages/core/tools/src/py-types.ts
  2. 3 2
      packages/core/tools/tests/py-types.spec.ts

+ 5 - 2
packages/core/tools/src/py-types.ts

@@ -428,8 +428,11 @@ function renderType(schema: unknown, className: string, state: RenderState): str
           // there is no naming context to declare into, so degrade. This reads
           // the CALL's className, not `frame.className`: the marker belongs to
           // the whole walk, and frames propagate a derived name (a `oneOf`
-          // branch of the context-free root gets `Tool1`), so a per-frame read
-          // would declare classes the caller has no way to receive. A field
+          // branch of the context-free root gets the index-derived name `1` —
+          // `childClassName` concatenates and caps, it does not go through
+          // `camelCase`), so a per-frame read would declare classes the caller
+          // has no way to receive, under a name that is not even a legal
+          // identifier: `class 1(TypedDict):`. A field
           // name that is not a legal Python attribute is inexpressible as a
           // class-syntax `TypedDict` field, so such an object degrades whole.
           // A leading-double-underscore non-dunder field (`__token`) would be

+ 3 - 2
packages/core/tools/tests/py-types.spec.ts

@@ -250,8 +250,9 @@ describe('renderToolsSdkPy', () => {
     })
     expect(type).toBe('dict[str, Any] | str')
     // Both branches objects, and the same shape reached through an array: the
-    // marker is the CALL's className, so a propagated frame name (`Tool1`) does
-    // not revive class declaration on a walk that has nowhere to declare into.
+    // marker is the CALL's className, so a propagated frame name (`1`, the
+    // index-derived branch name) does not revive class declaration on a walk
+    // that has nowhere to declare into.
     const object = { type: 'object', additionalProperties: false, properties: { ok: { type: 'boolean' } }, required: ['ok'] }
     expect(jsonSchemaToPy({ oneOf: [object, object] })).toBe('dict[str, Any] | dict[str, Any]')
     expect(jsonSchemaToPy({ type: 'array', items: { oneOf: [object, { type: 'string' }] } })).toBe('list[dict[str, Any] | str]')