{"id":38615765,"url":"https://github.com/d1820/proto-attributor","last_synced_at":"2026-01-17T08:49:31.186Z","repository":{"id":44958220,"uuid":"334681127","full_name":"d1820/proto-attributor","owner":"d1820","description":"ProtoAttributor is an open source Visual Studio extension that can manage the appropriate attributes on a class to support ProtoBuf. It currently supports ProtoContract, ProtoMember, ProtoIgnore attributes. This extension lets you Add, Reorder, and Remove ProtoBuf attributes from a class.","archived":false,"fork":false,"pushed_at":"2025-11-15T14:05:43.000Z","size":149805,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-11-15T15:31:32.555Z","etag":null,"topics":["code","contracts","formatting","grpc","protobuf","protobuf-net","visual-studio","visual-studio-code","vsix-extensions"],"latest_commit_sha":null,"homepage":"https://marketplace.visualstudio.com/items?itemName=DanTurco.ProtoAttributor","language":"C#","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/d1820.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-01-31T14:56:53.000Z","updated_at":"2025-11-15T14:04:20.000Z","dependencies_parsed_at":"2022-09-24T22:10:21.090Z","dependency_job_id":null,"html_url":"https://github.com/d1820/proto-attributor","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/d1820/proto-attributor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d1820%2Fproto-attributor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d1820%2Fproto-attributor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d1820%2Fproto-attributor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d1820%2Fproto-attributor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/d1820","download_url":"https://codeload.github.com/d1820/proto-attributor/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d1820%2Fproto-attributor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28504539,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T06:57:29.758Z","status":"ssl_error","status_checked_at":"2026-01-17T06:56:03.931Z","response_time":85,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["code","contracts","formatting","grpc","protobuf","protobuf-net","visual-studio","visual-studio-code","vsix-extensions"],"created_at":"2026-01-17T08:49:30.487Z","updated_at":"2026-01-17T08:49:31.180Z","avatar_url":"https://github.com/d1820.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"![ProtoAttributor](https://github.com/d1820/proto-attributor/blob/main/visual-studio/ProtoAttributor/logo.png?raw=true)\r\n\r\n![GitHub CI](https://img.shields.io/github/actions/workflow/status/d1820/proto-attributor/dotnet.yml)\r\n![GitHub License](https://img.shields.io/github/license/d1820/proto-attributor)\r\n![Visual Studio Marketplace Version (including pre-releases)](https://img.shields.io/visual-studio-marketplace/v/DanTurco.ProtoAttributor2022)\r\n![Visual Studio Marketplace Installs](https://img.shields.io/visual-studio-marketplace/i/DanTurco.ProtoAttributor2022)\r\n\r\n\r\nProtoAttributor is an open source Visual Studio extension that can manage the appropriate attributes on a class to support ProtoBuf.\r\nIt currently supports ProtoContract, ProtoMember, ProtoIgnore, DataContract, DataMember, IgnoreDataMember attributes. This extension lets you Add, Reorder, and Remove ProtoBuf attributes from a class.\r\nThis works in conjunction with the [protobuf-net](https://github.com/protobuf-net/protobuf-net) 3.0+ Nuget package\r\n\r\n\r\nOne of the challenges with creating proper ProtoBuf contracts is getting the ordering correct and consistent.\r\nWhile small contract classes are easy to manage as classes get larger or lots of nested classes are created it gets harder and harder to manage and maintain these classes.\r\nThis is where ProtoAttributor shines. You can Add, Reorder, Remove ProtoBuf attributes from 1 or many classes.\r\n\r\n![Preview](https://github.com/d1820/proto-attributor/blob/main/visual-studio/ProtoAttributor/ProtoImagePreview.jpg?raw=true)\r\n\r\n## Adding Attributes\r\n\r\nAdding attributes options not only adds the ProtoMember/DataMember attributes, it will also ensure the class has the ProtoContract/DataContract attributes and the proper using statements are applied.\r\n\r\nHave an existing class that is already attributed and numbered, but you need to add new properties and attributes, ProtoAttributor will examine the existing attributes and start numbering at the next highest number ensuring proper backward and forward compatibility for your proto contract.\r\n\r\n## Reordering Attributes\r\n\r\nReordering attributes now becomes a snap. this will restart the index at 1 and reset all the ProtoMembers/DataMembers in proper ascending order.\r\nThis is helpful when contracts have not been releases yet and you want to ensure standardized numbering of your contracts.\r\n\r\n## Removing Attributes\r\n\r\nRemoving attributes will not only remove the ProtoMember/DataMember attributes but also includes any attribute or using statements that are related to the [Proto*] or [Data*] family.\r\n\r\n## Ways to Use\r\n\r\nProtoAttributor can handle single files already open in Visual Studio from the Tools menu or it can handle entire directories of files from the solution explorer.\r\n\r\n## Proto[Attributor] In Action\r\n\r\n### Working With ProtoMembers\r\n\r\n![alt ProtoContractVideo](https://github.com/d1820/proto-attributor/blob/main/visual-studio/ProtoAttributor/Resources/ProtoContractVideo.gif?raw=true)\r\n\r\n### Working With DataMembers\r\n\r\n![alt DataContractVideo](https://github.com/d1820/proto-attributor/blob/main/visual-studio/ProtoAttributor/Resources/DataContractVideo.gif?raw=true)\r\n\r\n\r\n### Working With A Single File\r\n\r\n![alt SinglePageProtoActions](https://github.com/d1820/proto-attributor/blob/main/visual-studio/ProtoAttributor/Resources/SinglePageProtoActions.gif?raw=true)\r\n\r\n\r\n\r\n\u003cspan style=\"font-size:10px;\"\u003e\r\nSpecial thanks to \u003ca href=\"https://logomakr.com/\"\u003elogomakr.com\u003c/a\u003e for the logo\r\n\u003c/span\u003e\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fd1820%2Fproto-attributor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fd1820%2Fproto-attributor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fd1820%2Fproto-attributor/lists"}