Pyright(Pylance)のtype check ruleの設定全部解説する: その2
その1はこちら
各ルール解説
reportUninitializedInstanceVariable
概要
reportUninitializedInstanceVariable: boolean or string
reportUninitializedInstanceVariable
は、クラス内のインスタンス変数がクラス本体や __init__
メソッド内で初期化されていない、または宣言されていない場合の診断を生成または抑制する設定である。インスタンス変数は通常、クラスの初期化時に設定されることが望ましい。この設定のデフォルト値は "none"
である。
設定値ごとの挙動
-
reportUninitializedInstanceVariable: true
or"error"
- 初期化されていない、または宣言されていないインスタンス変数に対してエラーを生成する。
-
reportUninitializedInstanceVariable: false
or"none"
- 初期化されていない、または宣言されていないインスタンス変数に関する診断を抑制する。
サンプルコード
reportUninitializedInstanceVariable: true
or"error"
の場合class MyClass: def __init__(self): self.initialized_var = 10 # self.uninitialized_var は初期化されていない def set_uninitialized_var(self): self.uninitialized_var = 20
```
reportUninitializedInstanceVariable: false
or"none"
の場合class MyClass: # ... # 初期化されていない、または宣言されていないインスタンス変数に対する警告やエラーは抑制される
型エラーとその解決策
reportUninitializedInstanceVariable
が true
または "error"
の場合、初期化されていない、または宣言されていないインスタンス変数に対してエラーが報告される。この問題を解決するには、インスタンス変数を適切に初期化するか、必要に応じて宣言する。
- 型エラーを修正するためのサンプルコード:
class MyClass: def __init__(self): self.initialized_var = 10 self.uninitialized_var = None # 初期化する def set_uninitialized_var(self): self.uninitialized_var = 20
reportInvalidStringEscapeSequence
概要
reportInvalidStringEscapeSequence: boolean or string
reportInvalidStringEscapeSequence
は、文字列リテラル内で使用される無効なエスケープシーケンスに関する診断を生成または抑制する設定である。Pythonの仕様では、無効なエスケープシーケンスは将来のバージョンで構文エラーを引き起こすことになっている。この設定のデフォルト値は "warning"
である。
設定値ごとの挙動
-
reportInvalidStringEscapeSequence: true
or"error"
- 無効なエスケープシーケンスの使用に対してエラーを生成する。
-
reportInvalidStringEscapeSequence: false
or"none"
- 無効なエスケープシーケンスの使用に関する診断を抑制する。
-
reportInvalidStringEscapeSequence: "warning"
- 無効なエスケープシーケンスの使用に対して警告を生成する。
サンプルコード
-
reportInvalidStringEscapeSequence: "warning"
の場合string = "This is an invalid escape sequence \x" # \x は無効なエスケープシーケンスであるため、警告が生成される
-
reportInvalidStringEscapeSequence: false
or"none"
の場合string = "This is an invalid escape sequence \x" # 無効なエスケープシーケンスに対する警告やエラーは抑制される
型エラーとその解決策
reportInvalidStringEscapeSequence
が true
、"error"
、または "warning"
の場合、無効なエスケープシーケンスの使用に対して警告またはエラーが報告される。この問題を解決するには、正しいエスケープシーケンスを使用するか、文字列をraw stringとして記述する。
- 型エラーを修正するためのサンプルコード:
string = r"This is a valid escape sequence \x" # raw stringを使用して無効なエスケープシーケンスを回避
reportUnknownParameterType
概要
reportUnknownParameterType: boolean or string
reportUnknownParameterType
は、関数やメソッドの入力パラメータや戻り値の型が不明な場合の診断を生成または抑制する設定である。型が不明なパラメータは、型チェックにおいて不確実性をもたらし、エラーの潜在的な原因となる。この設定のデフォルト値は "none"
である。
設定値ごとの挙動
-
reportUnknownParameterType: true
or"error"
- 型が不明なパラメータに対してエラーを生成する。
-
reportUnknownParameterType: false
or"none"
- 型が不明なパラメータに関する診断を抑制する。
サンプルコード
-
reportUnknownParameterType: true
or"error"
の場合def some_function(param): # param の型が不明である return param # param の型が不明であるため、エラーが生成される可能性がある
-
reportUnknownParameterType: false
or"none"
の場合def some_function(param): return param # 型が不明なパラメータに対する警告やエラーは抑制される
型エラーとその解決策
reportUnknownParameterType
が true
または "error"
の場合、型が不明なパラメータに対してエラーが報告される。この問題を解決するには、パラメータに明確な型注釈を付ける。
- 型エラーを修正するためのサンプルコード:
def some_function(param: int) -> int: return param # param に型注釈が付けられている
reportUnknownArgumentType
概要
reportUnknownArgumentType: boolean or string
reportUnknownArgumentType
は、関数やメソッドの呼び出し引数の型が不明な場合の診断を生成または抑制する設定である。型が不明な引数は、型安全性を損ない、ランタイムエラーの原因となる可能性がある。この設定のデフォルト値は "none"
である。
設定値ごとの挙動
-
reportUnknownArgumentType: true
or"error"
- 型が不明な呼び出し引数に対してエラーを生成する。
-
reportUnknownArgumentType: false
or"none"
- 型が不明な呼び出し引数に関する診断を抑制する。
サンプルコード
-
reportUnknownArgumentType: true
or"error"
の場合def return_unknown_type(a): return a def add(a, b): return a + b x = return_unknown_type() result = add(x, 5) # x の型が不明であるため、エラーが生成される可能性がある
-
reportUnknownArgumentType: false
or"none"
の場合def return_unknown_type(a): return a def add(a, b): return a + b x = return_unknown_type() result = add(x, 5) # 型が不明な呼び出し引数に対する警告やエラーは抑制される
型エラーとその解決策
reportUnknownArgumentType
が true
または "error"
の場合、型が不明な呼び出し引数に対してエラーが報告される。この問題を解決するには、呼び出し元で引数に明確な型注釈を付けるか、型が明確に定義された変数を使用する。
- 型エラーを修正するためのサンプルコード:
def return_unknown_type(a) -> int: return a def add(a: int, b: int) -> int: return a + b x = return_unknown_type(10) result = add(x, 5) # x の型が明確に定義されている
reportUnknownLambdaType
概要
reportUnknownLambdaType: boolean or string
reportUnknownLambdaType
は、ラムダ式の入力パラメータや戻り値の型が不明な場合の診断を生成または抑制する設定である。ラムダ式はしばしば短い関数として使用されるが、そのパラメータや戻り値の型が不明な場合、型安全性やコードの明確性に影響を及ぼす可能性がある。この設定のデフォルト値は "none"
である。
設定値ごとの挙動
-
reportUnknownLambdaType: true
or"error"
- 型が不明なラムダ式の入力パラメータや戻り値に対してエラーを生成する。
-
reportUnknownLambdaType: false
or"none"
- 型が不明なラムダ式の入力パラメータや戻り値に関する診断を抑制する。
サンプルコード
-
reportUnknownLambdaType: true
or"error"
の場合add = lambda x, y: x + y # x, y の型が不明 result = add(5, 10) # 型が不明なラムダ式の使用、エラーが生成される可能性がある
-
reportUnknownLambdaType: false
or"none"
の場合add = lambda x, y: x + y result = add(5, 10) # 型が不明なラムダ式の使用、警告やエラーは抑制される
型エラーとその解決策
reportUnknownLambdaType
が true
または "error"
の場合、型が不明なラムダ式の入力パラメータや戻り値に対してエラーが報告される。この問題を解決するには、ラムダ式で明確な型注釈を使用するか、ラムダ式の代わりに型注釈のある通常の関数を使用する。
- 型エラーを修正するためのサンプルコード:
from typing import Callable add: Callable[[int, int], int] = lambda x, y: x + y # ラムダ式に型注釈を追加 result = add(5, 10)
reportUnknownVariableType
概要
reportUnknownVariableType: boolean or string
reportUnknownVariableType
は、型が不明な変数に関する診断を生成または抑制する設定である。型が不明な変数は型安全性に影響を及ぼし、予期しないエラーの原因となり得る。この設定のデフォルト値は "none"
である。
設定値ごとの挙動
-
reportUnknownVariableType: true
or"error"
- 型が不明な変数に対してエラーを生成する。
-
reportUnknownVariableType: false
or"none"
- 型が不明な変数に関する診断を抑制する。
サンプルコード
-
reportUnknownVariableType: true
or"error"
の場合def return_unknown_type(a): return a # aの型が不明であるため、エラーが生成される可能性がある
-
reportUnknownVariableType: false
or"none"
の場合def return_unknown_type(a): return a # 型が不明な変数に対する警告やエラーは抑制される
型エラーとその解決策
reportUnknownVariableType
が true
または "error"
の場合、型が不明な変数に対してエラーが報告される。この問題を解決するには、変数に明確な型注釈を付けるか、型が明確に定義された関数の戻り値を使用する。
- 型エラーを修正するためのサンプルコード:
def return_unknown_type(a: int): return a # a の型が明確に定義されている
reportUnknownMemberType
概要
reportUnknownMemberType: boolean or string
reportUnknownMemberType
は、クラスまたはインスタンス変数の型が不明な場合の診断を生成または抑制する設定である。クラスのメンバー変数(フィールド)の型が不明であると、型安全性に問題が生じる可能性があり、コードの明確性が低下する。この設定のデフォルト値は "none"
である。
設定値ごとの挙動
-
reportUnknownMemberType: true
or"error"
- 型が不明なクラスまたはインスタンス変数に対してエラーを生成する。
-
reportUnknownMemberType: false
or"none"
- 型が不明なクラスまたはインスタンス変数に関する診断を抑制する。
サンプルコード
-
reportUnknownMemberType: true
or"error"
の場合class MyClass: def __init__(self): self.unknown_type_member = self.get_data() # 型が不明
-
reportUnknownMemberType: false
or"none"
の場合class MyClass: # ...
型エラーとその解決策
reportUnknownMemberType
が true
または "error"
の場合、型が不明なクラスまたはインスタンス変数に対してエラーが報告される。この問題を解決するには、メンバー変数に明確な型注釈を付けるか、型が明確に定義されたソースから値を割り当てる。
- 型エラーを修正するためのサンプルコード:
class MyClass: def __init__(self): self.unknown_type_member: int = self.get_data() # 明確な型注釈を付ける
reportMissingParameterType
概要
reportMissingParameterType: boolean or string
reportMissingParameterType
は、関数やメソッドの入力パラメータに型注釈が欠けている場合の診断を生成または抑制する設定である。ただし、メソッド内で使用される self
および cls
パラメータはこのチェックから除外される。型注釈を付けることで、コードの意図と予期される動作が明確になり、型安全性が向上する。この設定のデフォルト値は "none"
である。
設定値ごとの挙動
-
reportMissingParameterType: true
or"error"
- 型注釈が欠けている入力パラメータに対してエラーを生成する。
-
reportMissingParameterType: false
or"none"
- 型注釈が欠けている入力パラメータに関する診断を抑制する。
サンプルコード
-
reportMissingParameterType: true
or"error"
の場合def add(a, b): # a と b に型注釈が欠けている return a + b # a と b の型注釈が欠けているため、エラーが生成される可能性がある
-
reportMissingParameterType: false
or"none"
の場合def add(a, b): return a + b # 型注釈が欠けている入力パラメータに対する警告やエラーは抑制される
型エラーとその解決策
reportMissingParameterType
が true
または "error"
の場合、型注釈が欠けている入力パラメータに対してエラーが報告される。この問題を解決するには、関数やメソッドのパラメータに明確な型注釈を付ける。
- 型エラーを修正するためのサンプルコード:
def add(a: int, b: int) -> int: return a + b # a と b に型注釈が付けられている
reportMissingTypeArgument
概要
reportMissingTypeArgument: boolean or string
reportMissingTypeArgument
は、ジェネリッククラス(例えば list
など)が明示的または暗黙的な型引数なしで使用された場合の診断を生成または抑制する設定である。型引数を指定しないことにより、型の不明瞭さが生じ、型安全性が低下する可能性がある。この設定のデフォルト値は "none"
である。
設定値ごとの挙動
-
reportMissingTypeArgument: true
or"error"
- 型引数なしでジェネリッククラスを使用する場合にエラーを生成する。
-
reportMissingTypeArgument: false
or"none"
- 型引数なしでジェネリッククラスを使用する場合の診断を抑制する。
サンプルコード
-
reportMissingTypeArgument: true
or"error"
の場合some_list: list = [1, 2, 3] # list ジェネリッククラスに型引数が欠けている # 型引数が欠けているため、エラーが生成される可能性がある
-
reportMissingTypeArgument: false
or"none"
の場合some_list: list = [1, 2, 3] # 型引数なしで list ジェネリッククラスを使用する場合の警告やエラーは抑制される
型エラーとその解決策
reportMissingTypeArgument
が true
または "error"
の場合、型引数なしでジェネリッククラスを使用するとエラーが報告される。この問題を解決するには、ジェネリッククラスの使用時に適切な型引数を指定する。
- 型エラーを修正するためのサンプルコード:
some_list: list[int] = [1, 2, 3] # list に適切な型引数 int を指定 # some_list が型引数を持つ list[int] として使用されている
reportInvalidTypeVarUse
概要
reportInvalidTypeVarUse: boolean or string
reportInvalidTypeVarUse
は、TypeVar
(型変数)がジェネリック関数のシグネチャ内で不適切に使用された場合の診断を生成または抑制する設定である。TypeVar
は型の一般化と再利用を可能にするが、適切に使用されない場合、型の整合性や明確性が損なわれる。この設定のデフォルト値は "warning"
である。
設定値ごとの挙動
-
reportInvalidTypeVarUse: true
or"error"
- 不適切な
TypeVar
の使用に対してエラーを生成する。
- 不適切な
-
reportInvalidTypeVarUse: "warning"
- 不適切な
TypeVar
の使用に対して警告を生成する。
- 不適切な
-
reportInvalidTypeVarUse: false
or"none"
- 不適切な
TypeVar
の使用に関する診断を抑制する。
- 不適切な
サンプルコード
-
reportInvalidTypeVarUse: "warning"
の場合from typing import TypeVar T = TypeVar("T") def get(value: T): # T が一度だけ使用されている return value # TypeVar 'T' が不適切に使用されているため、警告が生成される可能性がある
-
reportInvalidTypeVarUse: false
or"none"
の場合from typing import TypeVar T = TypeVar("T") def get(value: T): return value # 不適切な `TypeVar` の使用に対する警告やエラーは抑制される
型エラーとその解決策
reportInvalidTypeVarUse
が true
、"error"
、または "warning"
の場合、不適切な TypeVar
の使用に対して警告またはエラーが報告される。TypeVar
は一般に、複数の関連する型間の関係を表現するために使用されるべきである。
- 型エラーを修正するためのサンプルコード:
from typing import TypeVar T = TypeVar("T") def get(value: T) -> T: # T を関数の戻り値にも使用して型関係を明確にする return value # TypeVar 'T' が適切に使用されている
reportCallInDefaultInitializer
概要
reportCallInDefaultInitializer: boolean or string
reportCallInDefaultInitializer
は、デフォルト値の初期化式内での関数呼び出しや式に関する診断を生成または抑制する設定である。デフォルト値でコストの高い操作を行うと、その関数を含むモジュールを初期化する際にそれらが評価され、モジュール初期化のパフォーマンスに影響を及ぼす可能性がある。この設定のデフォルト値は "none"
である。
設定値ごとの挙動
-
reportCallInDefaultInitializer: true
or"error"
- デフォルト値の初期化式内の関数呼び出しや式に対してエラーを生成する。
-
reportCallInDefaultInitializer: false
or"none"
- デフォルト値の初期化式内の関数呼び出しや式に関する診断を抑制する。
サンプルコード
-
reportCallInDefaultInitializer: true
or"error"
の場合def expensive_operation(): # 何らかのコストの高い操作 pass def fun(a = expensive_operation()): return a # fun 関数の a のデフォルト値に expensive_operation が使われており、エラーが生成される可能性がある
-
reportCallInDefaultInitializer: false
or"none"
の場合def expensive_operation(): # ... def fun(a = expensive_operation()): return a # デフォルト値の初期化式内の関数呼び出しに対する警告やエラーは抑制される
型エラーとその解決策
reportCallInDefaultInitializer
が true
または "error"
の場合、デフォルト値の初期化式内での関数呼び出しや式に対してエラーが報告される。この問題を解決するには、デフォルト値として高コストの操作を避け、より単純な値を使用するか、必要に応じて遅延評価を行う。
- 型エラーを修正するためのサンプルコード:
def expensive_operation(): # ... def fun(a = None): if a is None: a = expensive_operation() return a # expensive_operation の呼び出しを遅延させる
reportUnnecessaryIsInstance
概要
reportUnnecessaryIsInstance: boolean or string
reportUnnecessaryIsInstance
は、isinstance
や issubclass
の呼び出しで、その結果が静的に常に真であることが判明している場合の診断を生成または抑制する設定である。このような呼び出しは、しばしばプログラミング上の誤りを示しており、不要な型チェックを意味する。この設定のデフォルト値は "none"
である。
設定値ごとの挙動
-
reportUnnecessaryIsInstance: true
or"error"
- 常に真と判明している
isinstance
やissubclass
の呼び出しに対してエラーを生成する。
- 常に真と判明している
-
reportUnnecessaryIsInstance: false
or"none"
- 不必要な
isinstance
やissubclass
の呼び出しに関する診断を抑制する。
- 不必要な
サンプルコード
-
reportUnnecessaryIsInstance: true
or"error"
の場合class MyClass: pass obj = MyClass() if isinstance(obj, MyClass): # 常に真であるため不必要 pass # obj が MyClass のインスタンスであることは明らかであるため、エラーが生成される可能性がある
-
reportUnnecessaryIsInstance: false
or"none"
の場合class MyClass: pass obj = MyClass() if isinstance(obj, MyClass): pass # 不必要な isinstance 呼び出しに対する警告やエラーは抑制される
型エラーとその解決策
reportUnnecessaryIsInstance
が true
または "error"
の場合、不必要な isinstance
や issubclass
の呼び出しに対してエラーが報告される。この問題を解決するには、型チェックが不要な場合はそれを省略するか、より適切な方法で型の検証を行う。
- 型エラーを修正するためのサンプルコード:
class MyClass: pass obj = MyClass() # obj の型チェックは不要であるため、isinstance の呼び出しを省略
reportUnnecessaryCast
概要
reportUnnecessaryCast: boolean or string
reportUnnecessaryCast
は、静的に不必要であると判断された cast
呼び出しに関する診断を生成または抑制する設定である。このような cast
呼び出しは、時にプログラミング上の誤りを示している可能性があり、型システムの利用に関する誤解を反映していることがある。この設定のデフォルト値は "none"
である。
設定値ごとの挙動
-
reportUnnecessaryCast: true
or"error"
- 不必要と判断された
cast
呼び出しに対してエラーを生成する。
- 不必要と判断された
-
reportUnnecessaryCast: false
or"none"
- 不必要な
cast
呼び出しに関する診断を抑制する。
- 不必要な
サンプルコード
-
reportUnnecessaryCast: true
or"error"
の場合from typing import cast class MyClass: pass obj = MyClass() casted_obj = cast(MyClass, obj) # obj は既に MyClass のインスタンスであるため不必要 # casted_obj の cast は不必要であるため、エラーが生成される可能性がある
-
reportUnnecessaryCast: false
or"none"
の場合from typing import cast class MyClass: pass obj = MyClass() casted_obj = cast(MyClass, obj) # 不必要な cast 呼び出しに対する警告やエラーは抑制される
型エラーとその解決策
reportUnnecessaryCast
が true
または "error"
の場合、不必要と判断された cast
呼び出しに対してエラーが報告される。この問題を解決するには、不必要な型キャストを行わないようにコードを調整する。
- 型エラーを修正するためのサンプルコード:
class MyClass: pass obj = MyClass() # obj の型キャストは不要であるため、cast の呼び出しを省略
reportUnnecessaryComparison
概要
reportUnnecessaryComparison: boolean or string
reportUnnecessaryComparison
は、==
や !=
の比較、または他の条件式が静的に常に False
または True
に評価されることが判明している場合の診断を生成または抑制する設定である。特に、異なる型間の比較が常に False
になる場合などがこれに該当する。このような比較は、プログラミング上の誤りを示唆することがある。この設定のデフォルト値は "none"
である。
設定値ごとの挙動
-
reportUnnecessaryComparison: true
or"error"
- 常に
False
またはTrue
に評価される比較に対してエラーを生成する。
- 常に
-
reportUnnecessaryComparison: false
or"none"
- 常に
False
またはTrue
に評価される比較に関する診断を抑制する。
- 常に
サンプルコード
-
reportUnnecessaryComparison: true
or"error"
の場合x = 10 if x == "10": # int 型と str 型の比較は常に False である pass # 比較が常に False であるため、エラーが生成される可能性がある
-
reportUnnecessaryComparison: false
or"none"
の場合x = 10 if x == "10": pass # 異なる型間の比較に対する警告やエラーは抑制される
型エラーとその解決策
reportUnnecessaryComparison
が true
または "error"
の場合、常に False
に評価される比較に対してエラーが報告される。この問題を解決するには、型の不一致がある比較を修正するか、比較が意味をなすような条件式を使用する。
- 型エラーを修正するためのサンプルコード:
x = 10 if x == 10: # 正しい型で比較 pass # 型が一致する比較に変更されている
reportAssertAlwaysTrue
概要
reportAssertAlwaysTrue: boolean or string
reportAssertAlwaysTrue
は、常に真となることが証明可能な assert
文に関する診断を生成または抑制する設定である。このような assert
文は、プログラミング上の誤りを示唆する可能性があり、不要なコードと見なされることがある。この設定のデフォルト値は "warning"
である。
設定値ごとの挙動
-
reportAssertAlwaysTrue: true
or"error"
- 常に真となる
assert
文に対してエラーを生成する。
- 常に真となる
-
reportAssertAlwaysTrue: "warning"
- 常に真となる
assert
文に対して警告を生成する。
- 常に真となる
-
reportAssertAlwaysTrue: false
or"none"
- 常に真となる
assert
文に関する診断を抑制する。
- 常に真となる
サンプルコード
-
reportAssertAlwaysTrue: "warning"
の場合assert (1, 2) # この assert は常に真となる # 常に真となるため、警告が生成される可能性がある
-
reportAssertAlwaysTrue: false
or"none"
の場合assert (1, 2) # 常に真となる `assert` 文に対する警告やエラーは抑制される
型エラーとその解決策
reportAssertAlwaysTrue
が true
、"error"
、または "warning"
の場合、常に真となる assert
文に対して警告またはエラーが報告される。この問題を解決するには、assert
文を意味のある条件で使用するか、完全に削除する。
- 型エラーを修正するためのサンプルコード:
x = 10 assert x == 10 # 意味のある条件で assert を使用 # `assert` が有意な条件をチェックするように修正されている
reportUnnecessaryContains
概要
reportUnnecessaryContains: boolean or string
reportUnnecessaryContains
は、in
操作が静的に常に False
または True
に評価されることが判明している場合の診断を生成または抑制する設定である。このような in
操作は、プログラミング上の誤りを示している可能性があり、不要なコードを意味することがある。この設定のデフォルト値は "none"
である。
設定値ごとの挙動
-
reportUnnecessaryContains: true
or"error"
- 常に
False
またはTrue
に評価されるin
操作に対してエラーを生成する。
- 常に
-
reportUnnecessaryContains: false
or"none"
- 常に
False
またはTrue
に評価されるin
操作に関する診断を抑制する。
- 常に
サンプルコード
-
reportUnnecessaryContains: true
or"error"
の場合element = "5" if element in [1, 2, 3, 4, 5]: # 文字列と数値の比較は常に False である pass # 'in' 操作が常に False であるため、エラーが生成される可能性がある
-
reportUnnecessaryContains: false
or"none"
の場合element = "5" if element in [1, 2, 3, 4, 5]: pass # 異なる型間の比較に対する警告やエラーは抑制される
型エラーとその解決策
reportUnnecessaryContains
が true
または "error"
の場合、常に False
に評価される in
操作に対してエラーが報告される。この問題を解決するには、in
操作を意味のある条件で使用するか、完全に削除する。
- 型エラーを修正するためのサンプルコード:
element = "5" if element in ["1", "2", "3", "4", "5"]: # 文字列リストでの比較に変更 pass # 'in' 操作が意味のある条件をチェックするように修正されている
reportSelfClsParameterName
概要
reportSelfClsParameterName: boolean or string
reportSelfClsParameterName
は、インスタンスメソッドにおける「self」パラメータやクラスメソッドにおける「cls」パラメータの欠如や誤った命名に関する診断を生成または抑制する設定である。通常、Pythonのインスタンスメソッドでは第一引数として「self」を、クラスメソッドでは「cls」を使用する。メタクラス(「type」から派生したクラス)内のインスタンスメソッドは、「cls」を使用することが許される。この設定のデフォルト値は "warning"
である。
設定値ごとの挙動
-
reportSelfClsParameterName: true
or"error"
- 「self」や「cls」パラメータの欠如や誤った命名に対してエラーを生成する。
-
reportSelfClsParameterName: "warning"
- 「self」や「cls」パラメータの欠如や誤った命名に対して警告を生成する。
-
reportSelfClsParameterName: false
or"none"
- 「self」や「cls」パラメータの欠如や誤った命名に関する診断を抑制する。
サンプルコード
-
reportSelfClsParameterName: "warning"
の場合class MyClass: def instance_method(s): # 通常は「self」と命名する pass @classmethod def class_method(c): # 通常は「cls」と命名する pass # 's' や 'c' という名前の使用により、警告が生成される可能性がある
-
reportSelfClsParameterName: false
or"none"
の場合class MyClass: def instance_method(s): pass @classmethod def class_method(c): pass # 'self' や 'cls' の命名に関する警告やエラーは抑制される
型エラーとその解決策
reportSelfClsParameterName
が true
、"error"
、または "warning"
の場合、インスタンスメソッドやクラスメソッドのパラメータの命名に関する警告またはエラーが報告される。この問題を解決するには、慣習に従ってインスタンスメソッドの第一引数を「self」、クラスメソッドの第一引数を「cls」と命名する。
- 型エラーを修正するためのサンプルコード:
class MyClass: def instance_method(self): pass @classmethod def class_method(cls): pass # メソッドのパラメータが適切に命名されている
reportImplicitStringConcatenation
概要
reportImplicitStringConcatenation: boolean or string
reportImplicitStringConcatenation
は、連続して配置された2つ以上の文字列リテラルによる暗黙の連結に関する診断を生成または抑制する設定である。このような暗黙の文字列連結は、一般に悪いプラクティスと見なされ、コンマの欠落などのバグを隠蔽することがしばしばある。この設定のデフォルト値は "none"
である。
設定値ごとの挙動
-
reportImplicitStringConcatenation: true
or"error"
- 暗黙の文字列連結に対してエラーを生成する。
-
reportImplicitStringConcatenation: false
or"none"
- 暗黙の文字列連結に関する診断を抑制する。
サンプルコード
-
reportImplicitStringConcatenation: true
or"error"
の場合greeting = "Hello, " "world!" # 暗黙の連結 # greeting の暗黙の連結により、エラーが生成される可能性がある
-
reportImplicitStringConcatenation: false
or"none"
の場合greeting = "Hello, " "world!" # 暗黙の文字列連結に対する警告やエラーは抑制される
型エラーとその解決策
reportImplicitStringConcatenation
が true
または "error"
の場合、暗黙の文字列連結に対してエラーが報告される。この問題を解決するには、文字列リテラルを明示的に連結するか、一つのリテラルとして記述する。
- 型エラーを修正するためのサンプルコード:
greeting = "Hello, " + "world!" # 明示的な連結 # または greeting = "Hello, world!" # 一つのリテラルとして記述 # 文字列が明示的に連結されている
reportUndefinedVariable
概要
reportUndefinedVariable: boolean or string
reportUndefinedVariable
は、未定義の変数に関する診断を生成または抑制する設定である。未定義の変数は、プログラムの実行中に参照エラーを引き起こす可能性があるため、これらの診断はプログラミング上の誤りを早期に発見するのに役立つ。この設定のデフォルト値は "error"
である。
設定値ごとの挙動
-
reportUndefinedVariable: true
or"error"
- 未定義の変数に対してエラーを生成する。
-
reportUndefinedVariable: false
or"none"
- 未定義の変数に関する診断を抑制する。
サンプルコード
-
reportUndefinedVariable: true
or"error"
の場合def some_function(): return my_undefined_variable # 未定義の変数 # my_undefined_variable が未定義であるため、エラーが生成される可能性がある
-
reportUndefinedVariable: false
or"none"
の場合def some_function(): return my_undefined_variable # 未定義の変数に対する警告やエラーは抑制される
型エラーとその解決策
reportUndefinedVariable
が true
または "error"
の場合、未定義の変数に対してエラーが報告される。この問題を解決するには、変数が適切に定義されていることを確認するか、存在しない変数の参照を避ける。
- 型エラーを修正するためのサンプルコード:
def some_function(): my_defined_variable = 10 return my_defined_variable # 適切に定義された変数を使用 # 適切に定義された変数が使用されている
reportUnboundVariable
概要
reportUnboundVariable: boolean or string
reportUnboundVariable
は、未定義またはおそらく未定義の変数に関する診断を生成または抑制する設定である。未定義の変数は、プログラムの実行中に参照エラーを引き起こす可能性があり、プログラミング上の誤りを早期に発見するのに役立つ。この設定のデフォルト値は "error"
である。
設定値ごとの挙動
-
reportUnboundVariable: true
or"error"
- 未定義またはおそらく未定義の変数に対してエラーを生成する。
-
reportUnboundVariable: false
or"none"
- 未定義またはおそらく未定義の変数に関する診断を抑制する。
サンプルコード
-
reportUnboundVariable: true
or"error"
の場合def some_function(): if some_condition: bound_variable = 10 return bound_variable # 変数が条件によって未定義の可能性がある # bound_variable が条件によって未定義の可能性があるため、エラーが生成される
-
reportUnboundVariable: false
or"none"
の場合def some_function(): if some_condition: bound_variable = 10 return bound_variable # 未定義またはおそらく未定義の変数に対する警告やエラーは抑制される
型エラーとその解決策
reportUnboundVariable
が true
または "error"
の場合、未定義またはおそらく未定義の変数に対してエラーが報告される。この問題を解決するには、変数がすべての実行パスで適切に定義されていることを確認する。
- 型エラーを修正するためのサンプルコード:
def some_function(): bound_variable = None # 初期化 if some_condition: bound_variable = 10 return bound_variable # すべての実行パスで変数が定義されている
reportIncompleteStub
概要
reportIncompleteStub: boolean or string
reportIncompleteStub
は、タイプスタブファイル内のモジュールレベルの __getattr__
呼び出しに関する診断を生成または抑制する設定である。タイプスタブファイルにおける __getattr__
呼び出しは、そのスタブが不完全であることを示している可能性がある。タイプスタブは、Pythonのモジュールやパッケージの型情報を提供するために使用されるファイルで、型チェッカーによる型チェックの精度を向上させるために重要である。この設定のデフォルト値は "none"
である。
設定値ごとの挙動
-
reportIncompleteStub: true
or"error"
- 不完全なタイプスタブに関してエラーを生成する。
-
reportIncompleteStub: false
or"none"
- 不完全なタイプスタブに関する診断を抑制する。
サンプルコード
-
reportIncompleteStub: true
or"error"
の場合# 例: my_module.pyi タイプスタブファイル def __getattr__(name: str) -> Any: pass # この __getattr__ は、タイプスタブが不完全であることを示している可能性があり、エラーが生成される
-
reportIncompleteStub: false
or"none"
の場合# 例: my_module.pyi タイプスタブファイル def __getattr__(name: str) -> Any: pass # 不完全なタイプスタブに対する警告やエラーは抑制される
型エラーとその解決策
reportIncompleteStub
が true
または "error"
の場合、不完全なタイプスタブに対してエラーが報告される。この問題を解決するには、タイプスタブファイルを完全にするために、モジュール内のすべての公開関数やクラスの型定義を追加する。
- 型エラーを修正するためのサンプルコード:
# 例: my_module.pyi タイプスタブファイル class MyClass: def my_method(self) -> None: ... def my_function() -> int: ... # タイプスタブファイルに不足していた型情報を追加
reportUnsupportedDunderAll
概要
reportUnsupportedDunderAll: boolean or string
reportUnsupportedDunderAll
は、静的型チェッカーによって許可されていない方法で __all__
を定義または操作する文に関する診断を生成または抑制する設定である。このような操作により、__all__
の内容が不明確または誤っている可能性がある。また、モジュールの名前空間に存在しない名前が __all__
リスト内にある場合も報告される。この設定のデフォルト値は "warning"
である。
設定値ごとの挙動
-
reportUnsupportedDunderAll: true
or"error"
__all__
に関する許可されていない操作に対してエラーを生成する。
-
reportUnsupportedDunderAll: "warning"
__all__
に関する許可されていない操作に対して警告を生成する。
-
reportUnsupportedDunderAll: false
or"none"
__all__
に関する許可されていない操作に関する診断を抑制する。
サンプルコード
-
reportUnsupportedDunderAll: "warning"
の場合__all__ = ["some_function", "SomeClass"] __all__.append("another_function") # 許可されていない操作 def some_function(): pass class SomeClass: pass # "another_function" はモジュールの名前空間に存在しないため、警告が生成される
-
reportUnsupportedDunderAll: false
or"none"
の場合__all__ = ["some_function", "SomeClass"] __all__.append("another_function") # ... # `__all__` に関する許可されていない操作に対する警告やエラーは抑制される
型エラーとその解決策
reportUnsupportedDunderAll
が true
、"error"
、または "warning"
の場合、__all__
に関する許可されていない操作に対して警告またはエラーが報告される。この問題を解決するには、__all__
を静的に定義し、モジュールの名前空間に存在する名前のみを含める。
- 型エラーを修正するためのサンプルコード:
__all__ = ["some_function", "SomeClass"] # __all__ に静的なリストを定義し、存在する名前のみを含める
reportUnusedCallResult
概要
reportUnusedCallResult: boolean or string
reportUnusedCallResult
は、戻り値が None
でなく、かつどのようにも使用されていない関数の呼び出しに関する診断を生成または抑制する設定である。戻り値を無視することは、特にその戻り値が重要な情報を含む場合、プログラミング上の誤りを示している可能性がある。この設定のデフォルト値は "none"
である。
設定値ごとの挙動
-
reportUnusedCallResult: true
or"error"
- 戻り値が使用されていない関数呼び出しに対してエラーを生成する。
-
reportUnusedCallResult: false
or"none"
- 戻り値が使用されていない関数呼び出しに関する診断を抑制する。
サンプルコード
-
reportUnusedCallResult: true
or"error"
の場合def function_with_return_value(): return "important information" function_with_return_value() # 戻り値が使用されていない # 戻り値が無視されているため、エラーが生成される可能性がある
-
reportUnusedCallResult: false
or"none"
の場合def function_with_return_value(): return "important information" function_with_return_value() # 戻り値が使用されていない関数呼び出しに対する警告やエラーは抑制される
型エラーとその解決策
reportUnusedCallResult
が true
または "error"
の場合、戻り値が使用されていない関数呼び出しに対してエラーが報告される。この問題を解決するには、関数の戻り値を適切に使用するか、その関数呼び出しを見直す。
- 型エラーを修正するためのサンプルコード:
def function_with_return_value(): return "important information" result = function_with_return_value() print(result) # 戻り値を使用 # 関数の戻り値が適切に使用されている _ = function_with_return_value() # もしくは_で仮置きする
reportUnusedCoroutine
概要
reportUnusedCoroutine: boolean or string
reportUnusedCoroutine
は、戻り値がコルーチンであり、その戻り値がどのようにも使用されていない関数の呼び出しに関する診断を生成または抑制する設定である。この設定は、await
キーワードの省略による一般的なエラーを特定するのに役立つ。戻り値がコルーチンの関数は await
されるべきであり、そうでない場合は意図された動作を行わない可能性がある。この設定のデフォルト値は "error"
である。
設定値ごとの挙動
-
reportUnusedCoroutine: true
or"error"
- 戻り値が使用されていないコルーチン関数呼び出しに対してエラーを生成する。
-
reportUnusedCoroutine: false
or"none"
- 戻り値が使用されていないコルーチン関数呼び出しに関する診断を抑制する。
サンプルコード
-
reportUnusedCoroutine: true
or"error"
の場合async def async_function(): return "some result" async_function() # 戻り値が使用されておらず、await が省略されている # 戻り値が無視されているため、エラーが生成される可能性がある
-
reportUnusedCoroutine: false
or"none"
の場合async def async_function(): return "some result" async_function() # 戻り値が使用されていないコルーチン関数呼び出しに対する警告やエラーは抑制される
型エラーとその解決策
reportUnusedCoroutine
が true
または "error"
の場合、戻り値が使用されていないコルーチン関数呼び出しに対してエラーが報告される。この問題を解決するには、コルーチンを await
するか、その関数呼び出しを見直す。
- 型エラーを修正するためのサンプルコード:
async def async_function(): return "some result" result = await async_function() # コルーチンを await する # コルーチンの戻り値が適切に使用されている
reportUnusedExpression
概要
reportUnusedExpression: boolean or string
reportUnusedExpression
は、その結果がいかなる方法でも使用されていない単純な表現に関する診断を生成または抑制する設定である。このような未使用の表現は、コード内の無駄や潜在的な誤りを示す可能性があり、プログラミングの効率を下げることがある。この設定のデフォルト値は "none"
である。
設定値ごとの挙動
-
reportUnusedExpression: true
or"error"
- 結果が使用されていない単純な表現に対してエラーを生成する。
-
reportUnusedExpression: false
or"none"
- 結果が使用されていない単純な表現に関する診断を抑制する。
サンプルコード
-
reportUnusedExpression: true
or"error"
の場合5 + 10 # 結果が使用されていない表現 # この表現は使用されておらず、エラーが生成される可能性がある
-
reportUnusedExpression: false
or"none"
の場合5 + 10 # 結果が使用されていない表現に対する警告やエラーは抑制される
型エラーとその解決策
reportUnusedExpression
が true
または "error"
の場合、結果が使用されていない単純な表現に対してエラーが報告される。この問題を解決するには、表現の結果を適切に使用するか、表現自体を削除する。
- 型エラーを修正するためのサンプルコード:
result = 5 + 10 # 表現の結果を変数に割り当てる # 表現の結果が適切に使用されている
reportUnnecessaryTypeIgnoreComment
概要
reportUnnecessaryTypeIgnoreComment: boolean or string
reportUnnecessaryTypeIgnoreComment
は、削除しても影響がない # type: ignore
または # pyright: ignore
コメントに関する診断を生成または抑制する設定である。これらのコメントは、通常、型チェッカーによるエラーを意図的に無視するために使用されるが、不要な場合、コードの可読性や保守性に影響を及ぼす可能性がある。この設定のデフォルト値は "none"
である。
設定値ごとの挙動
-
reportUnnecessaryTypeIgnoreComment: true
or"error"
- 影響がない
# type: ignore
または# pyright: ignore
コメントに対してエラーを生成する。
- 影響がない
-
reportUnnecessaryTypeIgnoreComment: false
or"none"
- 影響がない
# type: ignore
または# pyright: ignore
コメントに関する診断を抑制する。
- 影響がない
サンプルコード
-
reportUnnecessaryTypeIgnoreComment: true
or"error"
の場合x = 10 # type: ignore # このコメントは型チェックに影響を与えないため、エラーが生成される可能性がある
-
reportUnnecessaryTypeIgnoreComment: false
or"none"
の場合x = 10 # type: ignore # 影響がないコメントに対する警告やエラーは抑制される
型エラーとその解決策
reportUnnecessaryTypeIgnoreComment
が true
または "error"
の場合、影響がない # type: ignore
または # pyright: ignore
コメントに対してエラーが報告される。この問題を解決するには、不要なコメントを削除する。
- 型エラーを修正するためのサンプルコード:
x = 10 # 不要なコメントを削除 # コメントが削除され、コードの可読性が向上している
reportMatchNotExhaustive
概要
reportMatchNotExhaustive: boolean or string
reportMatchNotExhaustive
は、対象の式に対するすべての潜在的な型を網羅していない match
文に関する診断を生成または抑制する設定である。Python 3.10で導入された match
文は、さまざまな型や条件に基づいて異なるブロックのコードを実行するために使用される。この設定は、match
文が対象の式のすべての可能な型をカバーしていない場合に警告やエラーを提供する。この設定のデフォルト値は "none"
である。
設定値ごとの挙動
-
reportMatchNotExhaustive: true
or"error"
- すべての型を網羅していない
match
文に対してエラーを生成する。
- すべての型を網羅していない
-
reportMatchNotExhaustive: false
or"none"
- すべての型を網羅していない
match
文に関する診断を抑制する。
- すべての型を網羅していない
サンプルコード
-
reportMatchNotExhaustive: true
or"error"
の場合value = ... # ある値 match value: case int(): pass case str(): pass # 他の型についてのケースが欠けている # value の可能な型をすべてカバーしていないため、エラーが生成される可能性がある
-
reportMatchNotExhaustive: false
or"none"
の場合value = ... match value: case int(): pass case str(): pass # すべての型を網羅していない `match` 文に対する警告やエラーは抑制される
型エラーとその解決策
reportMatchNotExhaustive
が true
または "error"
の場合、すべての型を網羅していない match
文に対してエラーが報告される。この問題を解決するには、match
文において対象の式のすべての潜在的な型に対応するケースを提供する。
- 型エラーを修正するためのサンプルコード:
value = ... match value: case int(): pass case str(): pass case _: pass # 他のすべての型に対応するケースを追加 # `match` 文がすべての潜在的な型を網羅している
reportImplicitOverride
概要
reportImplicitOverride: boolean or string
reportImplicitOverride
は、明示的な @override
デコレーターを欠いているクラス内のオーバーライドされたメソッドに関する診断を生成または抑制する設定である。@override
デコレーターは、あるメソッドが基底クラスのメソッドをオーバーライドしていることを明示するために使用される。このデコレーターの使用は、意図的なオーバーライドと偶発的な名前の衝突を区別するのに役立つ。この設定のデフォルト値は "none"
である。
設定値ごとの挙動
-
reportImplicitOverride: true
or"error"
- 明示的な
@override
デコレーターを欠いたオーバーライドメソッドに対してエラーを生成する。
- 明示的な
-
reportImplicitOverride: false
or"none"
- 明示的な
@override
デコレーターを欠いたオーバーライドメソッドに関する診断を抑制する。
- 明示的な
サンプルコード
-
reportImplicitOverride: true
or"error"
の場合class BaseClass: def some_method(self): pass class DerivedClass(BaseClass): def some_method(self): # @override デコレーターが欠けている pass # DerivedClass の some_method が BaseClass をオーバーライドしているが、@override が欠けているためエラーが生成される可能性がある
-
reportImplicitOverride: false
or"none"
の場合class BaseClass: def some_method(self): pass class DerivedClass(BaseClass): def some_method(self): pass # @override デコレーターを欠いたオーバーライドメソッドに対する警告やエラーは抑制される
型エラーとその解決策
reportImplicitOverride
が true
または "error"
の場合、明示的な @override
デコレーターを欠いたオーバーライドメソッドに対してエラーが報告される。この問題を解決するには、オーバーライドされたメソッドに @override
デコレーターを追加する。
- 型エラーを修正するためのサンプルコード:
class BaseClass: def some_method(self): pass class DerivedClass(BaseClass): @override def some_method(self): pass # @override デコレーターが追加され、明示的にオーバーライドしていることが示されている
reportShadowedImports
概要
reportShadowedImports: boolean or string
reportShadowedImports
は、標準ライブラリ(stdlib)内のモジュールをオーバーライドしているファイルに関する診断を生成または抑制する設定である。Pythonでは、同じ名前のモジュールが標準ライブラリとユーザー定義のコードの両方で存在する場合、ユーザー定義のモジュールが標準ライブラリのモジュールを「シャドウ」(覆い隠す)ことがあり、これは意図しないバグの原因となることがある。この設定のデフォルト値は "none"
である。
設定値ごとの挙動
-
reportShadowedImports: true
or"error"
- 標準ライブラリのモジュールをオーバーライドしているファイルに対してエラーを生成する。
-
reportShadowedImports: false
or"none"
- 標準ライブラリのモジュールをオーバーライドしているファイルに関する診断を抑制する。
サンプルコード
-
reportShadowedImports: true
or"error"
の場合# カスタムの datetime.py ファイルを作成 # これは標準ライブラリの datetime モジュールをシャドウする # エラーが生成される可能性がある
-
reportShadowedImports: false
or"none"
の場合# カスタムの datetime.py ファイルが存在していても # 標準ライブラリのモジュールをオーバーライドしているファイルに対する警告やエラーは抑制される
型エラーとその解決策
reportShadowedImports
が true
または "error"
の場合、標準ライブラリのモジュールをオーバーライドしているファイルに対してエラーが報告される。この問題を解決するには、標準ライブラリのモジュール名と競合しない名前をファイルに付ける。
- 型エラーを修正するためのサンプルコード:
# 標準ライブラリのモジュール名と競合しないようにファイル名を変更する # 例: my_datetime.py に変更