Skip to content

Prettier experimental CLI fails when the repository contains a file or directory named propertyIsEnumerable #69

Open

Description

@Standard8

Environments:

  • Prettier Version: 3.6.0
  • Running Prettier via: CLI
  • Runtime: Node v24.1.0
  • Operating System: macOS
  • Prettier plugins (if any): None

Steps to reproduce:

  1. Have a repository where Prettier 3.6 runs correctly.
  2. Create either a file or a directory called propertyIsEnumerable
  3. Run Prettier with the experimental cli:

npx prettier --experimental-cli --check .

Expected behavior:

Prettier runs correctly, no issues.

Actual behavior:

Prettier those an exception:

file:///Users/standard8/dev/test-repo/node_modules/prettier/internal/experimental-cli.mjs:3664
        directoriesNamesToPaths.propertyIsEnumerable(name) || (directoriesNamesToPaths[name] = []);
                                ^

TypeError: directoriesNamesToPaths.propertyIsEnumerable is not a function
    at handleDirectory (file:///Users/standard8/dev/test-repo/node_modules/prettier/internal/experimental-cli.mjs:3664:33)
    at handleDirent (file:///Users/standard8/dev/test-repo/node_modules/prettier/internal/experimental-cli.mjs:3730:11)
    at handleDirents (file:///Users/standard8/dev/test-repo/node_modules/prettier/internal/experimental-cli.mjs:3739:11)
    at file:///Users/standard8/dev/test-repo/node_modules/prettier/internal/experimental-cli.mjs:3760:13
    at Object.then (file:///Users/standard8/dev/test-repo/node_modules/prettier/internal/experimental-cli.mjs:3601:9)
    at file:///Users/standard8/dev/test-repo/node_modules/prettier/internal/experimental-cli.mjs:3758:20
    at node:fs:178:23
    at node:internal/util:569:20
    at getDirents (node:internal/fs/utils:278:7)
    at FSReqCallback.oncomplete (node:fs:1530:7)

It looks like there might also be an issue with symlinks, though I wasn't able to replicate that.

Activity

  1. transferred this issue fromprettier/prettieron Jun 23, 2025
  2. fisker commented on Jun 23, 2025

    @fisker
    Member

    Transferred from prettier repo.

  3. fabiospampinato commented on Jun 23, 2025

    @fabiospampinato
    Collaborator

    Does that problem not happen if you don't have a file named "propertyIsEnumerable"? It sounds to me like you may be running the CLI in an environment where plain objects have a null prototype. If that's not the case I've no clue how this may be happening 🤔 it can be fixed, but it'd be useful to be able to repro it.

  4. fisker commented on Jun 23, 2025

    @fisker
    Member

    I think it's caused by the next call after

    targetFilesNamesToPaths.propertyIsEnumerable(fileName) || (targetFilesNamesToPaths[fileName] = []);

    been executed, it will override targetFilesNamesToPaths.propertyIsEnumerable to an array.

  5. fisker commented on Jun 23, 2025

    @fisker
    Member

    Change to Object.property.propertyIsEnumerable.call() should fix it.

  6. fabiospampinato commented on Jun 23, 2025

    @fabiospampinato
    Collaborator

    Oh of course 🤦‍♂️ I'll get it fixed, thanks 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions