[build-system]
requires = [
	"setuptools>=57",
	"wheel>=0.36.0",
	"build>=0.5.1",
]
build-backend = "setuptools.build_meta"

[tool.ruff]
line-length = 106
indent-width = 4

[tool.ruff.format]
quote-style = "single"
indent-style = "tab"

[tool.ruff.lint]
ignore = [
	"E401", # multiple imports per line
	"E701", # multiple statements per line
	"E721", # use isinstance()
	"E731", # lambda instead of def
	"E402", # module import not top of file
	"E722", # bare except
	"E713", # membership 'not in'
	"E741", # ambiguous variable name
]

[tool.ruff.lint.per-file-ignores]
"mmgen/proto/eth/pyethereum/*"  = [ "F401" ]         # imported but unused
"mmgen/proto/eth/rlp/sedes/*"   = [ "F401" ]         # imported but unused
"mmgen/addrgen.py"              = [ "F401" ]         # imported but unused
"mmgen/tool/*"                  = [
	"F722", # Syntax error in forward annotation
	"F821"  # Undefined name `sstr`
]
"test/include/common.py"        = [ "F821" ]         # undefined name 'cfg'
"test/misc/input_func.py"       = [ "F401" ]         # imported but unused
"test/modtest_d/cashaddr.py"    = [ "F841" ]         # assigned to but never used
"test/modtest_d/dep.py"         = [ "F401" ]         # imported but unused
"test/modtest_d/testdep.py"     = [ "F401" ]         # imported but unused
"test/modtest_d/obj.py"         = [ "F841" ]         # assigned to but never used
"test/objtest_d/*"              = [ "F401" ]         # imported but unused
"test/objattrtest_d/*"          = [ "F401" ]         # imported but unused
"test/overlay/fakemods/*"       = [ "F403", "F405" ] # `import *` used
"test/*.py"                     = [ "F401" ]         # imported but unused
"test/colortest.py"             = [ "F403", "F405" ] # `import *` used
"test/tooltest2.py"             = [ "F403", "F405" ] # `import *` used
"test/overlay/tree/*"           = [ "ALL" ]

[tool.pylint.format]
indent-string = "\t"
indent-after-paren = 2
max-line-length = 106

[tool.pylint.main]
recursive = true
jobs = 0
ignore = [
	"data",
	"wordlist",
	"pyethereum",
	"rlp",
	"main_split.py",
	"tx.py",
]
ignored-modules = [ # ignored for no-member, otherwise checked
	"mmgen.proto.secp256k1.secp256k1",
	"mmgen.term",
	"msvcrt",
	"gmpy2",
]

[tool.pylint."messages control"]
disable = [
	"raw-checker-failed",
	"bad-inline-option",
	"locally-disabled",
	"file-ignored",
	"suppressed-message",
	"useless-suppression",
	"deprecated-pragma",
	"use-symbolic-message-instead",
	"use-implicit-booleaness-not-comparison-to-string",
	"use-implicit-booleaness-not-comparison-to-zero",
	"not-async-context-manager",
# non-default:
	"no-method-argument",
	"function-redefined",
	"method-hidden",
]

[tool.pylint.miscellaneous]
notes = ["FIXME", "TODO", "DEBUG", "WIP"]

[tool.pylint.typecheck]
mixin-class-rgx = """.*[Mm]ixin|\
	^(Hilite|InitErrors|DummyWIF|\
	cfg_file|cfg_file_sample|\
	MoneroMMGenFile|keygen_base|xmr_signable|\
	CmdTestShared|CmdTestSwapMethods|HTTPD|\
	RPC|TxProxyClient|Contract)$"""

ignored-classes = [ # ignored for no-member, otherwise checked
	"optparse.Values",
	"thread._local",
	"_thread._local",
	"argparse.Namespace",
# mmgen:
	"baseconv",
	"mmgen.autosign.Signable.base",
	"mmgen.autosign.Autosign", # tx_dir, etc. created dynamically
	"Sha2",
	"mmgen.xmrwallet.file.MoneroMMGenTX.Base",
	"mmgen.xmrwallet.file.MoneroWalletOutputsFile.Base",
	"mmgen.xmrwallet.ops.sweep.OpSweep",
	"mmgen.xmrwallet.ops.wallet.OpWallet",
	"mmgen.xmrwallet.ops.label.OpLabel",
	"mmgen.xmrwallet.ops.new.OpNew",
	"mmgen.xmrwallet.ops.txview.OpTxview",
	"mmgen.xmrwallet.file.outputs.MoneroWalletOutputsFile.Base",
	"mmgen.xmrwallet.file.tx.MoneroMMGenTX.Base",
	"mmgen.proto.eth.tx.Completed",
	"TxInfo",
	"TwRPC",
	"MnemonicEntry",
	"MMGenObjectDevTools",
	"MnEntryMode",
	"deserialized_tx",
# test suite:
	"CmdTestEthdevMethods",
	"CmdTestEthBumpMethods",
	"CmdTestEthSwapMethods",
	"TestHashFunc",
	"GenTool",
	"VirtBlockDeviceBase",
	"SwapMgrBase",
	"Opts",
	"Help",
	"FFI_override",
	"CmdGroupMgr",
]
