A non-Hack distribution of PhaLinters to allow HTL packages to use portable-hack-ast-linters without circular dependencies.
- Optionally install the VSCode extension1 and configure it in
.vscode/settings.json
.-
http://localhost:10641?format=json&action=lint-input
is a good default.
-
- Launch the server using the CLI instructions below.
- Make sure to configure the port is exposed to the host network in Docker.
- Lint the entire project using
curl http://localhost:10641
.- The following query parameters are supported:
-
format=text/vscode-json
-
text
(default) output human readable text. -
vscode-json
output json for use with the extension.
-
-
directories=src,tests
- A comma separated list of directory names relative to the project root.
- Only effective when
action
islint-all
-
action=lint-all/lint-input
-
lint-all
(default) scan alldirectories
for lint errors -
lint-input
lint the Hack source text sent in the request body.
-
-
- The following query parameters are supported:
- Lint files interactively by opening them in VSCode with the extension installed.
This distribution of PhaLinters
can be spawned using the vendor/bin/pha-linters-server.sh
script.
In the examples below $SERVER_SH
should expand to the script path above.
# Print help text and exit
$SERVER_SH -h
# Interactive setup, scan for the bundle and prompts you to trust it.
# Hosts the http server on port 10641, or the port specified with `-p`.
$SERVER_SH
# AFK setup which builds and runs the first portable-hack-ast-server-bundle.resource
# Skips the trust prompt, should only be used if you trust every file in the directory.
$SERVER_SH -t
# AFK setup, point $SERVER_SH to a bundle, skips the prompt.
# Recommended setup for CI pipelines
$SERVER_SH -b "vendor/hershel-theodore-layton/portable-hack-ast-server/bin/portable-hack-ast-server-bundle.resource"
When running interactively, you may see the following prompt:
Found the following resource file.
./path/to/portable-hack-ast-linters-server-bundled.resource
If you trust the resource above, type 'I trust this resource' to build and run it.
When you type I trust this resource
, you understand the risks involved with
compiling and running this resource.
This package depends on portable-hack-ast(-linters|-extras)
at build time,
but the bundled output does not. This bundling process allows portable-hack-ast
and portable-hack-ast-extras
to use this package without circular dependencies.
This is accomplished by publishing an empty composer.json
file.
When developing this bundle, you must select the composer file with dependencies.
Set the COMPOSER
environment
variable to composer.dev.json
.
COMPOSER=composer.dev.json composer update
This will install the dependencies, whereas composer update
without the
environment variable set will not install anything.
Since the bundle can't depend on any unbundled code, for example hhvm-autoload
,
developing this package requires the ini settinghhvm.autoload.enabled=true
.
Downstream consumers don't need native autoloading, since the bundle includes
all the dependencies in a single file.
When you are testing live (not the bundle itself), you can start the server using:
hhvm -m server -p 8080 -vServer.AllowRunAsRoot=1 -dhhvm.server.global_document=src/main.hack
If you want to test the bundle, use the following command:
./build.sh && bin/pha-linters-server.sh -p 8080 \
-b bin/portable-hack-ast-linters-server-bundled.resource
This will rebuild, recompile and start the lint-server.
Footnotes
-
This extension is available on open-vsx.org at the time of writing. Stock VSCode is configured to load extensions from the VSCode Marketplace. If you are using VSCode, download and install the
.vsix
file. If you are using a VSCode fork, such as VSCodium, you can find the extension in the extension search tab, since VSCode forks use open-vsx. ↩