Jak otworzyć plik w edytorze z Tracy? (integracja z IDE)

Gdy wyświetli się strona błędu, możesz kliknąć w nazwy plików, a otworzą się w Twoim edytorze z kursorem na odpowiedniej linii. Pliki można też tworzyć (akcja create file) albo naprawiać w nich błędy (akcja fix it). Żeby to działało, trzeba skonfigurować przeglądarkę i system.

Tracy otwiera pliki przez URL-e postaci editor://open/?file=%file&line=%line, czyli za pomocą protokołu editor://. Musimy zarejestrować dla tego protokołu własny handler. Handlerem tym może być dowolny plik wykonywalny, który przetworzy parametry i uruchomi Twój ulubiony edytor.

URL możesz zmienić w zmiennej Tracy\Debugger::$editor, a klikalność wyłączyć, ustawiając Tracy\Debugger::$editor = null.

Windows

  1. Pobierz na dysk odpowiednie pliki z repozytorium Tracy.
  2. Zmodyfikuj plik open-editor.js i w obiekcie settings odkomentuj, a w razie potrzeby zmodyfikuj ścieżkę do swojego edytora:
var settings = {

	// PhpStorm
	editor: '"C:\\Program Files\\JetBrains\\PhpStorm 2018.1.2\\bin\\phpstorm64.exe" --line %line% "%file%"',
	title: 'PhpStorm',

	// NetBeans
	// editor: '"C:\\Program Files\\NetBeans 8.1\\bin\\netbeans.exe" "%file%:%line%" --console suppress',

	// Sublime Text 2
	// editor: '"C:\\Program Files\\Sublime Text 2\\sublime_text.exe" "%file%:%line%"',

	...
}

...

Uważaj i zachowaj w ścieżkach podwójne odwrotne ukośniki.

3. Zarejestruj w systemie handler dla protokołu editor://.

Robi się to, uruchamiając install.cmd. Musisz uruchomić go jako Administrator. Skrypt open-editor.js będzie teraz obsługiwać protokół editor://.

Żeby otwierać odnośniki generowane na innych serwerach, na przykład na serwerze produkcyjnym albo w Dockerze, dodaj do open-editor.js mapowanie ścieżek zdalnych na lokalne:

	mappings: {
		// ścieżka zdalna: ścieżka lokalna
		'/var/www/nette.app': 'W:\\Nette.web\\_web',
		'/var/www/second.app': 'W:\\Second.web'
	}

W Windows open-editor.js działa pod Windows Script Host, którego silnik JScript rozumie tylko ECMA-262 3rd Edition (1999). Modyfikując skrypt, trzymaj się staroszkolnego JavaScriptu: używaj var zamiast let czy const, unikaj funkcji strzałkowych i nie zostawiaj przecinka za ostatnią pozycją obiektu. Nowoczesna składnia powoduje błąd skryptu, a protokół editor:// po cichu nie otworzy edytora.

Mapowanie ścieżek zdalnych na lokalne możesz zdefiniować także po stronie PHP przez Debugger::$editorMapping, co działa niezależnie od handlera edytora i platformy.

Linux

  1. Pobierz odpowiednie pliki z repozytorium Tracy do katalogu ~/bin.
  2. Zmodyfikuj plik open-editor.sh i odkomentuj, a w razie potrzeby zmodyfikuj ścieżkę do swojego edytora w zmiennej editor.
#!/bin/bash

# Emacs
#editor='emacs +$LINE "$FILE"'

# gVim
#editor='gvim +$LINE "$FILE"'

# gEdit
#editor='gedit +$LINE "$FILE"'

# Pluma
#editor='pluma +$LINE "$FILE"'

...

Nadaj mu prawo wykonywania:

chmod +x ~/bin/open-editor.sh

Jeśli edytor, którego używasz, nie jest zainstalowany z pakietu, jego binarka może nie być w systemowym $PATH. Da się to łatwo naprawić. W katalogu ~/bin utwórz dowiązanie symboliczne do binarki edytora.

3. Zarejestruj w systemie handler dla protokołu editor://.

Robi się to, uruchamiając plik install.sh. Skrypt open-editor.sh będzie teraz obsługiwać protokół editor://.

macOS

Edytory takie jak PhpStorm, TextMate itd. pozwalają otwierać pliki przez specjalny URL, który wystarczy ustawić:

// PhpStorm
Tracy\Debugger::$editor = 'phpstorm://open?file=%file&line=%line';
// TextMate
Tracy\Debugger::$editor = 'txmt://open/?url=file://%file&line=%line';
// MacVim
Tracy\Debugger::$editor = 'mvim://open?url=file:///%file&line=%line';
// Visual Studio Code
Tracy\Debugger::$editor = 'vscode://file/%file:%line';

Jeśli używasz samodzielnej Tracy, umieść tę linię przed Tracy\Debugger::enable(). Jeśli używasz Nette, umieść ją przed $configurator->enableTracy() w Bootstrap.php.

Niestety akcje create file i fix it w macOS nie działają.

Dema

Naprawa błędu:

Utworzenie nowego pliku:

Rozwiązywanie problemów

  • W Firefoksie możesz potrzebować zezwolić na uruchamianie własnych protokołów w about:config, ustawiając network.protocol-handler.expose.editor na false, a network.protocol-handler.expose-all na true. Domyślnie powinno to być jednak dozwolone.
  • Jeśli nie zadziała od razu, nie panikuj. Spróbuj kilka razy odświeżyć stronę przed kliknięciem w odnośnik albo zrestartuj przeglądarkę czy komputer. To powinno pomóc.
  • Tutaj jest odnośnik do naprawy ewentualnych błędów typu: Input Error: There is no script engine for file extension ".js" albo Maybe you associated ".js" file to another app, not JScript engine.

Od wersji Google Chrome 77 nie zobaczysz już przy uruchamianiu edytora odnośnikiem checkboxa “Zawsze otwieraj tego typu odnośniki w powiązanej aplikacji”. Obejście dla Windows: utwórz plik fix.reg:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome]
"AutoLaunchProtocolsFromOrigins"="[{\"allowed_origins\": [\"*\"],\"protocol\": \"editor\"}]"

Zaimportuj go podwójnym kliknięciem i zrestartuj Chrome. Polityka AutoLaunchProtocolsFromOrigins całkowicie wyłącza okno potwierdzenia przeglądarki. Skrypt install.cmd ustawia to automatycznie, wraz z zakomentowaną linią dla Vivaldi (ta sama polityka pod HKLM\SOFTWARE\Policies\Vivaldi).

Z dalszymi pytaniami albo sugestiami zajrzyj na forum.