[flake8]
min-version = 3.6
accept-encodings = utf-8
docstring-convention = google
# errors we ignore; see https://www.flake8rules.com/ for more info
ignore =
    # pycodestyle errors
    # continuation line under-indented for hanging indent
    E121,
    # closing bracket does not match indentation of opening bracket's line
    E123,
    # continuation line over-indented for hanging indent
    E126,
    # multiple spaces after non-arithmetic operators (for vertical alignment)
    E241,
    # expected 2 blank lines after end of function or class
    E305,
    # do not assign a lambda expression, use a def
    E731,
    # do not use variables name 'I', 'O', or 'l'
    E741,
    # pycodestyle warnings: line breaks around binary operators
    W503,
    W504,
    # mccabe errors: function is too complex
    C901,
    # Exception subclasses should be named with an Error suffix
    N818,
per-file-ignores =
    ./beet:D
    ./docs/conf.py:D
    ./extra/release.py:D
    ./beetsplug/duplicates.py:D
    ./beetsplug/bpm.py:D
    ./beetsplug/convert.py:D
    ./beetsplug/info.py:D
    ./beetsplug/parentwork.py:D
    ./beetsplug/deezer.py:D
    ./beetsplug/smartplaylist.py:D
    ./beetsplug/absubmit.py:D
    ./beetsplug/subsonicupdate.py:D
    ./beetsplug/fromfilename.py:D
    ./beetsplug/mpdstats.py:D
    ./beetsplug/gmusic.py:D
    ./beetsplug/subsonicplaylist.py:D
    ./beetsplug/rewrite.py:D
    ./beetsplug/hook.py:D
    ./beetsplug/playlist.py:D
    ./beetsplug/ftintitle.py:D
    ./beetsplug/bpd/gstplayer.py:D
    ./beetsplug/bpd/__init__.py:D
    ./beetsplug/scrub.py:D
    ./beetsplug/sonosupdate.py:D
    ./beetsplug/embyupdate.py:D
    ./beetsplug/plexupdate.py:D
    ./beetsplug/mbsync.py:D
    ./beetsplug/lyrics.py:D
    ./beetsplug/inline.py:D
    ./beetsplug/freedesktop.py:D
    ./beetsplug/acousticbrainz.py:D
    ./beetsplug/beatport.py:D
    ./beetsplug/cue.py:D
    ./beetsplug/thumbnails.py:D
    ./beetsplug/random.py:D
    ./beetsplug/loadext.py:D
    ./beetsplug/replaygain.py:D
    ./beetsplug/export.py:D
    ./beetsplug/fuzzy.py:D
    ./beetsplug/importadded.py:D
    ./beetsplug/web/__init__.py:D
    ./beetsplug/bucket.py:D
    ./beetsplug/the.py:D
    ./beetsplug/ihate.py:D
    ./beetsplug/bench.py:D
    ./beetsplug/permissions.py:D
    ./beetsplug/spotify.py:D
    ./beetsplug/lastgenre/__init__.py:D
    ./beetsplug/limit.py:D
    ./beetsplug/mbcollection.py:D
    ./beetsplug/metasync/amarok.py:D
    ./beetsplug/metasync/itunes.py:D
    ./beetsplug/metasync/__init__.py:D
    ./beetsplug/importfeeds.py:D
    ./beetsplug/kodiupdate.py:D
    ./beetsplug/zero.py:D
    ./beetsplug/bpsync.py:D
    ./beetsplug/__init__.py:D
    ./beetsplug/edit.py:D
    ./beetsplug/types.py:D
    ./beetsplug/embedart.py:D
    ./beetsplug/mpdupdate.py:D
    ./beetsplug/ipfs.py:D
    ./beetsplug/discogs.py:D
    ./beetsplug/chroma.py:D
    ./beetsplug/fish.py:D
    ./beetsplug/missing.py:D
    ./beetsplug/fetchart.py:D
    ./beetsplug/mbsubmit.py:D
    ./beetsplug/filefilter.py:D
    ./beetsplug/badfiles.py:D
    ./beetsplug/play.py:D
    ./beetsplug/keyfinder.py:D
    ./beetsplug/unimported.py:D
    ./beetsplug/lastimport.py:D
    ./test/test_parentwork.py:D
    ./test/test_hook.py:D
    ./test/test_keyfinder.py:D
    ./test/test_util.py:D
    ./test/test_plexupdate.py:D
    ./test/test_importfeeds.py:D
    ./test/test_discogs.py:D
    ./test/test_acousticbrainz.py:D
    ./test/test_pipeline.py:D
    ./test/test_mb.py:D
    ./test/test_playlist.py:D
    ./test/helper.py:D
    ./test/test_player.py:D
    ./test/test_template.py:D
    ./test/test_web.py:D
    ./test/test_replaygain.py:D
    ./test/test_hidden.py:D
    ./test/test_info.py:D
    ./test/test_dbcore.py:D
    ./test/test_vfs.py:D
    ./test/test_subsonic.py:D
    ./test/test_play.py:D
    ./test/test_types_plugin.py:D
    ./test/test_plugins.py:D
    ./test/test_importer.py:D
    ./test/test_smartplaylist.py:D
    ./test/test_spotify.py:D
    ./test/test_metasync.py:D
    ./test/test_bucket.py:D
    ./test/test_ftintitle.py:D
    ./test/lyrics_download_samples.py:D
    ./test/test_convert.py:D
    ./test/test_mbsubmit.py:D
    ./test/testall.py:D
    ./test/test_fetchart.py:D
    ./test/test_ui_importer.py:D
    ./test/test_mbsync.py:D
    ./test/test_art.py:D
    ./test/test_permissions.py:D
    ./test/test_embedart.py:D
    ./test/test_the.py:D
    ./test/test_export.py:D
    ./test/rsrc/beetsplug/test.py:D
    ./test/rsrc/convert_stub.py:D
    ./test/test_ui_init.py:D
    ./test/test_filefilter.py:D
    ./test/test_logging.py:D
    ./test/test_thumbnails.py:D
    ./test/test_ipfs.py:D
    ./test/test_autotag.py:D
    ./test/__init__.py:D
    ./test/test_plugin_mediafield.py:D
    ./test/test_files.py:D
    ./test/test_lastgenre.py:D
    ./test/_common.py:D
    ./test/test_zero.py:D
    ./test/test_edit.py:D
    ./test/test_ihate.py:D
    ./test/test_ui.py:D
    ./test/test_mpdstats.py:D
    ./test/test_importadded.py:D
    ./test/test_query.py:D
    ./test/test_sort.py:D
    ./test/test_library.py:D
    ./test/test_ui_commands.py:D
    ./test/test_lyrics.py:D
    ./test/test_limit.py:D
    ./test/test_beatport.py:D
    ./test/test_random.py:D
    ./test/test_embyupdate.py:D
    ./test/test_datequery.py:D
    ./test/test_config_command.py:D
    ./setup.py:D
    ./beets/ui/__init__.py:D
    ./beets/ui/commands.py:D
    ./beets/autotag/mb.py:D
    ./beets/autotag/hooks.py:D
    ./beets/autotag/__init__.py:D
    ./beets/autotag/match.py:D
    ./beets/__main__.py:D
    ./beets/importer.py:D
    ./beets/plugins.py:D
    ./beets/util/bluelet.py:D
    ./beets/util/enumeration.py:D
    ./beets/util/artresizer.py:D
    ./beets/util/functemplate.py:D
    ./beets/util/confit.py:D
    ./beets/util/pipeline.py:D
    ./beets/util/hidden.py:D
    ./beets/util/__init__.py:D
    ./beets/library.py:D
    ./beets/random.py:D
    ./beets/art.py:D
    ./beets/logging.py:D
    ./beets/vfs.py:D
    ./beets/__init__.py:D
    ./beets/dbcore/query.py:D
    ./beets/dbcore/db.py:D
    ./beets/dbcore/__init__.py:D
    ./beets/dbcore/queryparse.py:D
    ./beets/dbcore/types.py:D
    ./beets/mediafile.py:D
