77import tokenize
88from dataclasses import dataclass , field
99from enum import StrEnum
10- from functools import lru_cache
1110from pathlib import Path
1211from typing import ClassVar
1312
@@ -41,12 +40,6 @@ def parse_code(self):
4140 self .user_code , _ , self .test_code = self .code .partition (self .CODE_SPLITTER )
4241
4342
44- @dataclass (frozen = True , slots = True )
45- class ChallengeInfo :
46- name : ChallengeName
47- level : Level
48-
49-
5043@dataclass (frozen = True , slots = True )
5144class TypeCheckResult :
5245 message : str
@@ -56,20 +49,7 @@ class TypeCheckResult:
5649class ChallengeManager :
5750 def __init__ (self ):
5851 self .challenges : dict [ChallengeName , Challenge ] = self ._load_challenges ()
59- self .challenges_groupby_level = self .get_challenges_groupby_level ()
60-
61- def get_challenges_groupby_level (self ) -> dict [Level , list [ChallengeName ]]:
62- groups : dict [str , list [ChallengeName ]] = {}
63-
64- for challenge in self .challenges .values ():
65- groups .setdefault (challenge .level , []).append (challenge .name )
66-
67- # Sort challenge by name alphabetically.
68- for challenge_names in groups .values ():
69- challenge_names .sort ()
70-
71- # Make sure groups are ordered by level (from easy to hard)
72- return {level : groups [level ] for level in Level }
52+ self .challenges_groupby_level = self ._get_challenges_groupby_level ()
7353
7454 def has_challenge (self , name : str ) -> bool :
7555 return name in self .challenges
@@ -97,6 +77,19 @@ def _load_challenges() -> dict[ChallengeName, Challenge]:
9777
9878 return challenges
9979
80+ def _get_challenges_groupby_level (self ) -> dict [Level , list [ChallengeName ]]:
81+ groups : dict [str , list [ChallengeName ]] = {}
82+
83+ for challenge in self .challenges .values ():
84+ groups .setdefault (challenge .level , []).append (challenge .name )
85+
86+ # Sort challenge by name alphabetically.
87+ for challenge_names in groups .values ():
88+ challenge_names .sort ()
89+
90+ # Make sure groups are ordered by level (from easy to hard)
91+ return {level : groups [level ] for level in Level }
92+
10093 EXPECT_ERROR_COMMENT = "expect-type-error"
10194
10295 # Pyright error messages look like:
0 commit comments