@gtkx/codegen 1.0.0-rc.4 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/dist/analysis/descriptor-render.d.ts +8 -1
- package/dist/analysis/descriptor-render.d.ts.map +1 -1
- package/dist/analysis/descriptor-render.js +37 -24
- package/dist/analysis/descriptor-render.js.map +1 -1
- package/dist/analysis/descriptor.d.ts +1 -1
- package/dist/analysis/descriptor.d.ts.map +1 -1
- package/dist/analysis/descriptor.js.map +1 -1
- package/dist/analysis/inheritance.d.ts +1 -2
- package/dist/analysis/inheritance.d.ts.map +1 -1
- package/dist/analysis/inheritance.js +25 -22
- package/dist/analysis/inheritance.js.map +1 -1
- package/dist/analysis/nul-terminated-bytes.d.ts +5 -0
- package/dist/analysis/nul-terminated-bytes.d.ts.map +1 -0
- package/dist/analysis/nul-terminated-bytes.js +18 -0
- package/dist/analysis/nul-terminated-bytes.js.map +1 -0
- package/dist/analysis/param-capability.d.ts +5 -0
- package/dist/analysis/param-capability.d.ts.map +1 -0
- package/dist/analysis/param-capability.js +130 -0
- package/dist/analysis/param-capability.js.map +1 -0
- package/dist/analysis/param-structure.d.ts +11 -4
- package/dist/analysis/param-structure.d.ts.map +1 -1
- package/dist/analysis/param-structure.js +40 -14
- package/dist/analysis/param-structure.js.map +1 -1
- package/dist/analysis/type-shape.d.ts +8 -0
- package/dist/analysis/type-shape.d.ts.map +1 -0
- package/dist/analysis/type-shape.js +12 -0
- package/dist/analysis/type-shape.js.map +1 -0
- package/dist/compile.d.ts +1 -1
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js.map +1 -1
- package/dist/docs/api-reference.d.ts +2 -2
- package/dist/docs/api-reference.d.ts.map +1 -1
- package/dist/docs/api-reference.js +7 -14
- package/dist/docs/api-reference.js.map +1 -1
- package/dist/docs/element-page.d.ts +4 -4
- package/dist/docs/element-page.d.ts.map +1 -1
- package/dist/docs/element-page.js +32 -20
- package/dist/docs/element-page.js.map +1 -1
- package/dist/docs/handwritten-props.d.ts +9 -0
- package/dist/docs/handwritten-props.d.ts.map +1 -0
- package/dist/docs/handwritten-props.js +149 -0
- package/dist/docs/handwritten-props.js.map +1 -0
- package/dist/docs/pipeline.js +2 -2
- package/dist/docs/pipeline.js.map +1 -1
- package/dist/docs/render.d.ts +25 -5
- package/dist/docs/render.d.ts.map +1 -1
- package/dist/docs/render.js +84 -22
- package/dist/docs/render.js.map +1 -1
- package/dist/docs/symbol-page.d.ts +17 -0
- package/dist/docs/symbol-page.d.ts.map +1 -1
- package/dist/docs/symbol-page.js +128 -43
- package/dist/docs/symbol-page.js.map +1 -1
- package/dist/fingerprint.d.ts +1 -1
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js.map +1 -1
- package/dist/gir/ancestry.d.ts +2 -2
- package/dist/gir/ancestry.d.ts.map +1 -1
- package/dist/gir/ancestry.js +11 -1
- package/dist/gir/ancestry.js.map +1 -1
- package/dist/gir/annotations.d.ts +22 -0
- package/dist/gir/annotations.d.ts.map +1 -0
- package/dist/gir/annotations.js +15 -0
- package/dist/gir/annotations.js.map +1 -0
- package/dist/gir/callback.d.ts +1 -0
- package/dist/gir/callback.d.ts.map +1 -1
- package/dist/gir/callback.js +1 -0
- package/dist/gir/callback.js.map +1 -1
- package/dist/gir/class.d.ts +32 -1
- package/dist/gir/class.d.ts.map +1 -1
- package/dist/gir/class.js +8 -3
- package/dist/gir/class.js.map +1 -1
- package/dist/gir/enum.d.ts +21 -1
- package/dist/gir/enum.d.ts.map +1 -1
- package/dist/gir/enum.js +9 -9
- package/dist/gir/enum.js.map +1 -1
- package/dist/gir/field.d.ts +19 -3
- package/dist/gir/field.d.ts.map +1 -1
- package/dist/gir/field.js +7 -8
- package/dist/gir/field.js.map +1 -1
- package/dist/gir/function.d.ts +15 -0
- package/dist/gir/function.d.ts.map +1 -1
- package/dist/gir/function.js.map +1 -1
- package/dist/gir/libraries.d.ts +1 -3
- package/dist/gir/libraries.d.ts.map +1 -1
- package/dist/gir/libraries.js +0 -1
- package/dist/gir/libraries.js.map +1 -1
- package/dist/gir/library.d.ts +36 -0
- package/dist/gir/library.d.ts.map +1 -1
- package/dist/gir/library.js +34 -0
- package/dist/gir/library.js.map +1 -1
- package/dist/gir/namespace.d.ts +38 -0
- package/dist/gir/namespace.d.ts.map +1 -1
- package/dist/gir/namespace.js +4 -5
- package/dist/gir/namespace.js.map +1 -1
- package/dist/gir/parameter.d.ts +39 -0
- package/dist/gir/parameter.d.ts.map +1 -1
- package/dist/gir/parameter.js +7 -3
- package/dist/gir/parameter.js.map +1 -1
- package/dist/gir/parse.d.ts +3 -1
- package/dist/gir/parse.d.ts.map +1 -1
- package/dist/gir/parse.js +6 -3
- package/dist/gir/parse.js.map +1 -1
- package/dist/gir/primitives.d.ts +1 -0
- package/dist/gir/primitives.d.ts.map +1 -1
- package/dist/gir/primitives.js.map +1 -1
- package/dist/gir/property.d.ts +16 -0
- package/dist/gir/property.d.ts.map +1 -1
- package/dist/gir/property.js +3 -3
- package/dist/gir/property.js.map +1 -1
- package/dist/gir/record.d.ts +22 -0
- package/dist/gir/record.d.ts.map +1 -1
- package/dist/gir/record.js +3 -2
- package/dist/gir/record.js.map +1 -1
- package/dist/gir/size.d.ts +5 -4
- package/dist/gir/size.d.ts.map +1 -1
- package/dist/gir/size.js.map +1 -1
- package/dist/gir/type-id.d.ts +35 -0
- package/dist/gir/type-id.d.ts.map +1 -1
- package/dist/gir/type-id.js +1 -0
- package/dist/gir/type-id.js.map +1 -1
- package/dist/gir/type-ref.d.ts.map +1 -1
- package/dist/gir/type-ref.js +1 -0
- package/dist/gir/type-ref.js.map +1 -1
- package/dist/gir/type.d.ts +20 -0
- package/dist/gir/type.d.ts.map +1 -1
- package/dist/gir/type.js.map +1 -1
- package/dist/khronos/args.d.ts +7 -6
- package/dist/khronos/args.d.ts.map +1 -1
- package/dist/khronos/args.js +28 -6
- package/dist/khronos/args.js.map +1 -1
- package/dist/khronos/doc-context.d.ts +29 -0
- package/dist/khronos/doc-context.d.ts.map +1 -0
- package/dist/khronos/doc-context.js +29 -0
- package/dist/khronos/doc-context.js.map +1 -0
- package/dist/khronos/extensions.d.ts +13 -0
- package/dist/khronos/extensions.d.ts.map +1 -0
- package/dist/khronos/extensions.js +49 -0
- package/dist/khronos/extensions.js.map +1 -0
- package/dist/khronos/jsdoc.d.ts +17 -11
- package/dist/khronos/jsdoc.d.ts.map +1 -1
- package/dist/khronos/jsdoc.js +104 -46
- package/dist/khronos/jsdoc.js.map +1 -1
- package/dist/khronos/model.d.ts +42 -3
- package/dist/khronos/model.d.ts.map +1 -1
- package/dist/khronos/model.js +218 -63
- package/dist/khronos/model.js.map +1 -1
- package/dist/khronos/modules.d.ts +9 -6
- package/dist/khronos/modules.d.ts.map +1 -1
- package/dist/khronos/modules.js +96 -26
- package/dist/khronos/modules.js.map +1 -1
- package/dist/khronos/notes.d.ts +19 -0
- package/dist/khronos/notes.d.ts.map +1 -0
- package/dist/khronos/notes.js +35 -0
- package/dist/khronos/notes.js.map +1 -0
- package/dist/khronos/param-pair.d.ts +1 -1
- package/dist/khronos/param-pair.d.ts.map +1 -1
- package/dist/khronos/param-pair.js.map +1 -1
- package/dist/khronos/pipeline.d.ts +3 -1
- package/dist/khronos/pipeline.d.ts.map +1 -1
- package/dist/khronos/pipeline.js +58 -27
- package/dist/khronos/pipeline.js.map +1 -1
- package/dist/khronos/plan.d.ts +3 -3
- package/dist/khronos/plan.d.ts.map +1 -1
- package/dist/khronos/plan.js +2 -2
- package/dist/khronos/plan.js.map +1 -1
- package/dist/khronos/render.d.ts +8 -6
- package/dist/khronos/render.d.ts.map +1 -1
- package/dist/khronos/render.js +35 -26
- package/dist/khronos/render.js.map +1 -1
- package/dist/khronos/select.d.ts +21 -4
- package/dist/khronos/select.d.ts.map +1 -1
- package/dist/khronos/select.js +47 -34
- package/dist/khronos/select.js.map +1 -1
- package/dist/react/element-config.d.ts +2 -2
- package/dist/react/element-config.d.ts.map +1 -1
- package/dist/react/element-config.js.map +1 -1
- package/dist/runner.d.ts +1 -7
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js.map +1 -1
- package/dist/store/compile-store.d.ts +1 -1
- package/dist/store/compile-store.d.ts.map +1 -1
- package/dist/store/compile-store.js.map +1 -1
- package/dist/store/gi/callable-doc.d.ts +11 -0
- package/dist/store/gi/callable-doc.d.ts.map +1 -0
- package/dist/store/gi/callable-doc.js +62 -0
- package/dist/store/gi/callable-doc.js.map +1 -0
- package/dist/store/gi/callables.d.ts +3 -1
- package/dist/store/gi/callables.d.ts.map +1 -1
- package/dist/store/gi/callables.js +12 -12
- package/dist/store/gi/callables.js.map +1 -1
- package/dist/store/gi/callback.d.ts.map +1 -1
- package/dist/store/gi/callback.js +2 -2
- package/dist/store/gi/callback.js.map +1 -1
- package/dist/store/gi/class.d.ts.map +1 -1
- package/dist/store/gi/class.js +5 -3
- package/dist/store/gi/class.js.map +1 -1
- package/dist/store/gi/closure-invocation.d.ts +4 -0
- package/dist/store/gi/closure-invocation.d.ts.map +1 -0
- package/dist/store/gi/closure-invocation.js +22 -0
- package/dist/store/gi/closure-invocation.js.map +1 -0
- package/dist/store/gi/constant.d.ts.map +1 -1
- package/dist/store/gi/constant.js +3 -2
- package/dist/store/gi/constant.js.map +1 -1
- package/dist/store/gi/constructor-props.d.ts.map +1 -1
- package/dist/store/gi/constructor-props.js +18 -20
- package/dist/store/gi/constructor-props.js.map +1 -1
- package/dist/store/gi/doc-spec.d.ts +14 -0
- package/dist/store/gi/doc-spec.d.ts.map +1 -0
- package/dist/store/gi/doc-spec.js +23 -0
- package/dist/store/gi/doc-spec.js.map +1 -0
- package/dist/store/gi/enum.d.ts.map +1 -1
- package/dist/store/gi/enum.js +29 -16
- package/dist/store/gi/enum.js.map +1 -1
- package/dist/store/gi/function.d.ts.map +1 -1
- package/dist/store/gi/function.js +27 -12
- package/dist/store/gi/function.js.map +1 -1
- package/dist/store/gi/interface.d.ts.map +1 -1
- package/dist/store/gi/interface.js +130 -16
- package/dist/store/gi/interface.js.map +1 -1
- package/dist/store/gi/item-comparators.d.ts.map +1 -1
- package/dist/store/gi/item-comparators.js +3 -5
- package/dist/store/gi/item-comparators.js.map +1 -1
- package/dist/store/gi/method.d.ts +9 -1
- package/dist/store/gi/method.d.ts.map +1 -1
- package/dist/store/gi/method.js +69 -26
- package/dist/store/gi/method.js.map +1 -1
- package/dist/store/gi/param-marshal.d.ts +4 -1
- package/dist/store/gi/param-marshal.d.ts.map +1 -1
- package/dist/store/gi/param-marshal.js +5 -1
- package/dist/store/gi/param-marshal.js.map +1 -1
- package/dist/store/gi/pipeline.d.ts.map +1 -1
- package/dist/store/gi/pipeline.js +3 -2
- package/dist/store/gi/pipeline.js.map +1 -1
- package/dist/store/gi/properties.d.ts.map +1 -1
- package/dist/store/gi/properties.js +2 -2
- package/dist/store/gi/properties.js.map +1 -1
- package/dist/store/gi/property-accessor.d.ts +3 -1
- package/dist/store/gi/property-accessor.d.ts.map +1 -1
- package/dist/store/gi/property-accessor.js +6 -5
- package/dist/store/gi/property-accessor.js.map +1 -1
- package/dist/store/gi/record-constructor.d.ts.map +1 -1
- package/dist/store/gi/record-constructor.js +3 -1
- package/dist/store/gi/record-constructor.js.map +1 -1
- package/dist/store/gi/record-field-accessor.d.ts +3 -1
- package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
- package/dist/store/gi/record-field-accessor.js +3 -2
- package/dist/store/gi/record-field-accessor.js.map +1 -1
- package/dist/store/gi/record-layout.js +1 -1
- package/dist/store/gi/record-layout.js.map +1 -1
- package/dist/store/gi/record.d.ts.map +1 -1
- package/dist/store/gi/record.js +3 -2
- package/dist/store/gi/record.js.map +1 -1
- package/dist/store/gi/registration.d.ts +1 -1
- package/dist/store/gi/registration.js +2 -2
- package/dist/store/gi/registration.js.map +1 -1
- package/dist/store/gi/runtime-override.d.ts +2 -1
- package/dist/store/gi/runtime-override.d.ts.map +1 -1
- package/dist/store/gi/runtime-override.js +8 -5
- package/dist/store/gi/runtime-override.js.map +1 -1
- package/dist/store/gi/signal.d.ts.map +1 -1
- package/dist/store/gi/signal.js +14 -15
- package/dist/store/gi/signal.js.map +1 -1
- package/dist/store/gi/value-marshalable.d.ts +1 -2
- package/dist/store/gi/value-marshalable.d.ts.map +1 -1
- package/dist/store/gi/value-marshalable.js +1 -1
- package/dist/store/gi/value-marshalable.js.map +1 -1
- package/dist/store/gi/vtable.d.ts +16 -1
- package/dist/store/gi/vtable.d.ts.map +1 -1
- package/dist/store/gi/vtable.js +214 -51
- package/dist/store/gi/vtable.js.map +1 -1
- package/dist/store/jsx/element-components.d.ts +1 -1
- package/dist/store/jsx/element-components.d.ts.map +1 -1
- package/dist/store/jsx/element-components.js +6 -4
- package/dist/store/jsx/element-components.js.map +1 -1
- package/dist/store/jsx/element-prop-imports.d.ts +1 -3
- package/dist/store/jsx/element-prop-imports.d.ts.map +1 -1
- package/dist/store/jsx/element-prop-imports.js.map +1 -1
- package/dist/store/jsx/element-prop-types.d.ts +3 -0
- package/dist/store/jsx/element-prop-types.d.ts.map +1 -1
- package/dist/store/jsx/element-prop-types.js +7 -1
- package/dist/store/jsx/element-prop-types.js.map +1 -1
- package/dist/store/jsx/intrinsic-elements.d.ts +4 -0
- package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -1
- package/dist/store/jsx/intrinsic-elements.js.map +1 -1
- package/dist/store/jsx/jsx.d.ts.map +1 -1
- package/dist/store/jsx/jsx.js +7 -6
- package/dist/store/jsx/jsx.js.map +1 -1
- package/dist/store/jsx/metadata.js +2 -2
- package/dist/store/jsx/metadata.js.map +1 -1
- package/dist/store/jsx/pipeline.d.ts +1 -1
- package/dist/store/jsx/pipeline.d.ts.map +1 -1
- package/dist/store/jsx/pipeline.js.map +1 -1
- package/dist/store/jsx/props.d.ts +1 -7
- package/dist/store/jsx/props.d.ts.map +1 -1
- package/dist/store/jsx/props.js +14 -6
- package/dist/store/jsx/props.js.map +1 -1
- package/dist/writer/context.d.ts +2 -1
- package/dist/writer/context.d.ts.map +1 -1
- package/dist/writer/context.js +3 -0
- package/dist/writer/context.js.map +1 -1
- package/dist/writer/doc-tags.d.ts +21 -0
- package/dist/writer/doc-tags.d.ts.map +1 -0
- package/dist/writer/doc-tags.js +38 -0
- package/dist/writer/doc-tags.js.map +1 -0
- package/dist/writer/doc.d.ts +3 -1
- package/dist/writer/doc.d.ts.map +1 -1
- package/dist/writer/doc.js +19 -6
- package/dist/writer/doc.js.map +1 -1
- package/dist/writer/gtk-doc.d.ts +1 -1
- package/dist/writer/gtk-doc.d.ts.map +1 -1
- package/dist/writer/gtk-doc.js +64 -15
- package/dist/writer/gtk-doc.js.map +1 -1
- package/dist/writer/module.d.ts +8 -2
- package/dist/writer/module.d.ts.map +1 -1
- package/dist/writer/module.js +13 -1
- package/dist/writer/module.js.map +1 -1
- package/overrides/gdk/rgba.ts.ejs +26 -0
- package/overrides/gobject/object.ts.ejs +48 -3
- package/overrides/gobject/value.ts.ejs +7 -0
- package/overrides/graphene/structs.ts.ejs +55 -0
- package/package.json +4 -4
- package/src/analysis/descriptor-render.ts +47 -28
- package/src/analysis/descriptor.ts +0 -3
- package/src/analysis/inheritance.ts +35 -34
- package/src/analysis/nul-terminated-bytes.ts +31 -0
- package/src/analysis/param-capability.ts +172 -0
- package/src/analysis/param-structure.ts +83 -23
- package/src/analysis/type-shape.ts +24 -0
- package/src/compile.ts +1 -1
- package/src/docs/api-reference.ts +36 -25
- package/src/docs/element-page.ts +53 -47
- package/src/docs/handwritten-props.ts +230 -0
- package/src/docs/pipeline.ts +2 -2
- package/src/docs/render.ts +146 -32
- package/src/docs/symbol-page.ts +224 -79
- package/src/fingerprint.ts +0 -1
- package/src/gir/ancestry.ts +15 -1
- package/src/gir/annotations.ts +37 -0
- package/src/gir/callback.ts +2 -0
- package/src/gir/class.ts +42 -4
- package/src/gir/enum.ts +30 -10
- package/src/gir/field.ts +24 -9
- package/src/gir/function.ts +15 -0
- package/src/gir/libraries.ts +11 -3
- package/src/gir/library.ts +51 -2
- package/src/gir/namespace.ts +41 -5
- package/src/gir/parameter.ts +47 -3
- package/src/gir/parse.ts +8 -2
- package/src/gir/primitives.ts +1 -0
- package/src/gir/property.ts +18 -3
- package/src/gir/record.ts +24 -2
- package/src/gir/size.ts +8 -3
- package/src/gir/type-id.ts +49 -3
- package/src/gir/type-ref.ts +1 -0
- package/src/gir/type.ts +50 -6
- package/src/khronos/args.ts +36 -13
- package/src/khronos/doc-context.ts +62 -0
- package/src/khronos/extensions.ts +85 -0
- package/src/khronos/jsdoc.ts +152 -56
- package/src/khronos/model.ts +314 -69
- package/src/khronos/modules.ts +134 -40
- package/src/khronos/notes.ts +74 -0
- package/src/khronos/param-pair.ts +1 -1
- package/src/khronos/pipeline.ts +94 -41
- package/src/khronos/plan.ts +4 -5
- package/src/khronos/render.ts +62 -50
- package/src/khronos/select.ts +91 -50
- package/src/react/element-config.ts +2 -2
- package/src/runner.ts +1 -8
- package/src/store/compile-store.ts +1 -1
- package/src/store/gi/callable-doc.ts +102 -0
- package/src/store/gi/callables.ts +18 -12
- package/src/store/gi/callback.ts +3 -2
- package/src/store/gi/class.ts +6 -3
- package/src/store/gi/closure-invocation.ts +26 -0
- package/src/store/gi/constant.ts +3 -4
- package/src/store/gi/constructor-props.ts +19 -23
- package/src/store/gi/doc-spec.ts +38 -0
- package/src/store/gi/enum.ts +55 -20
- package/src/store/gi/function.ts +43 -21
- package/src/store/gi/interface.ts +214 -26
- package/src/store/gi/item-comparators.ts +3 -5
- package/src/store/gi/method.ts +98 -42
- package/src/store/gi/param-marshal.ts +15 -1
- package/src/store/gi/pipeline.ts +7 -2
- package/src/store/gi/properties.ts +3 -2
- package/src/store/gi/property-accessor.ts +9 -4
- package/src/store/gi/record-constructor.ts +6 -1
- package/src/store/gi/record-field-accessor.ts +5 -3
- package/src/store/gi/record-layout.ts +1 -1
- package/src/store/gi/record.ts +8 -2
- package/src/store/gi/registration.ts +3 -3
- package/src/store/gi/runtime-override.ts +13 -6
- package/src/store/gi/signal.ts +19 -20
- package/src/store/gi/value-marshalable.ts +1 -1
- package/src/store/gi/vtable.ts +361 -60
- package/src/store/jsx/element-components.ts +8 -5
- package/src/store/jsx/element-prop-imports.ts +1 -3
- package/src/store/jsx/element-prop-types.ts +10 -1
- package/src/store/jsx/intrinsic-elements.ts +4 -0
- package/src/store/jsx/jsx.ts +8 -6
- package/src/store/jsx/metadata.ts +2 -2
- package/src/store/jsx/pipeline.ts +1 -1
- package/src/store/jsx/props.ts +20 -7
- package/src/writer/context.ts +5 -1
- package/src/writer/doc-tags.ts +70 -0
- package/src/writer/doc.ts +29 -6
- package/src/writer/gtk-doc.ts +82 -15
- package/src/writer/module.ts +25 -2
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import type { GirCallable, GirParameter } from "../gir/parameter.js";
|
|
2
|
+
import type { CArrayType, TypeId } from "../gir/type-id.js";
|
|
3
|
+
import type { GirType } from "../gir/type.js";
|
|
4
|
+
import type { ModuleContext } from "../writer/context.js";
|
|
5
|
+
import { isCallerAllocatedOut, isInoutParameter } from "../gir/parameter.js";
|
|
6
|
+
import { constructibleName } from "../store/gi/method.js";
|
|
7
|
+
import { isCollectibleCallerOut, isHandlePassedInPlace, underlyingType } from "../store/gi/param-marshal.js";
|
|
8
|
+
import { isScalarRef, recordInlineSize } from "./descriptor-render.js";
|
|
9
|
+
|
|
10
|
+
const POINTER_DEPTH = 1;
|
|
11
|
+
|
|
12
|
+
const isPointerType = (context: ModuleContext, type: GirType): boolean => {
|
|
13
|
+
switch (type.kind) {
|
|
14
|
+
case "primitive": {
|
|
15
|
+
return type.category === "string";
|
|
16
|
+
}
|
|
17
|
+
case "record": {
|
|
18
|
+
return recordInlineSize(context, type.value) === undefined;
|
|
19
|
+
}
|
|
20
|
+
case "class":
|
|
21
|
+
case "interface":
|
|
22
|
+
case "carray":
|
|
23
|
+
case "list":
|
|
24
|
+
case "hashtable": {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
case "alias":
|
|
28
|
+
case "callback":
|
|
29
|
+
case "enum":
|
|
30
|
+
case "varargs": {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const isPointerElement = (context: ModuleContext, element: TypeId): boolean => {
|
|
37
|
+
if (isScalarRef(context.library, element)) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const type = underlyingType(context, element);
|
|
42
|
+
|
|
43
|
+
return type !== undefined && isPointerType(context, type);
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const carrayIndirection = (context: ModuleContext, type: CArrayType): number =>
|
|
47
|
+
POINTER_DEPTH + (isPointerElement(context, type.element) ? POINTER_DEPTH : 0);
|
|
48
|
+
|
|
49
|
+
const typeIndirection = (context: ModuleContext, type: GirType): number | undefined => {
|
|
50
|
+
switch (type.kind) {
|
|
51
|
+
case "primitive": {
|
|
52
|
+
return type.category === "string" ? POINTER_DEPTH : undefined;
|
|
53
|
+
}
|
|
54
|
+
case "callback":
|
|
55
|
+
case "class":
|
|
56
|
+
case "hashtable":
|
|
57
|
+
case "interface":
|
|
58
|
+
case "list":
|
|
59
|
+
case "record": {
|
|
60
|
+
return POINTER_DEPTH;
|
|
61
|
+
}
|
|
62
|
+
case "carray": {
|
|
63
|
+
return carrayIndirection(context, type);
|
|
64
|
+
}
|
|
65
|
+
case "alias":
|
|
66
|
+
case "enum":
|
|
67
|
+
case "varargs": {
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
const baseIndirection = (context: ModuleContext, ref: TypeId | undefined): number | undefined => {
|
|
74
|
+
if (isScalarRef(context.library, ref)) {
|
|
75
|
+
return 0;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const type = ref === undefined ? undefined : underlyingType(context, ref);
|
|
79
|
+
|
|
80
|
+
return type === undefined ? undefined : typeIndirection(context, type);
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
const declaredIndirection = (parameter: GirParameter): number | undefined => {
|
|
84
|
+
const cType = parameter.cType;
|
|
85
|
+
|
|
86
|
+
if (cType === undefined) {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return cType.split("*").length - 1;
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
const marshalledIndirection = (context: ModuleContext, parameter: GirParameter): number | undefined => {
|
|
94
|
+
const base = baseIndirection(context, parameter.type);
|
|
95
|
+
|
|
96
|
+
if (base === undefined) {
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (isCallerAllocatedOut(parameter) || isHandlePassedInPlace(context, parameter)) {
|
|
101
|
+
return base;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (isInoutParameter(parameter) && !isScalarRef(context.library, parameter.type)) {
|
|
105
|
+
return base;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return base + POINTER_DEPTH;
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
const hasCallerSuppliedLength = (context: ModuleContext, parameter: GirParameter): boolean => {
|
|
112
|
+
const type = parameter.type === undefined ? undefined : underlyingType(context, parameter.type);
|
|
113
|
+
|
|
114
|
+
return type?.kind === "carray" && type.lengthParameterIndex !== undefined;
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
const isUnbuildableCallerOut = (context: ModuleContext, parameter: GirParameter): boolean =>
|
|
118
|
+
constructibleName(context, parameter.type) === undefined || !isCollectibleCallerOut(context, parameter);
|
|
119
|
+
|
|
120
|
+
const isUnmarshalableCallerOut = (context: ModuleContext, parameter: GirParameter): boolean => {
|
|
121
|
+
if (hasCallerSuppliedLength(context, parameter)) {
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return isUnbuildableCallerOut(context, parameter) && !parameter.optional;
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
const hasIndirectionMismatch = (context: ModuleContext, parameter: GirParameter): boolean => {
|
|
129
|
+
const declared = declaredIndirection(parameter);
|
|
130
|
+
const marshalled = marshalledIndirection(context, parameter);
|
|
131
|
+
|
|
132
|
+
if (declared === undefined || marshalled === undefined) {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return declared !== marshalled;
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
const isTypeErasedCallback = (context: ModuleContext, parameter: GirParameter): boolean => {
|
|
140
|
+
if (parameter.closureIndex === undefined) {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
const type = parameter.type === undefined ? undefined : underlyingType(context, parameter.type);
|
|
145
|
+
|
|
146
|
+
return type?.kind === "callback" && type.value.parameters.length === 0;
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
const isUnmarshalableCallParam = (context: ModuleContext, parameter: GirParameter): boolean => {
|
|
150
|
+
if (parameter.isVarargs) {
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
if (isTypeErasedCallback(context, parameter)) {
|
|
155
|
+
return true;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
if (parameter.direction === "in") {
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
if (isCallerAllocatedOut(parameter)) {
|
|
163
|
+
return isUnmarshalableCallerOut(context, parameter);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return hasIndirectionMismatch(context, parameter);
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
const hasUnmarshalableParam = (context: ModuleContext, callable: GirCallable): boolean =>
|
|
170
|
+
callable.parameters.some((parameter) => isUnmarshalableCallParam(context, parameter));
|
|
171
|
+
|
|
172
|
+
export { hasUnmarshalableParam };
|
|
@@ -2,6 +2,7 @@ import { toCamelIdentifier } from "@gtkx/utils";
|
|
|
2
2
|
import type { GirFunction } from "../gir/function.js";
|
|
3
3
|
import type { Library } from "../gir/library.js";
|
|
4
4
|
import type { TypeId } from "../gir/type-id.js";
|
|
5
|
+
import type { JsDocParam } from "../writer/doc-tags.js";
|
|
5
6
|
import { type GirCallable, type GirParameter, isCallerAllocatedOut, isOutParameter } from "../gir/parameter.js";
|
|
6
7
|
import { isCellInout, shouldOmitPrimaryReturn } from "./descriptor-render.js";
|
|
7
8
|
|
|
@@ -16,6 +17,7 @@ type HandlerResultOptions = {
|
|
|
16
17
|
renderType: (ref: TypeId | undefined, isNullable: boolean) => string;
|
|
17
18
|
shouldIncludeCallerAllocated: boolean;
|
|
18
19
|
isOptOut: boolean;
|
|
20
|
+
shouldExcludeOut?: (parameter: GirParameter) => boolean;
|
|
19
21
|
};
|
|
20
22
|
|
|
21
23
|
const isInputParameter = (options: {
|
|
@@ -108,7 +110,7 @@ const carrayLengthIndex = (library: Library, ref: TypeId | undefined): number |
|
|
|
108
110
|
return type.lengthParameterIndex;
|
|
109
111
|
};
|
|
110
112
|
|
|
111
|
-
const arrayLengthSources = (library: Library, fn:
|
|
113
|
+
const arrayLengthSources = (library: Library, fn: GirCallable): Map<number, number> => {
|
|
112
114
|
const map: Map<number, number> = new Map();
|
|
113
115
|
|
|
114
116
|
for (const [index, parameter] of fn.parameters.entries()) {
|
|
@@ -122,19 +124,7 @@ const arrayLengthSources = (library: Library, fn: GirFunction): Map<number, numb
|
|
|
122
124
|
return map;
|
|
123
125
|
};
|
|
124
126
|
|
|
125
|
-
const
|
|
126
|
-
for (const arrayIndex of arrayLengthSources(library, fn).values()) {
|
|
127
|
-
const array = fn.parameters[arrayIndex];
|
|
128
|
-
|
|
129
|
-
if (array !== undefined && isCallerAllocatedOut(array)) {
|
|
130
|
-
return true;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
return false;
|
|
135
|
-
};
|
|
136
|
-
|
|
137
|
-
const returnArrayLengthIndices = (library: Library, fn: GirFunction): Set<number> => {
|
|
127
|
+
const returnArrayLengthIndices = (library: Library, fn: GirCallable): Set<number> => {
|
|
138
128
|
const returnType = fn.returnValue.type === undefined ? undefined : library.typeFor(fn.returnValue.type);
|
|
139
129
|
|
|
140
130
|
if (returnType?.kind !== "carray") {
|
|
@@ -150,7 +140,7 @@ const returnArrayLengthIndices = (library: Library, fn: GirFunction): Set<number
|
|
|
150
140
|
return new Set([lengthIndex]);
|
|
151
141
|
};
|
|
152
142
|
|
|
153
|
-
const foldedLengthIndices = (library: Library, fn:
|
|
143
|
+
const foldedLengthIndices = (library: Library, fn: GirCallable): Set<number> => {
|
|
154
144
|
const indices: Set<number> = new Set(arrayLengthSources(library, fn).keys());
|
|
155
145
|
|
|
156
146
|
for (const index of returnArrayLengthIndices(library, fn)) {
|
|
@@ -160,6 +150,20 @@ const foldedLengthIndices = (library: Library, fn: GirFunction): Set<number> =>
|
|
|
160
150
|
return indices;
|
|
161
151
|
};
|
|
162
152
|
|
|
153
|
+
const foldedLengthParameters = (library: Library, fn: GirCallable): Set<GirParameter> => {
|
|
154
|
+
const folded: Set<GirParameter> = new Set();
|
|
155
|
+
|
|
156
|
+
for (const index of foldedLengthIndices(library, fn)) {
|
|
157
|
+
const parameter = fn.parameters[index];
|
|
158
|
+
|
|
159
|
+
if (parameter !== undefined) {
|
|
160
|
+
folded.add(parameter);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
return folded;
|
|
165
|
+
};
|
|
166
|
+
|
|
163
167
|
const parameterIdentifier = (parameter: GirParameter, index: number): string => {
|
|
164
168
|
if (parameter.name.length === 0) {
|
|
165
169
|
return `arg${String(index)}`;
|
|
@@ -168,17 +172,62 @@ const parameterIdentifier = (parameter: GirParameter, index: number): string =>
|
|
|
168
172
|
return toCamelIdentifier(parameter.name);
|
|
169
173
|
};
|
|
170
174
|
|
|
175
|
+
const handlerParameters = (
|
|
176
|
+
parameters: GirParameter[],
|
|
177
|
+
shouldExclude: (parameter: GirParameter) => boolean = () => false,
|
|
178
|
+
): GirParameter[] =>
|
|
179
|
+
parameters.filter(
|
|
180
|
+
(parameter) => !parameter.isVarargs && !isOutParameter(parameter) && !shouldExclude(parameter),
|
|
181
|
+
);
|
|
182
|
+
|
|
183
|
+
const documentedParameters = (
|
|
184
|
+
library: Library,
|
|
185
|
+
fn: GirFunction,
|
|
186
|
+
shouldSkip: (parameter: GirParameter) => boolean = () => false,
|
|
187
|
+
renames?: Map<string, string>,
|
|
188
|
+
): JsDocParam[] =>
|
|
189
|
+
inputParameters(library, fn)
|
|
190
|
+
.filter(({ parameter }) => !shouldSkip(parameter))
|
|
191
|
+
.map(({ parameter, index }) => ({
|
|
192
|
+
name: renames?.get(parameter.name) ?? parameterIdentifier(parameter, index),
|
|
193
|
+
doc: parameter.doc ?? "",
|
|
194
|
+
}))
|
|
195
|
+
.filter((entry) => entry.doc.length > 0);
|
|
196
|
+
|
|
197
|
+
const documentedHandlerParameters = (parameters: GirParameter[]): JsDocParam[] =>
|
|
198
|
+
handlerParameters(parameters)
|
|
199
|
+
.map((parameter, index) => ({ name: parameterIdentifier(parameter, index), doc: parameter.doc ?? "" }))
|
|
200
|
+
.filter((entry) => entry.doc.length > 0);
|
|
201
|
+
|
|
202
|
+
const handlerRenames = (parameters: GirParameter[]): Map<string, string> => {
|
|
203
|
+
const renames: Map<string, string> = new Map();
|
|
204
|
+
|
|
205
|
+
for (const [index, parameter] of parameters.entries()) {
|
|
206
|
+
renames.set(parameter.name, parameterIdentifier(parameter, index));
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
return renames;
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
const renamesWithInstance = (parameters: GirParameter[], instance: GirParameter | undefined): Map<string, string> => {
|
|
213
|
+
const renames = handlerRenames(parameters);
|
|
214
|
+
|
|
215
|
+
if (instance !== undefined && instance.name.length > 0) {
|
|
216
|
+
renames.set(instance.name, "this");
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
return renames;
|
|
220
|
+
};
|
|
221
|
+
|
|
171
222
|
const renderHandlerParameters = (
|
|
172
223
|
parameters: GirParameter[],
|
|
173
224
|
renderType: (ref: TypeId | undefined, isNullable: boolean) => string,
|
|
174
225
|
shouldExclude: (parameter: GirParameter) => boolean = () => false,
|
|
175
226
|
): string[] =>
|
|
176
|
-
parameters
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
`${parameterIdentifier(parameter, index)}: ${renderType(parameter.type, parameter.nullable)}`,
|
|
181
|
-
);
|
|
227
|
+
handlerParameters(parameters, shouldExclude).map(
|
|
228
|
+
(parameter, index) =>
|
|
229
|
+
`${parameterIdentifier(parameter, index)}: ${renderType(parameter.type, parameter.nullable)}`,
|
|
230
|
+
);
|
|
182
231
|
|
|
183
232
|
const foldOutParamShape = (primary: string | undefined, outTypes: string[]): string => {
|
|
184
233
|
if (primary !== undefined) {
|
|
@@ -226,13 +275,18 @@ const scalarResultType = (primary: string | undefined, isOptOut: boolean): strin
|
|
|
226
275
|
|
|
227
276
|
const renderHandlerResultType = (options: HandlerResultOptions): string => {
|
|
228
277
|
const { library, signal, renderType, shouldIncludeCallerAllocated, isOptOut } = options;
|
|
278
|
+
const shouldExcludeOut = options.shouldExcludeOut ?? (() => false);
|
|
229
279
|
|
|
230
280
|
const primary = shouldOmitPrimaryReturn(library, signal.returnValue)
|
|
231
281
|
? undefined
|
|
232
282
|
: renderType(signal.returnValue.type, signal.returnValue.nullable);
|
|
233
283
|
|
|
234
284
|
const outTypes = signal.parameters
|
|
235
|
-
.filter(
|
|
285
|
+
.filter(
|
|
286
|
+
(parameter) =>
|
|
287
|
+
isHandlerOutParameter({ library, parameter, shouldIncludeCallerAllocated }) &&
|
|
288
|
+
!shouldExcludeOut(parameter),
|
|
289
|
+
)
|
|
236
290
|
.map((parameter) => renderType(parameter.type, parameter.nullable));
|
|
237
291
|
|
|
238
292
|
if (outTypes.length === 0) {
|
|
@@ -247,10 +301,16 @@ export {
|
|
|
247
301
|
inputParameters,
|
|
248
302
|
closureAndDestroyIndices,
|
|
249
303
|
arrayLengthSources,
|
|
250
|
-
hasCallerAllocatedArrayLength,
|
|
251
304
|
foldedLengthIndices,
|
|
305
|
+
foldedLengthParameters,
|
|
252
306
|
parameterIdentifier,
|
|
307
|
+
documentedParameters,
|
|
308
|
+
documentedHandlerParameters,
|
|
309
|
+
handlerRenames,
|
|
310
|
+
renamesWithInstance,
|
|
311
|
+
handlerParameters,
|
|
253
312
|
renderHandlerParameters,
|
|
254
313
|
foldOutParamShape,
|
|
255
314
|
renderHandlerResultType,
|
|
315
|
+
type InputParameter,
|
|
256
316
|
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Library } from "../gir/library.js";
|
|
2
|
+
import type { PrimitiveCategory } from "../gir/primitives.js";
|
|
3
|
+
import type { CArrayType, TypeId } from "../gir/type-id.js";
|
|
4
|
+
import type { GirType } from "../gir/type.js";
|
|
5
|
+
|
|
6
|
+
const resolvedTypeFor = (library: Library, ref: TypeId | undefined): GirType | undefined =>
|
|
7
|
+
ref === undefined ? undefined : library.typeFor(ref);
|
|
8
|
+
|
|
9
|
+
const carrayFor = (library: Library, ref: TypeId | undefined): CArrayType | undefined => {
|
|
10
|
+
const type = resolvedTypeFor(library, ref);
|
|
11
|
+
|
|
12
|
+
return type?.kind === "carray" ? type : undefined;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const primitiveCategoryFor = (library: Library, ref: TypeId | undefined): PrimitiveCategory | undefined => {
|
|
16
|
+
const type = resolvedTypeFor(library, ref);
|
|
17
|
+
|
|
18
|
+
return type?.kind === "primitive" ? type.category : undefined;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const isUnboundedArray = (type: CArrayType): boolean =>
|
|
22
|
+
type.isZeroTerminated && type.lengthParameterIndex === undefined && type.fixedSize === undefined;
|
|
23
|
+
|
|
24
|
+
export { carrayFor, isUnboundedArray, primitiveCategoryFor };
|
package/src/compile.ts
CHANGED
|
@@ -9,7 +9,7 @@ import { namespaceFunctionExportName } from "../store/gi/function.js";
|
|
|
9
9
|
import { type ElementProps, setElementProps } from "../store/jsx/element-prop-imports.js";
|
|
10
10
|
import { collectIntrinsicElementClasses, type GlibNamedClass } from "../store/jsx/intrinsic-elements.js";
|
|
11
11
|
import { type OmittedProps, setOmittedProps } from "../store/jsx/omitted-props.js";
|
|
12
|
-
import {
|
|
12
|
+
import { type ElementPageContext, renderElementPage } from "./element-page.js";
|
|
13
13
|
import { docsSignatureContext, firstSentence, namespaceOrder } from "./render.js";
|
|
14
14
|
import { type GiSymbolEntry, renderSymbolPage, type SymbolPageOptions } from "./symbol-page.js";
|
|
15
15
|
|
|
@@ -34,7 +34,16 @@ type ApiSymbolQuery = {
|
|
|
34
34
|
};
|
|
35
35
|
|
|
36
36
|
/** What an indexed symbol is: one of the GIR symbol kinds, or a JSX element. */
|
|
37
|
-
type ApiSymbolKind =
|
|
37
|
+
type ApiSymbolKind =
|
|
38
|
+
"alias" |
|
|
39
|
+
"callback" |
|
|
40
|
+
"class" |
|
|
41
|
+
"constant" |
|
|
42
|
+
"element" |
|
|
43
|
+
"enum" |
|
|
44
|
+
"function" |
|
|
45
|
+
"interface" |
|
|
46
|
+
"record";
|
|
38
47
|
|
|
39
48
|
/** An indexed symbol, without its reference page. */
|
|
40
49
|
type ApiSymbol = {
|
|
@@ -93,16 +102,30 @@ type ApiSearchOptions = {
|
|
|
93
102
|
limit?: number;
|
|
94
103
|
};
|
|
95
104
|
|
|
105
|
+
/** An indexed JSX element, carrying the widget class its page renders from. */
|
|
96
106
|
type ElementEntry = {
|
|
107
|
+
/** Discriminant marking the entry as a JSX element rather than a GIR symbol. */
|
|
97
108
|
kind: "element";
|
|
109
|
+
/** GIR namespace declaring the widget class. */
|
|
98
110
|
namespace: GirNamespace;
|
|
111
|
+
/** Element name, which is the class's GLib type name such as `GtkButton`. */
|
|
99
112
|
name: string;
|
|
113
|
+
/** Documentation text carried by the widget class's GIR node. */
|
|
100
114
|
doc: string | undefined;
|
|
115
|
+
/** The widget class the element is generated from. */
|
|
101
116
|
element: GlibNamedClass;
|
|
102
117
|
};
|
|
103
118
|
|
|
119
|
+
/** Anything the index holds: a GIR symbol or a JSX element. */
|
|
104
120
|
type SymbolEntry = GiSymbolEntry | ElementEntry;
|
|
105
|
-
|
|
121
|
+
|
|
122
|
+
/** A search hit: an indexed entry and how well its name answered the query. */
|
|
123
|
+
type ScoredEntry = {
|
|
124
|
+
/** Match strength, ranked best first: an exact name, then a prefix, then a substring. */
|
|
125
|
+
score: number;
|
|
126
|
+
/** The entry that matched. */
|
|
127
|
+
entry: SymbolEntry;
|
|
128
|
+
};
|
|
106
129
|
|
|
107
130
|
/** Every kind the reference indexes, in the order a namespace overview groups its symbols. */
|
|
108
131
|
const API_SYMBOL_KINDS: ApiSymbolKind[] = [
|
|
@@ -139,6 +162,9 @@ const compareNames = (a: string, b: string): number => {
|
|
|
139
162
|
return a > b ? 1 : 0;
|
|
140
163
|
};
|
|
141
164
|
|
|
165
|
+
const symbolKindSet = (kinds: ApiSymbolKind[] | undefined): Set<ApiSymbolKind> | undefined =>
|
|
166
|
+
kinds === undefined ? undefined : new Set(kinds);
|
|
167
|
+
|
|
142
168
|
const isQueriedEntry = (
|
|
143
169
|
entry: SymbolEntry,
|
|
144
170
|
namespaceFilter: string | undefined,
|
|
@@ -280,29 +306,13 @@ const narrowToExactMatches = (candidates: SymbolEntry[], trimmed: string, isQual
|
|
|
280
306
|
return exact.length > 0 ? exact : candidates;
|
|
281
307
|
};
|
|
282
308
|
|
|
283
|
-
const isSearchFilterMatch = (
|
|
284
|
-
entry: SymbolEntry,
|
|
285
|
-
namespaceFilter: string | undefined,
|
|
286
|
-
kinds: ApiSymbolKind[] | undefined,
|
|
287
|
-
): boolean => {
|
|
288
|
-
if (namespaceFilter !== undefined && entry.namespace.name.toLowerCase() !== namespaceFilter) {
|
|
289
|
-
return false;
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
if (kinds !== undefined && !kinds.includes(entry.kind)) {
|
|
293
|
-
return false;
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
return true;
|
|
297
|
-
};
|
|
298
|
-
|
|
299
309
|
const getScoredEntry = (
|
|
300
310
|
entry: SymbolEntry,
|
|
301
311
|
query: string,
|
|
302
312
|
namespaceFilter: string | undefined,
|
|
303
|
-
kinds: ApiSymbolKind
|
|
313
|
+
kinds: Set<ApiSymbolKind> | undefined,
|
|
304
314
|
): ScoredEntry | undefined => {
|
|
305
|
-
if (!
|
|
315
|
+
if (!isQueriedEntry(entry, namespaceFilter, kinds)) {
|
|
306
316
|
return undefined;
|
|
307
317
|
}
|
|
308
318
|
|
|
@@ -355,12 +365,13 @@ class ApiReference {
|
|
|
355
365
|
private props: ElementProps;
|
|
356
366
|
private omittedProps: OmittedProps;
|
|
357
367
|
|
|
368
|
+
/** Indexes every symbol and JSX element in the GIR data the options point at. */
|
|
358
369
|
constructor(options: ApiReferenceOptions) {
|
|
359
370
|
this.libraries = options.libraries;
|
|
360
371
|
this.props = options.props ?? {};
|
|
361
372
|
this.omittedProps = options.omittedProps ?? {};
|
|
362
373
|
this.library = Library.load(options.libraries, options.girPath);
|
|
363
|
-
this.elementContext =
|
|
374
|
+
this.elementContext = { library: this.library, linkFor: (): string | undefined => undefined };
|
|
364
375
|
this.buildIndex();
|
|
365
376
|
}
|
|
366
377
|
|
|
@@ -484,7 +495,7 @@ class ApiReference {
|
|
|
484
495
|
private scoreEntries(
|
|
485
496
|
query: string,
|
|
486
497
|
namespaceFilter: string | undefined,
|
|
487
|
-
kinds: ApiSymbolKind
|
|
498
|
+
kinds: Set<ApiSymbolKind> | undefined,
|
|
488
499
|
): ScoredEntry[] {
|
|
489
500
|
const scored: ScoredEntry[] = [];
|
|
490
501
|
|
|
@@ -535,7 +546,7 @@ class ApiReference {
|
|
|
535
546
|
/** Every indexed symbol the query keeps, ordered by namespace (Gtk, then Adw, then alphabetically) and name. */
|
|
536
547
|
symbols(query: ApiSymbolQuery = {}): ApiSymbol[] {
|
|
537
548
|
const namespaceFilter = query.namespace?.toLowerCase();
|
|
538
|
-
const kinds =
|
|
549
|
+
const kinds = symbolKindSet(query.kinds);
|
|
539
550
|
|
|
540
551
|
return this.entries
|
|
541
552
|
.filter((entry) => isQueriedEntry(entry, namespaceFilter, kinds))
|
|
@@ -556,7 +567,7 @@ class ApiReference {
|
|
|
556
567
|
|
|
557
568
|
const limit = Math.max(1, Math.floor(options.limit ?? DEFAULT_SEARCH_LIMIT));
|
|
558
569
|
const namespaceFilter = options.namespace?.toLowerCase();
|
|
559
|
-
const scored = this.scoreEntries(query, namespaceFilter, options.kinds);
|
|
570
|
+
const scored = this.scoreEntries(query, namespaceFilter, symbolKindSet(options.kinds));
|
|
560
571
|
scored.sort(compareScoredEntries);
|
|
561
572
|
|
|
562
573
|
return scored.slice(0, limit).map((item) => this.toApiSymbol(item.entry));
|