Skip to content

How to use VSCode#

VSCode (or better the open source version VSCodium) may be used to edit files.

Here are some useful tricks.

Perlcritic#

One way to have perlcritic work is the following:

  • install the perlcritic extension
  • add a perlcritic.sh at the root of your project with following content:
    #!/usr/bin/env bash
    . .envrc >/dev/null 2>&1
    docker compose run --rm --no-deps backend perlcritic "$@" 2>/dev/null
    
    the second line is useful only if you use direnv
  • chmod +x perlcritic.sh
  • patch perlcritic by editing its files, following sfodje/perlcritic issue #26
  • edit the perlcritic configuration in workspace to set the value (after adjusting the pathname for your own OFF setup):
    • Executable: /path/to/your/own/OFF-server/perlcritic.sh

Perl Language Server#

The extension Language Server and Debugger is harder to work with!

Note: This setup does not work yet, but might be getting close. It is probably due to https://github.com/richterger/Perl-LanguageServer/issues/131.

  • install the extension
  • add a script shell-into-appserver.sh in the project:
    #!/usr/bin/env bash
    declare -x PATH=$PATH:/usr/local/bin/
    source .envrc
    COMMAND=$(echo "$@" | sed 's/^.*perl /perl /')
    >&2 echo "launching $COMMAND"
    docker compose run --rm --no-deps -T -p 127.0.0.  1:13603:13603 backend $COMMAND
    
    Note: the second line is useful only if you use direnv
  • chmod +x shell-into-appserver.sh
  • Edit workspace settings to have those settings:
        "perl": {
            "enable": true,
            "perlInc": ["/opt/product-opener/lib", "/opt/perl/local/lib/perl5"],
            "ignoreDirs": ["/opt/perl/local/lib/perl5", ".  vscode"],
            "fileFilter": [".pm", ".pl", ".t"],
            "sshAddr": "dummy",
            "sshUser": "dummy",
            "sshCmd": "./shell-into-appserver.sh",
            "sshWorkspaceRoot": "/opt/product-opener",
            "logLevel": 2
        },
    

Remote container ?#

Note: at the moment we do not support the Remote Container extension. While we can consider using it, it has some drawbacks because not all the project is contained within the "backend" container. For example everything related to nodejs is in the "frontend" container. So it means making a quite complete Docker image on its own with all the tooling necessary.