@@ -19,6 +19,7 @@ class PartialRenderChoice:
1919 module : PlainModule | None = None
2020 render_range : list [str ] | None = None
2121 msg : str | None = None
22+ wipe_later_modules : bool = False
2223
2324
2425def spec_change (plain_module : PlainModule ) -> PlainModule | None :
@@ -72,7 +73,7 @@ def detect_partial_rendering(plain_module: PlainModule) -> PartialRender | None:
7273 sc = spec_change (plain_module )
7374 cc = code_change (plain_module )
7475 all_required_modules = plain_module .all_required_modules
75- last_rendered_module_name , last_rendered_frid = plain_module .get_module_last_rendered_functionality ()
76+ last_rendered_module_name , last_rendered_frid = plain_module .get_module_render_status ()
7677 if last_rendered_module_name is None and last_rendered_frid is None :
7778 return None
7879
@@ -84,16 +85,17 @@ def detect_partial_rendering(plain_module: PlainModule) -> PartialRender | None:
8485 module = plain_module
8586 else :
8687 return None
87-
88- module = None
89- for required_module in all_required_modules :
90- if required_module .module_name == last_rendered_module_name :
91- module = required_module
92-
93- if module is None :
94- raise ModuleDoesNotExistError (
95- f"Last rendered module { last_rendered_module_name } not found in { [rmodule .module_name for rmodule in all_required_modules ]} "
96- )
88+ else :
89+ found_module : PlainModule | None = None
90+ for required_module in all_required_modules :
91+ if required_module .module_name == last_rendered_module_name :
92+ found_module = required_module
93+
94+ if found_module is None :
95+ raise ModuleDoesNotExistError (
96+ f"Last rendered module { last_rendered_module_name } not found in { [rmodule .module_name for rmodule in all_required_modules ]} "
97+ )
98+ module = found_module
9799
98100 pr = PartialRender (
99101 last_render_module = module ,
@@ -119,36 +121,55 @@ def detect_partial_rendering(plain_module: PlainModule) -> PartialRender | None:
119121 return pr
120122
121123
122- def get_choices (plain_module : PlainModule , partial_render : PartialRender ) -> dict [str , PartialRenderChoice ]:
124+ def get_choices (
125+ plain_module : PlainModule ,
126+ partial_render : PartialRender ,
127+ force_render : bool = False ,
128+ ) -> dict [str , PartialRenderChoice ]:
123129 choices = dict [str , PartialRenderChoice ]()
124130 choice_idx = 1
125- if not partial_render .last_render_module .is_module_fully_rendered ():
131+
132+ if partial_render .last_render_module .is_initial_module ():
126133 choices [str (choice_idx )] = PartialRenderChoice (
127134 module = partial_render .last_render_module ,
128135 render_range = None ,
129136 msg = f"Start from module [#5593FF]{ partial_render .last_render_module .module_name } [/]" ,
137+ wipe_later_modules = True ,
130138 )
131139 choice_idx += 1
132- if not partial_render .last_render_module .is_initial_module ():
133- if not partial_render .last_render_frid :
134- raise ValueError ("Last render FRID is not set for a non-initial module" )
135140
136- next_frid , next_module = plain_module .get_next_frid (
137- partial_render .last_render_frid , partial_render .last_render_module .module_name
138- )
139- render_range = plain_spec .get_render_range_from (next_frid , next_module .plain_source )
140- msg = "Continue from"
141- if next_frid != plain_spec .get_first_frid (next_module .plain_source ):
142- msg += f" functionality [#5593FF]{ next_frid } [/]"
143- else :
144- msg += f" module [#5593FF]{ next_module .module_name } [/]"
145-
146- choices [str (choice_idx )] = PartialRenderChoice (
147- module = next_module ,
148- render_range = render_range ,
149- msg = msg ,
150- )
151- choice_idx += 1
141+ elif not partial_render .last_render_module .is_module_fully_rendered ():
142+ if not partial_render .last_render_frid :
143+ raise ValueError ("Last render FRID is not set for a non-initial module" )
144+
145+ next_frid , next_module = plain_module .get_next_frid (
146+ partial_render .last_render_frid , partial_render .last_render_module .module_name
147+ )
148+ render_range = plain_spec .get_render_range_from (next_frid , next_module .plain_source )
149+ msg = "Continue from"
150+ if next_frid != plain_spec .get_first_frid (next_module .plain_source ):
151+ msg += f" functionality [#5593FF]{ next_frid } [/]"
152+ else :
153+ msg += f" module [#5593FF]{ next_module .module_name } [/]"
154+
155+ choices [str (choice_idx )] = PartialRenderChoice (
156+ module = next_module ,
157+ render_range = render_range if not force_render else None ,
158+ msg = msg ,
159+ )
160+ choice_idx += 1
161+
162+ else :
163+ next_module = plain_module .get_next_module (partial_render .last_render_module .module_name )
164+ if next_module is None :
165+ next_module = partial_render .last_render_module
166+
167+ choices [str (choice_idx )] = PartialRenderChoice (
168+ module = next_module ,
169+ render_range = None ,
170+ msg = f"Start from module [#5593FF]{ next_module .module_name } [/]" ,
171+ )
172+ choice_idx += 1
152173
153174 if partial_render .change :
154175 all_affected_modules = list [str ]()
@@ -163,6 +184,7 @@ def get_choices(plain_module: PlainModule, partial_render: PartialRender) -> dic
163184 module = partial_render .change ,
164185 render_range = None ,
165186 msg = f"Re-render all affected modules ([#5593FF]{ ', ' .join (all_affected_modules )} [/])" ,
187+ wipe_later_modules = True ,
166188 )
167189 choice_idx += 1
168190
@@ -174,6 +196,7 @@ def get_choices(plain_module: PlainModule, partial_render: PartialRender) -> dic
174196 module = first_module ,
175197 render_range = None ,
176198 msg = f"Re-render from first module ([#5593FF]{ first_module .module_name } [/])" ,
199+ wipe_later_modules = True ,
177200 )
178201 choice_idx += 1
179202
0 commit comments