1111
1212from marimo ._ast .cell import CellConfig
1313from marimo ._ast .compiler import compile_cell
14+ from marimo ._ast .names import DEFAULT_CELL_NAME
1415from marimo ._ast .transformers import NameTransformer , RemoveImportTransformer
1516from marimo ._ast .variables import is_local
1617from marimo ._ast .visitor import Block , NamedNode , ScopedVisitor
17- from marimo ._convert .common .format import markdown_to_marimo
18+ from marimo ._convert .common .format import (
19+ DEFAULT_MARKDOWN_PREFIX ,
20+ markdown_to_marimo ,
21+ )
1822from marimo ._runtime .dataflow import DirectedGraph
1923from marimo ._schemas .serialization import (
2024 AppInstantiation ,
3135@dataclass
3236class CodeCell :
3337 source : str
38+ name : str = field (default_factory = lambda : DEFAULT_CELL_NAME )
3439 config : CellConfig = field (default_factory = CellConfig )
3540
3641
@@ -1169,24 +1174,30 @@ def bind_cell_metadata(
11691174 cells : list [CodeCell ] = []
11701175 for source , meta , hide_code in zip (sources , metadata , hide_flags ):
11711176 tags : set [str ] = set (meta .get ("tags" , []))
1172- if "hide-cell" in tags :
1173- tags .discard ("hide-cell" )
1174- hide_code = True
1175- if tags :
1176- source = f"# Cell tags: { ', ' .join (sorted (tags ))} \n { source } "
11771177
11781178 # Extract marimo-specific cell config if present
11791179 marimo_meta = meta .get ("marimo" , {})
11801180 marimo_config = marimo_meta .get ("config" , {})
1181+ name = marimo_meta .get ("name" , DEFAULT_CELL_NAME )
11811182
1182- # Merge marimo config with existing flags
1183- # marimo config takes precedence for hide_code if present
1183+ # Determine hide_code with priority: marimo config > tags > hide_flags default
11841184 if "hide_code" in marimo_config :
11851185 hide_code = marimo_config ["hide_code" ]
1186+ elif "hide-cell" in tags :
1187+ tags .discard ("hide-cell" )
1188+ hide_code = True
1189+ elif "marimo" in meta :
1190+ # Cell was created by marimo; marimo would have stored hide_code=True
1191+ # explicitly if needed, so default to False instead of is_markdown
1192+ hide_code = False
1193+
1194+ if tags :
1195+ source = f"# Cell tags: { ', ' .join (sorted (tags ))} \n { source } "
11861196
11871197 cells .append (
11881198 CodeCell (
11891199 source = source ,
1200+ name = name ,
11901201 config = CellConfig (
11911202 hide_code = hide_code ,
11921203 column = marimo_config .get ("column" ),
@@ -1393,7 +1404,11 @@ def convert_from_ipynb_to_notebook_ir(
13931404 )
13941405 is_markdown : bool = cell ["cell_type" ] == "markdown"
13951406 if is_markdown :
1396- source = markdown_to_marimo (source )
1407+ cell_meta = cell .get ("metadata" , {})
1408+ md_prefix = cell_meta .get ("marimo" , {}).get (
1409+ "md_prefix" , DEFAULT_MARKDOWN_PREFIX
1410+ )
1411+ source = markdown_to_marimo (source , prefix = md_prefix )
13971412 elif inline_meta is None :
13981413 # Eagerly find PEP 723 metadata, first match wins
13991414 inline_meta , source = extract_inline_meta (source )
@@ -1420,6 +1435,7 @@ def convert_from_ipynb_to_notebook_ir(
14201435 cells = [
14211436 CellDef (
14221437 code = cell .source ,
1438+ name = cell .name ,
14231439 options = cell .config .asdict (),
14241440 )
14251441 for cell in transformed_cells
0 commit comments