{"id":329581,"date":"2024-05-11T14:16:39","date_gmt":"2024-05-11T14:16:39","guid":{"rendered":"https:\/\/www.blog.pythonlibrary.org\/?p=12327"},"modified":"2024-05-11T14:16:39","modified_gmt":"2024-05-11T14:16:39","slug":"ruff-the-fastest-python-linter-and-formatter-just-got-faster","status":"publish","type":"post","link":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/2024\/05\/11\/ruff-the-fastest-python-linter-and-formatter-just-got-faster\/","title":{"rendered":"Ruff \u2013 The Fastest Python Linter and Formatter Just Got Faster!"},"content":{"rendered":"<p class=\"syndicated-attribution\"><meta name= \\\"keywords \\\" content= \\\"\u96fb\u5b50\u8a08\u7b97\u6a5f, \u6559\u80b2, IT \u96fb\u8166\u73ed,\u96fb\u8166\u88dc\u7fd2\uff0c \u96fb\u8166\u73ed\uff0c \u5bb6\u6559\uff0c \u79c1\u4eba\u8001\u5e2b\uff0c \u8cc7\u8a0a\u6280\u8853\uff0c \u7a0b\u5e8f\u8a2d\u8a08\uff0c \u96fb\u5b50\u8a08\u7b97\u6a5f\uff0c \u904a\u6232\uff0c \u860b\u679c\uff0c \u96fb\u5f71\uff0c \u8a08\u7b97\u6a5f\uff0c\u7de8\u78bc\uff0c Java\uff0c C\/C++\uff0c JavaScript\uff0c PHP\uff0c HTML\uff0c CSS\uff0c MySQL\uff0c mobile\uff0c Android\uff0c \u52d5\u6f2b\uff0c Python\uff0c teacher\uff0c \u88dc\u7fd2\uff0c \u96fb\u8166\u88dc\u7fd2 \u8cc7\u8a0a, \u7535\u5b50\u8ba1\u7b97\u673a, IT ,Game, apple, movie, Computer,student,Java,\u6559\u80b2, ,\u5b66\u751f, \u5b66\u4e60, learn, \u6559\u5b66,  Android, apple,anime, animation, \u4fe1\u606f\u6280\u672f, \u7a0b\u5e8f\u8bbe\u8ba1, \u79fb\u52a8\u7535\u8bdd, \u8cc7\u8a0a\u79d1\u6280,Game, Jeu, Juego,Call Of Duty ,\u4f7f\u547d\u53ec\u559a , \u6e38\u620f, \u7535\u5b50\u6e38\u620f,, \u591a\u4eba\u7535\u5b50\u6e38\u620f, \u7f51\u7edc\u6e38\u620f\uff0conline\uff0conline game, \u624b\u673a\u6e38\u620f, mobile \\\"><\/p>\n<p>I&#8217;m a little late in reporting on this topic, but Ruff put out an update in April 2024 that includes a hand-written recursive descent parser. This update is in version 0.4.0 and newer.<\/p>\n<p><strong>Ruff&#8217;s new parser is &gt;2x faster<\/strong>, translating to a <strong>20-40% speedup<\/strong> for all linting and formatting invocations. Ruff&#8217;s <a href=\"https:\/\/astral.sh\/blog\/ruff-v0.4.0\">announcement<\/a> includes some statistics to show improvements that are worth checking out.<\/p>\n<h2>What&#8217;s This New Parser?<\/h2>\n<p>I&#8217;ve never tried writing a code parser, so I&#8217;ll have to rely on Ruff&#8217;s announcement to explain this. Basically, when you are doing static analysis, you will turn the source code into Abstract Syntax Trees (ASTs), which you can then analyze. Python has an AST module built in for this purpose. Ruff is written in Rust, though, so their AST analyzer is also written in Rust.<\/p>\n<p>The original parser was called a\u00a0<strong>generated parser<\/strong>, specifically <a href=\"https:\/\/lalrpop.github.io\/lalrpop\/\">LALRPOP<\/a>. The parser requires a grammar to be defined in a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Domain-specific_language\">Domain Specific Language<\/a> (DSL), which is then converted into executable code for the generator.<\/p>\n<p>Ruff&#8217;s new hand-written parser is a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Recursive_descent_parser\">recursive descent parser<\/a>. Follow that link to Wikipedia to learn all the nitty gritty details.<\/p>\n<p>Their team created a hand-written parser to give them more control and flexibility over the parsing process, making it easier to work on the many weird edge cases they need to support. They also created a new parser to make Ruff faster and provide better error messages and error resilience.<\/p>\n<h2>Wrapping Up<\/h2>\n<p>Ruff is great and makes linting and formatting your Python code so much faster. You can learn much more about Ruff in my other articles on this topic:<\/p>\n<ul>\n<li>\n<p class=\"entry-title ast-blog-single-element\"><a href=\"https:\/\/www.blog.pythonlibrary.org\/2023\/06\/28\/an-intro-to-ruff-an-extremely-fast-python-linter\/\" rel=\"bookmark\">An Intro to Ruff \u2013 An Extremely Fast Python Linter<\/a><\/p>\n<\/li>\n<li>\n<p class=\"entry-title ast-blog-single-element\"><a href=\"https:\/\/www.blog.pythonlibrary.org\/2023\/10\/25\/the-ruff-formatter-pythons-fastest-formatter\/\" rel=\"bookmark\">The Ruff Formatter \u2013 Python\u2019s Fastest Formatter!<\/a><\/p>\n<\/li>\n<li>\n<p class=\"entry-title ast-blog-single-element\"><a href=\"https:\/\/www.blog.pythonlibrary.org\/2023\/11\/27\/episode-23-the-ruff-formatter-with-charlie-marsh\/\" rel=\"bookmark\">Episode 23 \u2013 The Ruff Formatter with Charlie Marsh<\/a><\/p>\n<\/li>\n<\/ul>\n<p>The post <a href=\"https:\/\/www.blog.pythonlibrary.org\/2024\/05\/11\/ruff-the-fastest-python-linter-and-formatter-just-got-faster\/\">Ruff &#8211; The Fastest Python Linter and Formatter Just Got Faster!<\/a> appeared first on <a href=\"https:\/\/www.blog.pythonlibrary.org\/\">Mouse Vs Python<\/a>.<\/p>\n\n<p class=\"syndicated-attribution\"><figure class= \\\"wp-block-image alignnone \\\"><img src= \\\"http:\/\/itteacheritfreelance.hk\/test\/wordpress\/wp-content\/uploads\/2016\/05\/logo2-2.png\\\" alt=\\\"IT\u96fb\u8166\u88dc\u7fd2 java\u88dc\u7fd2 \u70ba\u5927\u5bb6\u914d\u5c0d\u96fb\u8166\u88dc\u7fd2,IT freelance, \u79c1\u4eba\u8001\u5e2b, PHP\u88dc\u7fd2,CSS\u88dc\u7fd2,XML,Java\u88dc\u7fd2,MySQL\u88dc\u7fd2,graphic design\u88dc\u7fd2,\u4e2d\u5c0f\u5b78ICT\u88dc\u7fd2,\u4e00\u5c0d\u4e00\u79c1\u4eba\u88dc\u7fd2\u548cFreelance\u81ea\u7531\u5de5\u4f5c\u914d\u5c0d\u3002\\\"\/><figcaption>\u7acb\u523b\u8a3b\u518a\u53ca\u5831\u540d\u96fb\u8166\u88dc\u7fd2\u8ab2\u7a0b\u5427!<\/figcaption><\/figure>\r\n<\/br>Find A Teacher Form:\r\n<\/br>https:\/\/docs.google.com\/forms\/d\/1vREBnX5n262umf4wU5U2pyTwvk9O-JrAgblA-wH9GFQ\/viewform?edit_requested=true#responses\r\n<\/br><\/br>Email:\r\n<\/br>public1989two@gmail.com<br><br><br><br><br><br><br>\r\n<a href=www.itsec.hk style=color:#FFFFFF;>www.itsec.hk<\/a><br>\r\n<a href=\\\"www.itsec.vip\\\" style=color:#FFFFFF;>www.itsec.vip<\/a><br>\r\n<a href=\\\"www.itseceu.uk\\\" style=color:#FFFFFF;>www.itseceu.uk<\/a><br><\/p>","protected":false},"excerpt":{"rendered":"<div class=\"mh-excerpt\"><p>I\u2019m a little late in reporting on this topic, but Ruff put out an update in April 2024 that includes a hand-written recursive descent parser. This update is in version 0.4.0 and newer. Ruff\u2019s new parser is &gt;2x faster, translating to a 20-40% speedup for all linting and formatting invocations. Ruff\u2019s announcement includes some statistics [\u2026]<\/p>\n<p>The post <a href=\"https:\/\/www.blog.pythonlibrary.org\/2024\/05\/11\/ruff-the-fastest-python-linter-and-formatter-just-got-faster\/\">Ruff \u2013 The Fastest Python Linter and Formatter Just Got Faster!<\/a> appeared first on <a href=\"https:\/\/www.blog.pythonlibrary.org\/\">Mouse Vs Python<\/a>.<\/p>\n<\/div>","protected":false},"author":2018,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"slim_seo":{"title":"Ruff \u2013 The Fastest Python Linter and Formatter Just Got Faster! - ITTeacherITFreelance.hk","description":"I\u2019m a little late in reporting on this topic, but Ruff put out an update in April 2024 that includes a hand-written recursive descent parser. This update is in"},"footnotes":""},"categories":[10700],"tags":[],"_links":{"self":[{"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/329581"}],"collection":[{"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/users\/2018"}],"replies":[{"embeddable":true,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/comments?post=329581"}],"version-history":[{"count":1,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/329581\/revisions"}],"predecessor-version":[{"id":329582,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/329581\/revisions\/329582"}],"wp:attachment":[{"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/media?parent=329581"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/categories?post=329581"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/tags?post=329581"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}