feat(php): show PHPStan errors in the editor on save (#1518)

PHPStan results were only visible in a terminal. Saving a PHP file in a trusted project with vendor/bin/phpstan now runs phpstan analyse --error-format=json on the saved files (debounced, from the project root, on the selected PHP with XDEBUG_MODE=off) and shows its errors at their lines in the editor and Problems, with the PHPStan identifier as the code; saving the fixed code clears them. Settings > Editor > Inspections lists PHPStan under PHP with each reported identifier, so rules can be turned off or re-graded, and Settings > Languages & Frameworks > PHP > PHPStan selects another configuration file. A failing run is reported once as a notification; a newer save cancels a check in progress, and Restricted Mode stops it.

Closes #1212

Co-authored-by: DanielADK <[email protected]>
Цей коміт міститься в:
Daniel AdámekтаDanielADK authored and GitHub committed 2026-11-05 21:50:06 +08:00
1 джерело 324dded5c1
коміт c495c09416
24 files changed
+1163 -17

No files matched your search

+7
Переглянути файл
@@ -39,6 +39,13 @@ describe("inspection controls", () => {
expect(diagnosticInspection("ruff", { code: "F401" })).toEqual({ id: "lsp:ruff:F401", name: "ruff F401" });
expect(diagnosticInspection("pyright", { code: null })).toEqual({ id: "lsp:pyright", name: "pyright" });
expect(diagnosticInspection("", { code: null })).toBeNull();
// A built-in check reported per code: PHPStan's identifiers.
expect(diagnosticInspection("phpstan", { code: "constant.notFound" })).toEqual({
id: "builtin:phpstan:constant.notFound",
name: "PHPStan constant.notFound",
});
expect(diagnosticInspection("phpstan", { code: null })).toEqual({ id: "builtin:phpstan", name: "PHPStan" });
expect(diagnosticInspection("build", { code: "E0308" })).toEqual({ id: "builtin:build", name: "Build problems" });
});
it("writes to the profile in effect, at its level", async () => {
+20
Переглянути файл
@@ -112,6 +112,26 @@ describe("inspection profiles", () => {
expect(isTypoStyled(applyProfile({ "lsp:ruff": { severity: "typo" } }, "ruff", [diag("x")])[0]!)).toBe(true);
});
it("shows PHPStan results as warnings, each identifier turned off or re-graded on its own", () => {
const phpstan = (code: string | null): Diagnostic => ({ ...diag(code, "warning", "phpstan"), source: "PHPStan" });
const items = [phpstan("constant.notFound"), phpstan("return.type"), phpstan(null)];
expect(producerInspectionId("phpstan")).toBe("builtin:phpstan");
expect(applyProfile({}, "phpstan", items).map((d) => d.severity)).toEqual(["warning", "warning", "warning"]);
const out = applyProfile(
{
"builtin:phpstan:constant.notFound": { enabled: false },
"builtin:phpstan:return.type": { severity: "error" },
},
"phpstan",
items,
);
expect(out.map((d) => [d.code, d.severity])).toEqual([
["return.type", "error"],
[null, "warning"],
]);
expect(applyProfile({ "builtin:phpstan": { enabled: false } }, "phpstan", items)).toEqual([]);
});
it("lists, labels and resolves copied profiles", () => {
const s = validateInspections({
profile: "ide:strict",
+15 -2
Переглянути файл
@@ -218,6 +218,8 @@ export interface BuiltinInspection {
defaultLevel?: InspectionLevel;
/** `false`: off until a profile turns it on. */
defaultEnabled?: boolean;
/** Each diagnostic code is an inspection of its own (`<id>:<code>`), as a language server's are. */
byCode?: boolean;
options?: readonly InspectionOptionSpec[];
}
@@ -298,6 +300,16 @@ export const BUILTIN_INSPECTIONS: readonly BuiltinInspection[] = [
defaultLevel: "warning",
defaultEnabled: false,
},
{
id: "builtin:phpstan",
producer: "phpstan",
name: "PHPStan",
group: "PHP",
description:
"Errors the project's vendor/bin/phpstan reports in a PHP file when it is saved, shown at their lines. PHPStan reads phpstan.neon, phpstan.neon.dist or phpstan.dist.neon from the project root, or the configuration file chosen in Settings › Languages & Frameworks › PHP. Each rule PHPStan has reported is listed below by its identifier and can be turned off or re-graded on its own.",
defaultLevel: "warning",
byCode: true,
},
{
id: "builtin:sql",
producer: "sql-inspections",
@@ -346,9 +358,10 @@ export interface InspectionRef {
export function diagnosticInspection(producer: string, d: Pick<Diagnostic, "code">): InspectionRef | null {
if (!producer) return null;
const builtin = BUILTIN_BY_PRODUCER.get(producer);
if (builtin) return { id: builtin.id, name: builtin.name };
if (builtin && !(builtin.byCode && d.code)) return { id: builtin.id, name: builtin.name };
const base = producerInspectionId(producer);
return d.code ? { id: codeInspectionId(base, d.code), name: `${producer} ${d.code}` } : { id: base, name: producer };
const name = builtin?.name ?? producer;
return d.code ? { id: codeInspectionId(base, d.code), name: `${name} ${d.code}` } : { id: base, name };
}
/** Inspection id of everything a producer reports. */
+3 -1
Переглянути файл
@@ -81,6 +81,7 @@ export interface LanguagesValid {
languageLevel: (typeof PHP_LANGUAGE_LEVELS)[number];
includePaths: string[];
stubs: string[];
phpstanConfig: string;
};
rust: {
toolchain: string;
@@ -152,7 +153,7 @@ export const DEFAULT_LANGUAGES: LanguagesValid = {
python: { interpreter: "", activateVirtualenv: true },
ruby: { interpreter: "" },
node: { interpreter: "", packageManager: "" },
php: { interpreter: "", languageLevel: "", includePaths: [], stubs: [] },
php: { interpreter: "", languageLevel: "", includePaths: [], stubs: [], phpstanConfig: "" },
rust: { toolchain: "", stdlib: "", checkOnSave: true, checkCommand: "check", rustfmtArgs: "" },
go: { goroot: "", gopath: "", buildTags: DEFAULT_GO_BUILD_TAGS, modules: { env: {}, autoVendor: true } },
typescript: { version: "bundled" },
@@ -271,6 +272,7 @@ export function validateLanguages(raw: unknown): LanguagesValid {
languageLevel: oneOf(php.languageLevel, PHP_LANGUAGE_LEVELS, d.php.languageLevel),
includePaths: strings(php.includePaths),
stubs: strings(php.stubs),
phpstanConfig: text(php.phpstanConfig, d.php.phpstanConfig),
},
rust: {
toolchain: text(rust.toolchain, d.rust.toolchain),
+8 -1
Переглянути файл
@@ -5,5 +5,12 @@
"WSL distribution:": "WSL distribution:",
"WSL distribution": "WSL distribution",
"Project runs on {label}": "Project runs on {label}",
"Forwarding ports is not supported in a WSL project yet": "Forwarding ports is not supported in a WSL project yet"
"Forwarding ports is not supported in a WSL project yet": "Forwarding ports is not supported in a WSL project yet",
"PHPStan check failed": "PHPStan check failed",
"PHPStan ended with {status} and no report": "PHPStan ended with {status} and no report",
"Cannot run {program}: {error}": "Cannot run {program}: {error}",
"Errors the project's vendor/bin/phpstan reports in a PHP file when it is saved, shown at their lines. PHPStan reads phpstan.neon, phpstan.neon.dist or phpstan.dist.neon from the project root, or the configuration file chosen in Settings › Languages & Frameworks › PHP. Each rule PHPStan has reported is listed below by its identifier and can be turned off or re-graded on its own.": "Errors the project's vendor/bin/phpstan reports in a PHP file when it is saved, shown at their lines. PHPStan reads phpstan.neon, phpstan.neon.dist or phpstan.dist.neon from the project root, or the configuration file chosen in Settings › Languages & Frameworks › PHP. Each rule PHPStan has reported is listed below by its identifier and can be turned off or re-graded on its own.",
"phpstan.neon, phpstan.neon.dist or phpstan.dist.neon": "phpstan.neon, phpstan.neon.dist or phpstan.dist.neon",
"The configuration vendor/bin/phpstan checks saved files with. Empty uses phpstan.neon, phpstan.neon.dist or phpstan.dist.neon in the project root. Absolute, or relative to the project.": "The configuration vendor/bin/phpstan checks saved files with. Empty uses phpstan.neon, phpstan.neon.dist or phpstan.dist.neon in the project root. Absolute, or relative to the project.",
"Select PHPStan Configuration File": "Select PHPStan Configuration File"
}
+7
Переглянути файл
@@ -58,6 +58,9 @@
"Kotlin bridge bundle is unavailable": "El paquete del puente de Kotlin no está disponible",
"Kotlin bridge command did not acknowledge its library snapshot": "El comando del puente de Kotlin no confirmó su instantánea de biblioteca",
"Kotlin editor compilation failed": "Error en la compilación del editor de Kotlin",
"PHPStan check failed": "Error en la verificación de PHPStan",
"PHPStan ended with {status} and no report": "PHPStan terminó ({status}) sin generar un reporte",
"Cannot run {program}: {error}": "No se puede ejecutar {program}: {error}",
"Updating results…": "Actualizando resultados…",
"Uploading files": "Subiendo archivos",
"No files on the clipboard": "No hay archivos en el portapapeles",
@@ -3898,6 +3901,7 @@
"Change Severity": "Cambiar severidad",
"Edit Inspection Profile Setting…": "Editar configuración del perfil de inspección…",
"Compiler errors and warnings of the last Build Project, shown at their source positions.": "Errores y advertencias del compilador de la última compilación del proyecto, mostrados en sus posiciones en el código fuente.",
"Errors the project's vendor/bin/phpstan reports in a PHP file when it is saved, shown at their lines. PHPStan reads phpstan.neon, phpstan.neon.dist or phpstan.dist.neon from the project root, or the configuration file chosen in Settings › Languages & Frameworks › PHP. Each rule PHPStan has reported is listed below by its identifier and can be turned off or re-graded on its own.": "Errores que reporta el vendor/bin/phpstan del proyecto en un archivo PHP al guardarlo, mostrados en sus líneas. PHPStan lee phpstan.neon, phpstan.neon.dist o phpstan.dist.neon de la raíz del proyecto, o el archivo de configuración elegido en Configuración › Lenguajes y frameworks › PHP. Cada regla que PHPStan ha reportado aparece abajo con su identificador y puede desactivarse o cambiar de severidad por separado.",
"Process code": "Procesar código",
"Process literals": "Procesar literales",
"Process comments": "Procesar comentarios",
@@ -5677,6 +5681,9 @@
"No additional stubs": "Sin stubs adicionales",
"Stub": "Stub",
"Stub name, e.g. wordpress": "Nombre del stub, p. ej., wordpress",
"phpstan.neon, phpstan.neon.dist or phpstan.dist.neon": "phpstan.neon, phpstan.neon.dist o phpstan.dist.neon",
"The configuration vendor/bin/phpstan checks saved files with. Empty uses phpstan.neon, phpstan.neon.dist or phpstan.dist.neon in the project root. Absolute, or relative to the project.": "La configuración con la que vendor/bin/phpstan verifica los archivos guardados. Vacío usa phpstan.neon, phpstan.neon.dist o phpstan.dist.neon en la raíz del proyecto. Ruta absoluta o relativa al proyecto.",
"Select PHPStan Configuration File": "Seleccionar archivo de configuración de PHPStan",
"select files in a git repository to shelve": "seleccione archivos en un repositorio git para guardar en el shelf",
"select files from a single git repository to shelve": "seleccione archivos de un único repositorio git para guardar en el shelf",
"External file changes sync may be slow": "La sincronización de cambios externos de archivos puede ser lenta",
+7
Переглянути файл
@@ -7,6 +7,9 @@
"Kotlin bridge bundle is unavailable": "Le bundle du pont Kotlin est indisponible",
"Kotlin bridge command did not acknowledge its library snapshot": "La commande du pont Kotlin n'a pas accusé réception de son instantané de bibliothèques",
"Kotlin editor compilation failed": "Échec de la compilation de l'éditeur Kotlin",
"PHPStan check failed": "Échec de la vérification PHPStan",
"PHPStan ended with {status} and no report": "PHPStan s'est terminé ({status}) sans produire de rapport",
"Cannot run {program}: {error}": "Impossible d'exécuter {program} : {error}",
"Updating results…": "Mise à jour des résultats…",
"Uploading files": "Envoi des fichiers",
"No files on the clipboard": "Aucun fichier dans le presse-papiers",
@@ -3764,6 +3767,7 @@
"Change Severity": "Modifier la gravité",
"Edit Inspection Profile Setting…": "Modifier le paramètre du profil d'inspection…",
"Compiler errors and warnings of the last Build Project, shown at their source positions.": "Erreurs et avertissements du compilateur du dernier build du projet, affichés à leur emplacement dans la source.",
"Errors the project's vendor/bin/phpstan reports in a PHP file when it is saved, shown at their lines. PHPStan reads phpstan.neon, phpstan.neon.dist or phpstan.dist.neon from the project root, or the configuration file chosen in Settings › Languages & Frameworks › PHP. Each rule PHPStan has reported is listed below by its identifier and can be turned off or re-graded on its own.": "Erreurs que le vendor/bin/phpstan du projet signale dans un fichier PHP lors de son enregistrement, affichées sur leurs lignes. PHPStan lit phpstan.neon, phpstan.neon.dist ou phpstan.dist.neon à la racine du projet, ou le fichier de configuration choisi dans Paramètres › Langages et frameworks › PHP. Chaque règle signalée par PHPStan est listée ci-dessous par son identifiant ; on peut la désactiver ou modifier sa gravité individuellement.",
"Process code": "Traiter le code",
"Process literals": "Traiter les littéraux",
"Process comments": "Traiter les commentaires",
@@ -5770,6 +5774,9 @@
"PHP {version}, from config.platform.php in composer.json": "PHP {version}, depuis config.platform.php de composer.json",
"PHP {version}, the lowest version require.php in composer.json allows": "PHP {version}, la version la plus basse autorisée par require.php de composer.json",
"Set in the settings of the linked project {name}": "Défini dans les paramètres du projet lié {name}",
"phpstan.neon, phpstan.neon.dist or phpstan.dist.neon": "phpstan.neon, phpstan.neon.dist ou phpstan.dist.neon",
"The configuration vendor/bin/phpstan checks saved files with. Empty uses phpstan.neon, phpstan.neon.dist or phpstan.dist.neon in the project root. Absolute, or relative to the project.": "La configuration avec laquelle vendor/bin/phpstan vérifie les fichiers enregistrés. Vide : utilise phpstan.neon, phpstan.neon.dist ou phpstan.dist.neon à la racine du projet. Chemin absolu ou relatif au projet.",
"Select PHPStan Configuration File": "Sélectionner le fichier de configuration PHPStan",
"select files in a git repository to shelve": "sélectionnez les fichiers d'un dépôt git à mettre de côté",
"select files from a single git repository to shelve": "sélectionnez les fichiers d'un seul dépôt git à mettre de côté",
"External file changes sync may be slow": "La synchronisation des modifications externes de fichiers peut être lente",
+7
Переглянути файл
@@ -50,6 +50,9 @@
"Kotlin bridge bundle is unavailable": "Kotlin 브리지 번들을 사용할 수 없습니다",
"Kotlin bridge command did not acknowledge its library snapshot": "Kotlin 브리지 명령이 라이브러리 스냅샷을 확인하지 않았습니다",
"Kotlin editor compilation failed": "Kotlin 편집기 컴파일 실패",
"PHPStan check failed": "PHPStan 검사 실패",
"PHPStan ended with {status} and no report": "PHPStan이 보고서 없이 종료되었습니다({status})",
"Cannot run {program}: {error}": "{program}을(를) 실행할 수 없습니다: {error}",
"Updating results…": "결과 업데이트 중…",
"Uploading files": "파일 업로드 중",
"No files on the clipboard": "클립보드에 파일이 없습니다",
@@ -3877,6 +3880,7 @@
"Change Severity": "심각도 변경",
"Edit Inspection Profile Setting…": "검사 프로필 설정 편집…",
"Compiler errors and warnings of the last Build Project, shown at their source positions.": "마지막 프로젝트 빌드의 컴파일러 오류 및 경고를 해당 소스 위치에 표시합니다.",
"Errors the project's vendor/bin/phpstan reports in a PHP file when it is saved, shown at their lines. PHPStan reads phpstan.neon, phpstan.neon.dist or phpstan.dist.neon from the project root, or the configuration file chosen in Settings › Languages & Frameworks › PHP. Each rule PHPStan has reported is listed below by its identifier and can be turned off or re-graded on its own.": "PHP 파일을 저장할 때 프로젝트의 vendor/bin/phpstan이 보고하는 오류를 해당 줄에 표시합니다. PHPStan은 프로젝트 루트의 phpstan.neon, phpstan.neon.dist 또는 phpstan.dist.neon이나 설정 › 언어 및 프레임워크 › PHP에서 선택한 구성 파일을 읽습니다. PHPStan이 보고한 각 규칙은 아래에 식별자로 나열되며 개별적으로 끄거나 심각도를 변경할 수 있습니다.",
"Process code": "코드 처리",
"Process literals": "리터럴 처리",
"Process comments": "주석 처리",
@@ -5624,6 +5628,9 @@
"PHP {version}, from config.platform.php in composer.json": "PHP {version}, composer.json의 config.platform.php 기준",
"PHP {version}, the lowest version require.php in composer.json allows": "PHP {version}, composer.json의 require.php가 허용하는 가장 낮은 버전",
"Set in the settings of the linked project {name}": "연결된 프로젝트 {name}의 설정에서 지정",
"phpstan.neon, phpstan.neon.dist or phpstan.dist.neon": "phpstan.neon, phpstan.neon.dist 또는 phpstan.dist.neon",
"The configuration vendor/bin/phpstan checks saved files with. Empty uses phpstan.neon, phpstan.neon.dist or phpstan.dist.neon in the project root. Absolute, or relative to the project.": "vendor/bin/phpstan이 저장된 파일을 검사할 때 사용하는 구성입니다. 비워 두면 프로젝트 루트의 phpstan.neon, phpstan.neon.dist 또는 phpstan.dist.neon을 사용합니다. 절대 경로 또는 프로젝트 기준 상대 경로입니다.",
"Select PHPStan Configuration File": "PHPStan 구성 파일 선택",
"select files in a git repository to shelve": "셸브할 git 저장소의 파일을 선택하세요",
"select files from a single git repository to shelve": "셸브할 단일 git 저장소의 파일을 선택하세요",
"External file changes sync may be slow": "외부 파일 변경 사항 동기화가 느릴 수 있습니다",
+7
Переглянути файл
@@ -50,6 +50,9 @@
"Kotlin bridge bundle is unavailable": "Pakiet mostka Kotlin jest niedostępny",
"Kotlin bridge command did not acknowledge its library snapshot": "Polecenie mostka Kotlin nie potwierdziło migawki swojej biblioteki",
"Kotlin editor compilation failed": "Kompilacja edytora Kotlin nie powiodła się",
"PHPStan check failed": "Sprawdzanie PHPStan nie powiodło się",
"PHPStan ended with {status} and no report": "PHPStan zakończył działanie ({status}) i nie wygenerował raportu",
"Cannot run {program}: {error}": "Nie można uruchomić {program}: {error}",
"Updating results…": "Aktualizowanie wyników…",
"Uploading files": "Przesyłanie plików",
"No files on the clipboard": "Brak plików w schowku",
@@ -3864,6 +3867,7 @@
"Change Severity": "Zmień poziom ważności",
"Edit Inspection Profile Setting…": "Edytuj ustawienia profilu inspekcji…",
"Compiler errors and warnings of the last Build Project, shown at their source positions.": "Błędy i ostrzeżenia kompilatora z ostatniego budowania projektu, wyświetlane w miejscach w kodzie.",
"Errors the project's vendor/bin/phpstan reports in a PHP file when it is saved, shown at their lines. PHPStan reads phpstan.neon, phpstan.neon.dist or phpstan.dist.neon from the project root, or the configuration file chosen in Settings › Languages & Frameworks › PHP. Each rule PHPStan has reported is listed below by its identifier and can be turned off or re-graded on its own.": "Błędy, które vendor/bin/phpstan projektu zgłasza w pliku PHP po jego zapisaniu, wyświetlane w odpowiednich wierszach. PHPStan odczytuje phpstan.neon, phpstan.neon.dist lub phpstan.dist.neon z katalogu głównego projektu albo plik konfiguracyjny wybrany w Ustawienia › Języki i technologie › PHP. Każda reguła zgłoszona przez PHPStan jest wymieniona poniżej według identyfikatora i można ją osobno wyłączyć lub zmienić jej poziom ważności.",
"Process code": "Przetwarzaj kod",
"Process literals": "Przetwarzaj literały",
"Process comments": "Przetwarzaj komentarze",
@@ -5607,6 +5611,9 @@
"PHP interpreter": "Interpretator PHP",
"Runs PHP scripts, PHPUnit, Composer and artisan, and the PHP-based language servers (phpactor). Its folder is put first on PATH, so vendor/bin/phpunit and other #!/usr/bin/env php scripts use it too.": "Uruchamia skrypty PHP, PHPUnit, Composer, artisan oraz serwery językowe oparte na PHP (phpactor). Jego folder umieszczany jest na początku zmiennej PATH, dzięki czemu skrypty vendor/bin/phpunit i inne #!/usr/bin/env php również z niego korzystają.",
"Select PHP Interpreter": "Wybierz interpretator PHP",
"phpstan.neon, phpstan.neon.dist or phpstan.dist.neon": "phpstan.neon, phpstan.neon.dist lub phpstan.dist.neon",
"The configuration vendor/bin/phpstan checks saved files with. Empty uses phpstan.neon, phpstan.neon.dist or phpstan.dist.neon in the project root. Absolute, or relative to the project.": "Konfiguracja, której vendor/bin/phpstan używa do sprawdzania zapisanych plików. Puste pole spowoduje użycie phpstan.neon, phpstan.neon.dist lub phpstan.dist.neon z katalogu głównego projektu. Ścieżka bezwzględna lub względna wobec projektu.",
"Select PHPStan Configuration File": "Wybierz plik konfiguracyjny PHPStan",
"select files in a git repository to shelve": "wybierz pliki w repozytorium Git do odłożenia na półkę (shelve)",
"select files from a single git repository to shelve": "wybierz pliki z pojedynczego repozytorium Git do odłożenia na półkę (shelve)",
"External file changes sync may be slow": "Synchronizacja zewnętrznych zmian w plikach może działać wolno",
+7
Переглянути файл
@@ -50,6 +50,9 @@
"Kotlin bridge bundle is unavailable": "O pacote da ponte do Kotlin está indisponível",
"Kotlin bridge command did not acknowledge its library snapshot": "O comando da ponte do Kotlin não confirmou o instantâneo da sua biblioteca",
"Kotlin editor compilation failed": "Falha na compilação do editor Kotlin",
"PHPStan check failed": "Falha na verificação do PHPStan",
"PHPStan ended with {status} and no report": "O PHPStan terminou ({status}) sem gerar um relatório",
"Cannot run {program}: {error}": "Não é possível executar {program}: {error}",
"Updating results…": "Atualizando resultados…",
"Uploading files": "Enviando arquivos",
"No files on the clipboard": "Nenhum arquivo na área de transferência",
@@ -3870,6 +3873,7 @@
"Change Severity": "Alterar gravidade",
"Edit Inspection Profile Setting…": "Editar configuração do perfil de inspeção…",
"Compiler errors and warnings of the last Build Project, shown at their source positions.": "Erros e avisos do compilador do último build do projeto, exibidos em suas posições no código-fonte.",
"Errors the project's vendor/bin/phpstan reports in a PHP file when it is saved, shown at their lines. PHPStan reads phpstan.neon, phpstan.neon.dist or phpstan.dist.neon from the project root, or the configuration file chosen in Settings › Languages & Frameworks › PHP. Each rule PHPStan has reported is listed below by its identifier and can be turned off or re-graded on its own.": "Erros que o vendor/bin/phpstan do projeto relata em um arquivo PHP quando ele é salvo, exibidos em suas linhas. O PHPStan lê phpstan.neon, phpstan.neon.dist ou phpstan.dist.neon da raiz do projeto, ou o arquivo de configuração escolhido em Configurações › Linguagens e frameworks › PHP. Cada regra que o PHPStan relatou é listada abaixo pelo seu identificador e pode ser desativada ou ter sua gravidade alterada individualmente.",
"Process code": "Processar código",
"Process literals": "Processar literais",
"Process comments": "Processar comentários",
@@ -5621,6 +5625,9 @@
"PHP interpreter": "Interpretador PHP",
"Runs PHP scripts, PHPUnit, Composer and artisan, and the PHP-based language servers (phpactor). Its folder is put first on PATH, so vendor/bin/phpunit and other #!/usr/bin/env php scripts use it too.": "Executa scripts PHP, PHPUnit, Composer e artisan, e os servidores de linguagem baseados em PHP (phpactor). Sua pasta é colocada primeiro no PATH, de modo que vendor/bin/phpunit e outros scripts #!/usr/bin/env php também a utilizem.",
"Select PHP Interpreter": "Selecionar interpretador PHP",
"phpstan.neon, phpstan.neon.dist or phpstan.dist.neon": "phpstan.neon, phpstan.neon.dist ou phpstan.dist.neon",
"The configuration vendor/bin/phpstan checks saved files with. Empty uses phpstan.neon, phpstan.neon.dist or phpstan.dist.neon in the project root. Absolute, or relative to the project.": "A configuração que o vendor/bin/phpstan usa para verificar os arquivos salvos. Vazio usa phpstan.neon, phpstan.neon.dist ou phpstan.dist.neon na raiz do projeto. Caminho absoluto ou relativo ao projeto.",
"Select PHPStan Configuration File": "Selecionar arquivo de configuração do PHPStan",
"select files in a git repository to shelve": "selecione arquivos em um repositório git para guardar no Shelf",
"select files from a single git repository to shelve": "selecione arquivos de um único repositório git para guardar no Shelf",
"External file changes sync may be slow": "A sincronização de alterações externas de arquivos pode ser lenta",
+7
Переглянути файл
@@ -79,6 +79,9 @@
"Kotlin bridge bundle is unavailable": "Kotlin 桥接扩展不可用",
"Kotlin bridge command did not acknowledge its library snapshot": "Kotlin 桥接命令未确认类库更新",
"Kotlin editor compilation failed": "Kotlin 编辑器编译失败",
"PHPStan check failed": "PHPStan 检查失败",
"PHPStan ended with {status} and no report": "PHPStan 已结束({status}),但没有生成报告",
"Cannot run {program}: {error}": "无法运行 {program}:{error}",
"Updating results…": "正在更新结果…",
"Uploading files": "正在上传文件",
"No files on the clipboard": "剪贴板中没有文件",
@@ -3926,6 +3929,7 @@
"Change Severity": "更改严重性",
"Edit Inspection Profile Setting…": "编辑检查配置文件设置…",
"Compiler errors and warnings of the last Build Project, shown at their source positions.": "上次“构建项目”产生的编译器错误和警告,显示在对应的源代码位置。",
"Errors the project's vendor/bin/phpstan reports in a PHP file when it is saved, shown at their lines. PHPStan reads phpstan.neon, phpstan.neon.dist or phpstan.dist.neon from the project root, or the configuration file chosen in Settings › Languages & Frameworks › PHP. Each rule PHPStan has reported is listed below by its identifier and can be turned off or re-graded on its own.": "保存 PHP 文件时,项目的 vendor/bin/phpstan 在其中报告的错误,显示在对应的行。PHPStan 从项目根目录读取 phpstan.neon、phpstan.neon.dist 或 phpstan.dist.neon,或者读取在“设置 › 语言和框架 › PHP”中选择的配置文件。PHPStan 报告过的每条规则都按标识符列在下方,可以单独关闭或调整级别。",
"Process code": "处理代码",
"Process literals": "处理字面量",
"Process comments": "处理注释",
@@ -5714,6 +5718,9 @@
"No additional stubs": "没有附加存根",
"Stub": "存根",
"Stub name, e.g. wordpress": "存根名称,例如 wordpress",
"phpstan.neon, phpstan.neon.dist or phpstan.dist.neon": "phpstan.neon、phpstan.neon.dist 或 phpstan.dist.neon",
"The configuration vendor/bin/phpstan checks saved files with. Empty uses phpstan.neon, phpstan.neon.dist or phpstan.dist.neon in the project root. Absolute, or relative to the project.": "vendor/bin/phpstan 检查已保存文件时使用的配置。留空则使用项目根目录中的 phpstan.neon、phpstan.neon.dist 或 phpstan.dist.neon。可以是绝对路径,或相对于项目的路径。",
"Select PHPStan Configuration File": "选择 PHPStan 配置文件",
"select files in a git repository to shelve": "请选择 Git 仓库中的文件以搁置更改",
"select files from a single git repository to shelve": "请一次只选择同一个 Git 仓库中的文件以搁置更改",
"External file changes sync may be slow": "外部文件更改同步可能较慢",
+1
Переглянути файл
@@ -92,6 +92,7 @@ const UNTRANSLATED = new Set<string>([
"Prettier",
"oxfmt",
"IntelliJ IDEA",
"PHPStan",
// Go environment variables and placeholder values
"CGO",
"GOPROXY",