idiofw

package
v0.16.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 9, 2026 License: MIT Imports: 22 Imported by: 0

Documentation

Rendered for darwin/amd64

Overview

Package idiomatic emits fluent Go wrapper types for ObjC frameworks.

For each ObjC class the emitter generates a Go wrapper struct exposing:

  • A constructor that bundles alloc+init (or +new) into a single call, converting NSURL/NSString parameters to Go string at the boundary.
  • Fluent With<Prop>(value) *Self methods for every settable property, returning the receiver so calls can be chained.
  • NSArray setters exposed as variadic With<Prop>(items...*T) *Self, building the NSArray from a Go slice internally.
  • Async completion handler methods as (ctx context.Context) error, extracting NSError from unsafe.Pointer via ObjC metadata.
  • NSArray-returning getter methods as typed Go slices ([]T).
  • BoolNSError pairs simplified to plain error returns.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ComputeEmittableStructs

func ComputeEmittableStructs(
	frameworks []*meta.FrameworkMeta,
	mapper *typemap.Mapper,
) map[string]bool

ComputeEmittableStructs returns the set of value-struct Go names (across every framework) the idiomatic layer can emit a definition for: a struct is emittable when every field is a Go primitive or another emittable struct. Iterates to a fixpoint so a struct may depend on one resolved later (CGRect on CGPoint/CGSize). The same set gates both the per-framework struct emission and cross-framework references, so a reference never names a struct that was skipped. An enum-typed field is allowed when the enum is one the same framework emits locally (see ComputeEmittableStructs).

func ComputeIdiomaticClassIndex added in v0.16.0

func ComputeIdiomaticClassIndex(
	frameworks []*meta.FrameworkMeta,
	ownerIndex map[string]string,
) map[string]typemap.IdiomaticClassRef

ComputeIdiomaticClassIndex maps every ObjC class emitted by the idiomatic layer to its owning idiomatic package and wrapper type name ("NSProgress" → {foundation, Progress}). Only each class's canonical owner (ownerIndex) contributes, and only frameworks the idiomatic generator actually emits (callers pass the already-filtered framework list), so a reference built from this index always names a type that exists. Every available class in an emitted framework gets a wrapper file — a non-abstract class always carries at least its +new constructor and an abstract base is emitted for embedding — so no per-class emission check is needed.

func EmitFrameworkWrappers

func EmitFrameworkWrappers(
	outDir, pkgName, rawPkgAlias, rawPkgPath string,
	framework *meta.FrameworkMeta,
	mapper *typemap.Mapper,
	idio *idioconf.File,
) error

EmitFrameworkWrappers generates one *_generated.go file per ObjC class in framework. idio is the framework's parsed idiomatic.json sidecar (curated renames, delegate selection, error typedefs); nil when the framework has none.

func EmitSupportPackages

func EmitSupportPackages(rootDir string) error

EmitSupportPackages writes the idiomatic layer's hand-independent support packages (objref, errkit, rt) under rootDir. It is idempotent and deterministic: it only writes the known support files (never cleans a directory), so co-located hand-authored or generated framework packages are untouched. Call once per generation, before the per-framework loop.

Types

This section is empty.

Directories

Path Synopsis
Package render: name-based execution for the construct emitters that render an ad-hoc view by template name rather than through a typed Render* function.
Package render: name-based execution for the construct emitters that render an ad-hoc view by template name rather than through a typed Render* function.
Package view is the intermediate representation (IR) of a fully-resolved idiomatic framework package.
Package view is the intermediate representation (IR) of a fully-resolved idiomatic framework package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL