Skip to content

Instantly share code, notes, and snippets.

@anilcancakir
Last active March 26, 2026 16:09
Show Gist options
  • Select an option

  • Save anilcancakir/611120235917fa992606791765d7ae18 to your computer and use it in GitHub Desktop.

Select an option

Save anilcancakir/611120235917fa992606791765d7ae18 to your computer and use it in GitHub Desktop.
Intelephense + Laravel Setup for Claude Code

Intelephense + Laravel Setup for Claude Code

Claude Code'un php-lsp plugin'i .lsp.json olmadan gelir. Bu guide, Intelephense'i Laravel icin optimal sekilde yapilandirir. Sonuc: gercek hatalar yakalanir, false positive olmaz.

Root Cause

Claude Code, LSP'ye rootUri olarak primary working directory'yi gonderir. Eger bu bir Flutter/Node/Go projesi ise, Intelephense PHP dosyalarini bulamaz ve her yerde P1009 "Undefined type" uretir. Cozum: workspaceFolder field'i ile dogru root'u set et.

Prerequisites

npm install -g intelephense
# Laravel projesinde:
composer require --dev barryvdh/laravel-ide-helper

1. Generate IDE Helper Files

cd /path/to/laravel-project
php artisan ide-helper:generate       # _ide_helper.php — facade class stubs (33K+ satir)
php artisan ide-helper:models -N      # _ide_helper_models.php — model magic props
php artisan ide-helper:meta           # .phpstorm.meta.php — container resolution

Bu 3 dosya Intelephense'in facade, model ve container type'larini cozmesini saglar. Repo'ya commit et — CI ve diger devler de faydalansin.

2. Install Claude Code Plugin

# Claude Code icinde:
/plugin install php-lsp@claude-plugins-official
/reload-plugins

3. Create .lsp.json in Plugin Cache

Plugin .lsp.json olmadan gelir — Intelephense'e hicbir config gonderilmez. Manuel eklenmeli.

Dosya: ~/.claude/plugins/cache/claude-plugins-official/php-lsp/1.0.0/.lsp.json

KRITIK: workspaceFolder'i Laravel projenin absolute root path'ine set et.

{
    "php": {
        "command": "intelephense",
        "args": ["--stdio"],
        "extensionToLanguage": {
            ".php": "php"
        },
        "transport": "stdio",
        "workspaceFolder": "/ABSOLUTE/PATH/TO/LARAVEL/PROJECT",
        "initializationOptions": {
            "storagePath": "/tmp/intelephense",
            "clearCache": true
        },
        "settings": {
            "intelephense": {
                "environment": {
                    "phpVersion": "8.4.0",
                    "includePaths": []
                },
                "files": {
                    "maxSize": 5000000,
                    "exclude": [
                        "**/.git/**",
                        "**/.svn/**",
                        "**/node_modules/**",
                        "**/vendor/**/{Tests,tests}/**",
                        "**/.history/**"
                    ]
                },
                "diagnostics": {
                    "enable": true,
                    "undefinedTypes": true,
                    "undefinedFunctions": true,
                    "undefinedConstants": true,
                    "undefinedClassConstants": true,
                    "undefinedMethods": true,
                    "undefinedProperties": false,
                    "undefinedVariables": true
                },
                "stubs": [
                    "apache", "bcmath", "bz2", "calendar",
                    "Core", "ctype", "curl", "date", "dba", "dom",
                    "exif", "fileinfo", "filter", "ftp", "gd", "hash",
                    "iconv", "imap", "intl", "json", "ldap",
                    "libxml", "mbstring", "meta", "mysqli",
                    "mysqlnd", "openssl", "pcntl", "pcre",
                    "PDO", "pdo_mysql", "pdo_pgsql", "pdo_sqlite",
                    "pgsql", "Phar", "posix", "readline",
                    "redis", "Reflection", "regex", "session", "shmop",
                    "SimpleXML", "soap", "sockets", "sodium", "SPL",
                    "sqlite3", "standard", "superglobals",
                    "tidy", "tokenizer", "xml",
                    "xmlreader", "xmlwriter", "xsl", "Zend OPcache",
                    "zip", "zlib"
                ]
            }
        },
        "startupTimeout": 60000,
        "maxRestarts": 3
    }
}

4. Clear Cache & Reload

# Eski index'i temizle — bu olmadan eski bozuk index kalir
rm -rf /tmp/intelephense

# Claude Code icinde:
/reload-plugins

Ilk reload'da Intelephense 30-60sn indexleme yapar (vendor/ + app/ + _ide_helper.php). Indexleme tamamlandiktan sonra .lsp.json'daki clearCache'i false yap — her restart'ta tekrar indexlememesi icin.

Settings Reference

Setting Value Why
workspaceFolder Laravel root path EN KRITIK — olmadan CWD kullanilir, yanlis dizin indexlenir
phpVersion "8.4.0" composer.json'daki PHP version ile esle
files.maxSize 5000000 (5MB) _ide_helper.php 33K+ satir, default 1MB yetmez
undefinedProperties false Eloquent magic __get/__set false positive uretir
undefinedTypes true Gercek hatalari yakala — _ide_helper.php facade'lari cozer
includePaths [] vendor/ zaten workspace icinde, cift indexleme onlenir
stubs redis dahil Laravel Cache/Queue Redis driver icin gerekli
clearCache true ilk seferde Eski yanlis index'i temizler, sonra false yap

Multi-Project Limitation

workspaceFolder tek bir absolute path alir ve plugin cache user-global. Farkli Laravel projeleri icin: .lsp.json'daki workspaceFolder'i degistirip /reload-plugins yap. Veya Claude Code'u dogrudan Laravel dizininden baslat — bu durumda workspaceFolder field'ina gerek kalmaz.

Troubleshooting

Sorun Cozum
P1009 tum class'larda workspaceFolder yanlis veya set edilmemis
P1009 sadece facade'larda _ide_helper.php uretilmemis veya maxSize < 5MB
Plugin update sonrasi bozulma .lsp.json silinir — tekrar Step 3
config/ dosyalarinda env() P1010 Normal — config dosyalari namespace disinda
Ilk acilista yavas Indexleme suruyor, 30-60sn bekle
Iki PHP LSP cakismasi phpactor varsa kaldir: /plugin uninstall phpactor
Hicbir diagnostic gelmiyor intelephense binary yok: npm install -g intelephense
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment