{"id":34172138,"url":"https://github.com/sharpenrocks/sharpen","last_synced_at":"2026-03-10T08:02:55.178Z","repository":{"id":40886932,"uuid":"107457590","full_name":"sharpenrocks/Sharpen","owner":"sharpenrocks","description":"Visual Studio extension that intelligently introduces new C# features into your existing codebase","archived":false,"fork":false,"pushed_at":"2022-12-08T09:43:38.000Z","size":5200,"stargazers_count":416,"open_issues_count":14,"forks_count":30,"subscribers_count":20,"default_branch":"master","last_synced_at":"2025-12-18T08:44:05.670Z","etag":null,"topics":["csharp3","csharp5","csharp6","csharp7","csharp8","hacktoberfest","language-features","refactoring","refactoring-plugin","sharpen","static-code-analysis","visual-studio-extension"],"latest_commit_sha":null,"homepage":"https://sharpen.rocks","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/sharpenrocks.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-10-18T20:10:25.000Z","updated_at":"2025-11-27T19:13:18.000Z","dependencies_parsed_at":"2023-01-25T09:30:21.077Z","dependency_job_id":null,"html_url":"https://github.com/sharpenrocks/Sharpen","commit_stats":null,"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/sharpenrocks/Sharpen","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sharpenrocks%2FSharpen","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sharpenrocks%2FSharpen/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sharpenrocks%2FSharpen/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sharpenrocks%2FSharpen/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sharpenrocks","download_url":"https://codeload.github.com/sharpenrocks/Sharpen/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sharpenrocks%2FSharpen/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30327558,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T05:25:20.737Z","status":"ssl_error","status_checked_at":"2026-03-10T05:25:17.430Z","response_time":106,"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":["csharp3","csharp5","csharp6","csharp7","csharp8","hacktoberfest","language-features","refactoring","refactoring-plugin","sharpen","static-code-analysis","visual-studio-extension"],"created_at":"2025-12-15T11:39:51.066Z","updated_at":"2026-03-10T08:02:55.170Z","avatar_url":"https://github.com/sharpenrocks.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sharpen\r\n*Sharpen* is a Visual Studio extension that intelligently modernizes your existing C# codebase. It makes your code more expressive, more readable, more robust, and more performant, in one word - sharper.\r\n\r\n[![Twitter](https://img.shields.io/badge/twitter-sharpenrocks-brightgreen.svg?logo=twitter)](https://twitter.com/sharpenrocks)\r\n[![Visual Studio Marketplace Version](https://img.shields.io/visual-studio-marketplace/v/ironcev.sharpen?color=green\u0026label=visual%20studio%20marketplace)](https://marketplace.visualstudio.com/items?itemName=ironcev.sharpen)\r\n[![AppVeyor](https://img.shields.io/appveyor/ci/ironcev/sharpen.svg)](https://ci.appveyor.com/project/ironcev/sharpen)\r\n[![GitHub release](https://img.shields.io/github/release/ironcev/sharpen/all.svg)](https://github.com/ironcev/sharpen/releases)\r\n[![License](https://img.shields.io/github/license/ironcev/sharpen.svg)](https://github.com/ironcev/sharpen/blob/master/LICENSE)\r\n\r\n## TL; DR\r\n*Sharpen* **identifies places in your code that will benefit from introducing new C# language features**. It helps you to **learn new C# features quicker** and **critically refactor your existing code** to modern C#.\r\n\r\n![Sharpen in action](https://raw.githubusercontent.com/ironcev/sharpen/master/images/demo.gif)\r\n\r\n## Benefits at a Glance\r\nSharpen helps you to:\r\n\r\n- [learn new C# features faster](#faster-learning-of-new-c-features)\r\n- [modernize and refactor your code](#modernizing-and-refactoring-code)\r\n- [always have high-quality documentation on C# language at your fingerprints](#high-quality-documentation-on-c-language-at-your-fingerprints)\r\n- [learn to approach new C# features critically](#critical-approach-to-new-c-features)\r\n- [improve the design and architecture of your codebase](#improving-design-and-architecture-of-a-broader-codebase)\r\n- [use C# features consistently over your codebase](#consistent-usage-of-c-features)\r\n\r\n### Faster Learning of New C# Features\r\nLearn new C# features faster by applying them to your existing codebase.\r\n\r\n*Sharpen* points you to places in real-life production code - your production code! - where you can learn and apply modern C#. This is a far cry from simplified and artificial code samples often used to explain new C# features. *Sharpen* allows you to learn and understand modern C# in the context of your own code.\r\n\r\n*Sharpen* provides you with meaningful recommendations and considerations for modernizing your code. It relates those recommendations and considerations to particular C# versions and their language features. Recommendations and considerations supported at the moment are listed below, sorted by the language version. Each new version of *Sharpen* brings additional recommendations and considerations.\r\n\r\n#### C# 8.0\r\n\r\n\u003cp align=\"center\"\u003e\r\n    \u003cimg src=\"https://raw.githubusercontent.com/ironcev/sharpen/master/images/faster-learning-of-new-csharp-features-csharp-8-0.png\" alt=\"C# 8.0 recommendations and considerations\" style=\"max-width:100%;\"\u003e\r\n\u003c/p\u003e\r\n\r\n#### C# 7.1\r\n\r\n\u003cp align=\"center\"\u003e\r\n    \u003cimg src=\"https://raw.githubusercontent.com/ironcev/sharpen/master/images/faster-learning-of-new-csharp-features-csharp-7-1.png\" alt=\"C# 7.1 recommendations and considerations\" style=\"max-width:100%;\"\u003e\r\n\u003c/p\u003e\r\n\r\n#### C# 7.0\r\n\r\n\u003cp align=\"center\"\u003e\r\n    \u003cimg src=\"https://raw.githubusercontent.com/ironcev/sharpen/master/images/faster-learning-of-new-csharp-features-csharp-7-0.png\" alt=\"C# 7.0 recommendations and considerations\" style=\"max-width:100%;\"\u003e\r\n\u003c/p\u003e\r\n\r\n#### C# 6.0\r\n\r\n\u003cp align=\"center\"\u003e\r\n    \u003cimg src=\"https://raw.githubusercontent.com/ironcev/sharpen/master/images/faster-learning-of-new-csharp-features-csharp-6-0.png\" alt=\"C# 6.0 recommendations and considerations\" style=\"max-width:100%;\"\u003e\r\n\u003c/p\u003e\r\n\r\n#### C# 5.0\r\n\r\n\u003cp align=\"center\"\u003e\r\n    \u003cimg src=\"https://raw.githubusercontent.com/ironcev/sharpen/master/images/faster-learning-of-new-csharp-features-csharp-5-0.png\" alt=\"C# 5.0 recommendations and considerations\" style=\"max-width:100%;\"\u003e\r\n\u003c/p\u003e\r\n\r\n#### C# 3.0\r\n\r\n\u003cp align=\"center\"\u003e\r\n    \u003cimg src=\"https://raw.githubusercontent.com/ironcev/sharpen/master/images/faster-learning-of-new-csharp-features-csharp-3-0.png\" alt=\"C# 3.0 recommendations and considerations\" style=\"max-width:100%;\"\u003e\r\n\u003c/p\u003e\r\n\r\n### Modernizing and Refactoring Code\r\n\r\nModernize your C# code by refactoring it via a single mouse click.\r\n\r\n*Sharpen* will have a preview window that shows how the code looks now and how it will look after the proposed change is applied. That way, you will clearly understand the difference and, at the same time, visually grasp what the language feature is about. You will have the option to accept the proposed change and automatically refactor that piece of code.\r\n\r\nPreview is not implemented at the moment. Here is a rough mockup of that upcoming functionality.\r\n\r\n\u003cp align=\"center\"\u003e\r\n    \u003cimg src=\"https://raw.githubusercontent.com/ironcev/sharpen/master/images/modernizing-and-refactoring-code-preview-window-switch-expression.png\" alt=\"Sharpen preview window\" style=\"max-width:100%;\"\u003e\r\n\u003c/p\u003e\r\n\r\nRefactoring will not be limited to the preview window only. It will be possible on different scales. E.g. in a single place in code, or in a single file, or a whole project, or solution. *Sharpen* will give you full control over the scope and nature of the refactorings. Also, it will automatically refactor only direct recommendations. Those are considered as always safe to apply.\r\n\r\nThis mockup shows applying suggested changes for a specific language feature within all files of a solution.\r\n\r\n\u003cp align=\"center\"\u003e\r\n    \u003cimg src=\"https://raw.githubusercontent.com/ironcev/sharpen/master/images/modernizing-and-refactoring-code-apply-recommendations.png\" alt=\"Applying Sharpen's recommendations\" style=\"max-width:100%;\"\u003e\r\n\u003c/p\u003e\r\n\r\nUntil *Sharpen* built-in refactorings are implemented, you can use the code fixes that come with Visual Studio for some of the recommendations. They are not available for all *Sharpen* recommendations, but for some, they are, so make sure to take a look if they might exist.\r\n\r\n\u003cp align=\"center\"\u003e\r\n    \u003cimg src=\"https://raw.githubusercontent.com/ironcev/sharpen/master/images/modernizing-and-refactoring-code-use-visual-studio-code-fixes.gif\" alt=\"Refactoring code by using Visual Studio code fixes\" style=\"max-width:100%;\"\u003e\r\n\u003c/p\u003e\r\n\r\n### High-Quality Documentation on C# Language at your Fingerprints\r\nLearn C# without leaving Visual Studio by using built-in, high-quality documentation.\r\n\r\n*Sharpen* will bring high-quality C# documentation right at your fingerprints. It will provide its own extensive built-in documentation that explains C# language features in-depth. It will also link to the official MSDN documentation and curated high-quality online blog posts and videos that bring additional insights into particular topics.\r\n\r\n*Sharpen* aims to become a one-stop-shop for everything you ever wanted to know about the design and evolution of C#.\r\n\r\nIn its current version, *Sharpen* links C# releases and language features to their official MSDN documentation. Extensive built-in documentation will be available in upcoming versions of *Sharpen*. (To open the documentation in an external browser, press the CTRL key while clicking on the link.)\r\n\r\n\u003cp align=\"center\"\u003e\r\n    \u003cimg src=\"https://raw.githubusercontent.com/ironcev/sharpen/master/images/high-quality-documentation-on-csharp-language-at-your-fingerprints.gif\" alt=\"High-Quality Documentation on C# Language at your Fingerprints\" style=\"max-width:100%;\"\u003e\r\n\u003c/p\u003e\r\n\r\n### Critical Approach to New C# Features\r\nUnderstand the potential drawbacks of new C# features before using them.\r\n\r\n*Sharpen* imposes a critical view on C# features. It does that by distinguishing between *recommendations* and *considerations*. Recommendations are safe and recommended to apply. They will result in a more expressive, more readable, more robust, or more performant code. Recommendations always start with call-for-action verbs like \"use,\" \"apply,\" or \"replace.\" Considerations, on the other hand, ask you to critically assess a particular language feature's usage in a given context. Considerations usually start with the verb \"consider.\"\r\n\r\n\u003cp align=\"center\"\u003e\r\n    \u003cimg src=\"https://raw.githubusercontent.com/ironcev/sharpen/master/images/critical-approach-to-new-csharp-features-recommendations-and-considerations.png\" alt=\"Sharpen's recommendations and considerations\" style=\"max-width:100%;\"\u003e\r\n\u003c/p\u003e\r\n\r\nAt the moment, *Sharpen*'s considerations do not provide any explanations. In the upcoming versions, every consideration will come with an explanation. This explanation, together with additional examples, will provide you with enough information to decide if the language feature should be used in that particular case.\r\n\r\n\u003cp align=\"center\"\u003e\r\n    \u003cimg src=\"https://raw.githubusercontent.com/ironcev/sharpen/master/images/critical-approach-to-new-csharp-features-explanation-for-consideration.png\" alt=\"An explanation for a Sharpen consideration\" style=\"max-width:100%;\"\u003e\r\n\u003c/p\u003e\r\n\r\n### Improving Design and Architecture of a Broader Codebase\r\nRecognize potential improvements and redesign and rearchitecture your code on a broader scope.\r\n\r\n*Sharpen* is equipped with intelligent heuristics that recognizes potential code improvements on a broader scope. For example, the \"Consider awaiting equivalent asynchronous method and yielding IAsyncEnumerable\" recognizes places where asynchronous streams might be a better design choice than returning an `IEnumerable\u003cT\u003e`. Accepting such consideration impacts and improves the code on a broader scope. It means rearchitecting and redesigning a larger portion of the codebase rather than simply refactoring an isolated piece of code.\r\n\r\n\u003cp align=\"center\"\u003e\r\n    \u003cimg src=\"https://raw.githubusercontent.com/ironcev/sharpen/master/images/improving-design-and-architecture-of-the-codebase.png\" alt=\"Consider awaiting equivalent asynchronous method and yielding IAsyncEnumerable\" style=\"max-width:100%;\"\u003e\r\n\u003c/p\u003e\r\n\r\nOther examples would be considering:\r\n\r\n- to rearchitecture legacy asynchronous programming patterns like, e.g. `IAsyncResult` pattern, to the Task-based Asynchronous Pattern and async and await.\r\n- to rearchitecture mutable Data Transfer Objects to C# 9.0 records.\r\n\r\n### Consistent Usage of C# Features\r\nUse new C# features consistently over your entire codebase.\r\n\r\nFuture versions of *Sharpen* will allow you to configure which recommendations are relevant for you and refine the recommendations using recommendation-specific settings. Storing of such configurations will be possible on different levels, e.g., on a project, or on a solution, or on a machine level, to name just a few possibilities. It will be possible to share *Sharpen*'s configuration among programmers working on the same project by checking it into the source code repository.\r\n\r\nNote that defining and storing configurations is not implemented at the moment.\r\n\r\n## Installing Sharpen\r\nYou can [install *Sharpen* directly from Visual Studio](https://github.com/sharpenrocks/Sharpen/wiki/Installing-Sharpen) by using Extensions dialog or you can [download it](https://marketplace.visualstudio.com/items?itemName=ironcev.sharpen) from the Visual Studio Marketplace.\r\n\r\n\u003cp align=\"center\"\u003e\r\n    \u003cimg src=\"https://raw.githubusercontent.com/ironcev/sharpen/master/images/installing-sharpen-from-visual-studio.png\" alt=\"Installing Sharpen from Visual Studio\" style=\"max-width:100%;\"\u003e\r\n\u003c/p\u003e\r\n\r\n## Running Code Analysis\r\nTo run *Sharpen* analysis on a whole solution, go to the \"Tools -\u003e Sharpen -\u003e Analyze Solution\".\u003cbr/\u003e\r\nTo run an analysis on the currently edited file, use the \"Analyze with Sharpen\" context menu option on the file context menu.\u003cbr/\u003e\r\nTo run an analysis on an arbitrary scope, use the \"Analyze with Sharpen\" context menu option after selecting nodes in the Solution Explorer.\r\n\r\n\u003cp align=\"center\"\u003e\r\n    \u003cimg src=\"https://raw.githubusercontent.com/ironcev/sharpen/master/images/running-code-analysis.gif\" alt=\"Running Sharpen code analysis\" style=\"max-width:100%;\"\u003e\r\n\u003c/p\u003e\r\n\r\n## Contributing\r\n*Sharpen* is a volunteer effort. Covering the whole C# evolution is a humongous task that cannot be carried out by a few people. So pitch in and join the development! :-) Before contributing, please make sure to read the [contribution guidelines](CONTRIBUTING.md).\r\n\r\n## Release Notes\r\nAll notable changes to the *Sharpen* extension are documented in the [changelog](https://github.com/ironcev/sharpen/blob/master/CHANGELOG.md). \r\n\r\n## License\r\n*Sharpen* is licensed under the [MIT license](https://github.com/ironcev/sharpen/blob/master/LICENSE).\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsharpenrocks%2Fsharpen","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsharpenrocks%2Fsharpen","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsharpenrocks%2Fsharpen/lists"}