{"id":16086596,"url":"https://github.com/emaringolo/pharo-tonel-traitless","last_synced_at":"2026-07-02T16:36:18.751Z","repository":{"id":93776586,"uuid":"509478576","full_name":"eMaringolo/pharo-tonel-traitless","owner":"eMaringolo","description":"Iceberg actions to export Trait based classes flattened into traitless classes","archived":false,"fork":false,"pushed_at":"2022-07-01T14:54:40.000Z","size":102,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-21T18:28:16.264Z","etag":null,"topics":["pharo","portability","smalltalk","tonel"],"latest_commit_sha":null,"homepage":"","language":"Smalltalk","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eMaringolo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-07-01T14:09:09.000Z","updated_at":"2023-07-18T21:33:43.000Z","dependencies_parsed_at":"2023-03-01T13:00:32.036Z","dependency_job_id":null,"html_url":"https://github.com/eMaringolo/pharo-tonel-traitless","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/eMaringolo/pharo-tonel-traitless","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eMaringolo%2Fpharo-tonel-traitless","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eMaringolo%2Fpharo-tonel-traitless/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eMaringolo%2Fpharo-tonel-traitless/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eMaringolo%2Fpharo-tonel-traitless/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eMaringolo","download_url":"https://codeload.github.com/eMaringolo/pharo-tonel-traitless/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eMaringolo%2Fpharo-tonel-traitless/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35055537,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-02T02:00:06.368Z","response_time":173,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["pharo","portability","smalltalk","tonel"],"created_at":"2024-10-09T13:24:29.443Z","updated_at":"2026-07-02T16:36:18.723Z","avatar_url":"https://github.com/eMaringolo.png","language":"Smalltalk","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Description\n\nThis package will add an Iceberg action to create a repository branch in which all the classes using Traits will be flattened.\n\nThis of course will introduce code duplication, but it is useful to export libraries to be used in Smalltalk dialects that doesn't have Trait support.\n\nThis will flatten the the methods of the traits into their users as well as the slots of stateful traits as instance variables of the classes that uses them.\n\n## Installation\n\n\n### Load the package \n```Smalltalk\nMetacello new\n\trepository: 'github://emaringolo/pharo-tonel-traitless:master/src';\n\tbaseline:'TonelTraitless';\n\tload.\n```\n\n### Adding the menu\n\nI don't know of a dynamic way of registering the command into the repositories browser, so you have to modify the menu builder adding the command explicitly.\n\n```Smalltalk\nIceTipRepositoriesBrowser class\u003e\u003e#buildSelectionExtraCommandGroupWith: presenter for: aCommandGroup\n    super buildSelectionExtraCommandGroupWith: presenter for: aCommandGroup.\n    {       IceTipCalculateDirtyPackagesCommand.\n            IceTipCopyCommitishCommand.\n            IceTipOpenNativelyCommand.\n            IceFlattenTraitsRepositoryCommand \"\u003c\u003c ADD THIS\"\n    } do: [ :each | aCommandGroup register: each forSpec ]\n```\n\n## How to use it\n\nOn a clean repository, open the alternate menu and in the _Extra_ menu you'll find an option named _Flatten source of traits..._\n\n![Iceberg menu screenshot](img/iceberg_screenshot.png)\n\nThis will create a new branch named `traitless` and commit the flattened version in that branch.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femaringolo%2Fpharo-tonel-traitless","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Femaringolo%2Fpharo-tonel-traitless","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femaringolo%2Fpharo-tonel-traitless/lists"}