<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>barabane</title><subtitle>&quot;Код — это диалог между человеком и машиной, в котором важно найти общий язык.&quot;
— ChatGPT</subtitle><author><name>barabane</name></author><id>https://teletype.in/atom/barabane1</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/barabane1?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@barabane1?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=barabane1"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/barabane1?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-06-24T03:22:41.373Z</updated><entry><id>barabane1:ruff</id><link rel="alternate" type="text/html" href="https://teletype.in/@barabane1/ruff?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=barabane1"></link><title>Ruff 🐶🐡</title><published>2024-12-25T18:45:39.380Z</published><updated>2024-12-25T18:49:17.930Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/7f/be/7fbe44eb-8a4f-41bf-849e-1a37feaf0798.png"></media:thumbnail><category term="razrabotka" label="Разработка"></category><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/97/a9/97a9042d-8723-46b8-bbc2-085fa07a30af.png&quot;&gt;Ruff 🐶🐡</summary><content type="html">
  &lt;figure id=&quot;0MjC&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/97/a9/97a9042d-8723-46b8-bbc2-085fa07a30af.png&quot; width=&quot;1280&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;TP8W&quot;&gt;В очередной раз добавляя в проект &lt;strong&gt;Flake&lt;/strong&gt;, &lt;strong&gt;isort&lt;/strong&gt; и &lt;strong&gt;Black&lt;/strong&gt;, я подумал&lt;em&gt; &amp;quot;Эх вот был бы такой инструмент который объединяет в себе все эти линтеры и форматеры, работает в связке с &lt;strong&gt;pre-commit&lt;/strong&gt;, и еще чтобы все настройки были в одном файле&amp;quot;&lt;/em&gt;. Оказывается такой инструмент есть и называется он &lt;a href=&quot;https://docs.astral.sh/ruff/&quot; target=&quot;_blank&quot;&gt;Ruff&lt;/a&gt; (что в переводе - Ёрш(???) 🤔)&lt;/p&gt;
  &lt;p id=&quot;2wQO&quot;&gt;&lt;strong&gt;Ruff &lt;/strong&gt;- это линтер + форматер для Python написанный на &lt;strong&gt;Rust&lt;/strong&gt;. Он объединяет в себе все вышеуказанные инструменты и для его настройки нужен всего 1 файл(ruff.toml или pyproject.toml, кому как удобнее)&lt;/p&gt;
  &lt;p id=&quot;BrAr&quot;&gt;Для того, чтобы использовать &lt;strong&gt;Ruff &lt;/strong&gt;достаточно знать 2 команды:&lt;/p&gt;
  &lt;pre id=&quot;N8UR&quot;&gt;ruff format - запускает форматер 
ruff check - запускает линтер (если запустить с флагом --fix сразу исправит все ошибки)&lt;/pre&gt;
  &lt;p id=&quot;uOQ5&quot;&gt;А вот так его можно запускать в &lt;strong&gt;pre-commit&lt;/strong&gt;:&lt;/p&gt;
  &lt;pre id=&quot;xEIk&quot; data-lang=&quot;bash&quot;&gt;repos:
  - repo: local
    hooks:
      - id: ruff-check
        name: Ruff Check with Fix
        entry: ruff check --fix
        language: python
        types: [python]
        additional_dependencies: [ruff]
      - id: ruff-format
        name: Ruff Format
        entry: ruff format
        language: python
        types: [python]
        additional_dependencies: [ruff]
&lt;/pre&gt;
  &lt;p id=&quot;QaPW&quot;&gt;Ниже оставил конфигурацию моего ruff.toml, который я использую в каждом проекте:&lt;/p&gt;
  &lt;pre id=&quot;QaPW&quot; data-lang=&quot;bash&quot;&gt;exclude = [
    &amp;quot;.bzr&amp;quot;,
    &amp;quot;.direnv&amp;quot;,
    &amp;quot;.eggs&amp;quot;,
    &amp;quot;.git&amp;quot;,
    &amp;quot;.hg&amp;quot;,
    &amp;quot;.mypy_cache&amp;quot;,
    &amp;quot;.nox&amp;quot;,
    &amp;quot;.pants.d&amp;quot;,
    &amp;quot;.ruff_cache&amp;quot;,
    &amp;quot;.svn&amp;quot;,
    &amp;quot;.tox&amp;quot;,
    &amp;quot;.venv&amp;quot;,
    &amp;quot;__pypackages__&amp;quot;,
    &amp;quot;_build&amp;quot;,
    &amp;quot;buck-out&amp;quot;,
    &amp;quot;build&amp;quot;,
    &amp;quot;dist&amp;quot;,
    &amp;quot;node_modules&amp;quot;,
    &amp;quot;venv&amp;quot;,
    &amp;quot;env.py&amp;quot;
]
target-version = &amp;quot;py312&amp;quot;

[lint]
select = [
    &amp;quot;I&amp;quot;,
    &amp;quot;F&amp;quot;,
    &amp;quot;E&amp;quot;,
    &amp;quot;W&amp;quot;,
    &amp;quot;I001&amp;quot;,
    &amp;quot;T201&amp;quot;
]

[format]
quote-style = &amp;quot;single&amp;quot;&lt;/pre&gt;

</content></entry></feed>