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

130 Views Asked by At

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.

1

There are 1 best solutions below

0
Second2None On BEST ANSWER

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:

  • On the WSL instance open the file /etc/wsl.conf with something like sudo nano /etc/wsl.conf
  • Add the following lines to the bottom of the file,
[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.