@@ -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,56 @@ 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 } [/]"
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" )
145144
146- choices [str (choice_idx )] = PartialRenderChoice (
147- module = next_module ,
148- render_range = render_range ,
149- msg = msg ,
150- )
151- choice_idx += 1
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+ wipe_later_modules = force_render ,
159+ msg = msg ,
160+ )
161+ choice_idx += 1
162+
163+ else :
164+ next_module = plain_module .get_next_module (partial_render .last_render_module .module_name )
165+ if next_module is None :
166+ next_module = partial_render .last_render_module
167+
168+ choices [str (choice_idx )] = PartialRenderChoice (
169+ module = next_module ,
170+ render_range = None ,
171+ msg = f"Start from module [#5593FF]{ next_module .module_name } [/]" ,
172+ )
173+ choice_idx += 1
152174
153175 if partial_render .change :
154176 all_affected_modules = list [str ]()
@@ -163,19 +185,22 @@ def get_choices(plain_module: PlainModule, partial_render: PartialRender) -> dic
163185 module = partial_render .change ,
164186 render_range = None ,
165187 msg = f"Re-render all affected modules ([#5593FF]{ ', ' .join (all_affected_modules )} [/])" ,
188+ wipe_later_modules = True ,
166189 )
167190 choice_idx += 1
168191
169- first_module = plain_module .all_required_modules [0 ]
170- if first_module .module_name != partial_render .last_render_module .module_name and (
171- partial_render .change is not None and first_module .module_name != partial_render .change .module_name
172- ):
173- choices [str (choice_idx )] = PartialRenderChoice (
174- module = first_module ,
175- render_range = None ,
176- msg = f"Re-render from first module ([#5593FF]{ first_module .module_name } [/])" ,
177- )
178- choice_idx += 1
192+ if len (plain_module .all_required_modules ) > 0 :
193+ first_module = plain_module .all_required_modules [0 ]
194+ if first_module .module_name != partial_render .last_render_module .module_name and (
195+ partial_render .change is not None and first_module .module_name != partial_render .change .module_name
196+ ):
197+ choices [str (choice_idx )] = PartialRenderChoice (
198+ module = first_module ,
199+ render_range = None ,
200+ msg = f"Re-render from first module ([#5593FF]{ first_module .module_name } [/])" ,
201+ wipe_later_modules = True ,
202+ )
203+ choice_idx += 1
179204
180205 choices [str (choice_idx )] = PartialRenderChoice (module = None , render_range = None , msg = "Quit" )
181206
0 commit comments