reflex-dev/reflex · error · ValueError

the function names should be str names of functions in the…

Error message

the function names should be str names of functions in the specified transformer: {library!r}

What it means

Raised by reflex_components_code.shiki_code_block.create_transformer when one of the function names passed in `fns` is not a Python str. The transformer API compiles function names into FunctionStringVar instances, so only string names of exported functions in the target transformer library are accepted.

Solutions

  1. Pass the names of the transformer functions as plain strings, e.g. fns=['rehypeSlug']
  2. If building fns programmatically, coerce each entry with str(fn) only if it really is a name
  3. Check for None entries before calling create_transformer

Example fix

// before
create_transformer("rehype-slug", fns=[rehype_slug])

// after
create_transformer("rehype-slug", fns=["rehypeSlug"])
Defensive patterns

Strategy: validation

Validate before calling

fns = [fn for fn in fns if fn is not None]
assert all(isinstance(fn, str) for fn in fns), fns

Type guard

def is_fn_names(fns: list) -> bool:
    return all(isinstance(fn, str) for fn in fns)

Prevention

When it happens

Trigger: Calling create_transformer('rehype-remark', fns=[SomeFunction]) or passing a callable, None, or imported function object instead of the string function name in the `fns` list.

Common situations: Developers import a transformer function directly (e.g. `import rehypeSlug from ...`) and pass the imported object instead of the string 'rehypeSlug'; or they build the fns list dynamically and accidentally include None.

Understand the failure class

Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.

Related errors


AI-assisted analysis of reflex-dev/reflex@45b8ed5ab7 (2026-08-28). Data as JSON: /api/errors/4f68d8b75b413c7a. Report an issue: GitHub.

Appendix: source

Thrown at packages/reflex-components-code/src/reflex_components_code/shiki_code_block.py:668

        return imports

    @classmethod
    def create_transformer(cls, library: str, fns: list[str]) -> ShikiBaseTransformers:
        """Create a transformer from a third party library.

        Args:
            library: The name of the library.
            fns: The str names of the functions/callables to invoke from the library.

        Returns:
            A transformer for the specified library.

        Raises:
            ValueError: If a supplied function name is not valid str.
        """
        if any(not isinstance(fn_name, str) for fn_name in fns):
            msg = f"the function names should be str names of functions in the specified transformer: {library!r}"
            raise ValueError(msg)
        return ShikiBaseTransformers(
            library=library,
            fns=[FunctionStringVar.create(fn) for fn in fns],  # pyright: ignore [reportCallIssue]
        )

    def _render(self, props: dict[str, Any] | None = None):
        """Renders the component with the given properties, processing transformers if present.

        Args:
            props: Optional properties to pass to the render function.

        Returns:
            Rendered component output.
        """
        # Ensure props is initialized from class attributes if not provided
        props = props or {
            attr.rstrip("_"): getattr(self, attr) for attr in self.get_props()
        }

View on GitHub (pinned to 45b8ed5ab7)