{"action":"created","issue":{"url":"https://api.github.com/repos/terrajobst/platform-compat/issues/21","repository_url":"https://api.github.com/repos/terrajobst/platform-compat","labels_url":"https://api.github.com/repos/terrajobst/platform-compat/issues/21/labels{/name}","comments_url":"https://api.github.com/repos/terrajobst/platform-compat/issues/21/comments","events_url":"https://api.github.com/repos/terrajobst/platform-compat/issues/21/events","html_url":"https://github.com/terrajobst/platform-compat/issues/21","id":221969626,"number":21,"title":"Steer developers away from legacy/deprecated APIs","user":{"login":"terrajobst","id":5169960,"avatar_url":"https://avatars3.githubusercontent.com/u/5169960?v=3","gravatar_id":"","url":"https://api.github.com/users/terrajobst","html_url":"https://github.com/terrajobst","followers_url":"https://api.github.com/users/terrajobst/followers","following_url":"https://api.github.com/users/terrajobst/following{/other_user}","gists_url":"https://api.github.com/users/terrajobst/gists{/gist_id}","starred_url":"https://api.github.com/users/terrajobst/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/terrajobst/subscriptions","organizations_url":"https://api.github.com/users/terrajobst/orgs","repos_url":"https://api.github.com/users/terrajobst/repos","events_url":"https://api.github.com/users/terrajobst/events{/privacy}","received_events_url":"https://api.github.com/users/terrajobst/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":13,"created_at":"2017-04-15T20:05:02Z","updated_at":"2017-04-17T02:26:29Z","closed_at":null,"body":"I'm not a fan of the obsolete attribute. The reasons are:\r\n\r\n* **It's not contextual**. Some APIs are only problematic when used with certain values on in certain context (i.e. calling vs overriding)\r\n* **It's in metadata**. Legacy/deprecation typically happens outside the usual shipping cycle.\r\n* **It's very noisy**. There is no grouping, you get warnings for every single violation. Worse, you cannot easily suppress specific classes of issues, you can only suppress globally or a specific occurrence.\r\n* **No tie-in to fixers**. Sometimes we just replace a given method with another; it would be nice to allow Roslyn-style fixers for that.\r\n\r\nI think I could extend this tool to also cover legacy/deprecated API. For now, I'd like to gather a list of APIs so I can see what the kind of issues would look like and we'd like to surface/suppress them.\r\n\r\nThoughts?"},"comment":{"url":"https://api.github.com/repos/terrajobst/platform-compat/issues/comments/294392032","html_url":"https://github.com/terrajobst/platform-compat/issues/21#issuecomment-294392032","issue_url":"https://api.github.com/repos/terrajobst/platform-compat/issues/21","id":294392032,"user":{"login":"bitapparat","id":11799744,"avatar_url":"https://avatars1.githubusercontent.com/u/11799744?v=3","gravatar_id":"","url":"https://api.github.com/users/bitapparat","html_url":"https://github.com/bitapparat","followers_url":"https://api.github.com/users/bitapparat/followers","following_url":"https://api.github.com/users/bitapparat/following{/other_user}","gists_url":"https://api.github.com/users/bitapparat/gists{/gist_id}","starred_url":"https://api.github.com/users/bitapparat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bitapparat/subscriptions","organizations_url":"https://api.github.com/users/bitapparat/orgs","repos_url":"https://api.github.com/users/bitapparat/repos","events_url":"https://api.github.com/users/bitapparat/events{/privacy}","received_events_url":"https://api.github.com/users/bitapparat/received_events","type":"User","site_admin":false},"created_at":"2017-04-17T02:26:29Z","updated_at":"2017-04-17T02:26:29Z","body":"The behavior I'd prefer to see would be a \"Notify about legacy APIs\" checkbox in project settings that's on by default. If checked, declaration of legacy typed variables, initialization of legacy types, or usage of legacy members in non-legacy types would be marked with a (suppressible) information entry.\r\n\r\nIt'd be neat if legacy variables that are passed into or receive a value from a type of a third-party assembly would be excluded from this rule, to prevent a need to disable or suppress this functionality when consuming a library that expects or exposes legacy types."}}
{"actor":{"display_login":"bitapparat"}}