php-cs-fixer

GrumPHP and php-cs-fixer on WSL using wrong version


I'm trying to get GrumPHP to work with a small Laravel 9 project but php-cs-fixer is being pulled from the wrong location and I can't seem to find how to change this.

Error from GrumPHP:

phpcsfixer
==========

PHP needs to be a minimum version of PHP 7.1.0 and maximum version of PHP 7.4.*.

You can fix errors by running the following command:
'/windir/f/wamp64/vendor/bin//php-cs-fixer' '--config=./home/testuser/php-cs-config.php_cs' '--verbose' 'fix'

Seems like an easy fix, so I updated php-cs-fixer and followed the upgrade guide to get to v3. (currently sitting on 3.10). But I can also see that '/windir/f/wamp64/vendor/bin//php-cs-fixer' is not the correct directory for php-cs-fixer, the actual bin folder is located in WSL not the windows directory so I included a GRUMPHP_BIN_DIR in the grumphp yaml but still no luck.

grumphp.yml

grumphp:
  environment:
    variables:
      GRUMPHP_PROJECT_DIR: "."
      GRUMPHP_BIN_DIR: "./home/testuser/tools/vendor/bin/"
    paths:
      - './home/plustime/tools'
  tasks:
    phpcsfixer:
      config: "./home/testuser/php-cs-config.php_cs"
      allow_risky: ~
      cache_file: ~
      rules: []
      using_cache: ~
      config_contains_finder: true
      verbose: true
      diff: false
      triggered_by: ['php']

I can't seem to find much about this or anything in the docs, so any help would be appreciated.


Solution

  • This ended up coming down to altering how WSL constructs the environment. To get around WSL building windows paths into the Linux distribution.

    The answer was found here: How to remove the Win10's PATH from WSL

    Quick run down:

    [interop]
    appendWindowsPath = false
    

    Mine looked like this when it was finished:

        # Enable extra metadata options by default
        [automount]
        enabled = true
        root = /windir/
        options = "metadata,umask=22,fmask=11"
        mountFsTab = false
        
        # Enable DNS – even though these are turned on by default, we'll specify here just to be explicit.
        [network]
        generateHosts = true
        generateResolvConf = true
        
        [interop]
        appendWindowsPath = false
    

    Then restart the WSL instance from your windows terminal and restart it.

    wsl --shutdown
    

    GrumPHP now using the correct php-cs-fixer.