Si vous utilisez cet (), alors vous trouverez ici quelques astuces pour en tirer le meilleur parti. N’hésitez pas à rajouter les vôtres en commentaire.

Auto-complétion Netbeans, PROCEDURE et DELIMITER

J’utilise beaucoup les PROCEDURE stockées de MySQL, puisque ce SGBD me sert un peu de serveur-API. Du coup, j’ai de nombreux fichiers .sql définissant chacune une procédure. Mais un bogue NetBeans bloque l’auto-complétion après les IF|WHILE|... dans cette PROCEDURE si un DELIMITER est présent.

DROP PROCEDURE IF EXISTS `assert`;
DELIMITER $$

CREATE PROCEDURE `assert`(IN `asserting` TINYINT(1) UNSIGNED, IN `code` INT UNSIGNED)
    LANGUAGE SQL
    DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY INVOKER
BEGIN

    IF NOT(`asserting`) THEN
        CALL throw('UserException', `code`, '{}');
    END IF;
   
END$$
DELIMITER ;

Dans cet exemple, NetBeans est perdu: l’auto-complétion après le IF est tout simplement inopérante. Du coup, cela devient vite bloquant car créer une procédure sans auto-complétion, c’est coder sur le bloc-note.

La solution (outre forker Netbeans et corriger le bug) consiste à supprimer le DELIMITER. Netbeans n’est alors plus perdu. Il n’est alors plus possible d’exécuter directement le fichier SQL sur la BDD (sauf éventuellement en modifiant le DELIMITER par défaut, mais je n’ai pas trouvé comment le faire dans Netbeans: ConnSettings n’a pas fonctionné, et modifier la configuration de MySQL impacterait aussi le site/jeu web lui-même). L’alternative est alors d’utiliser le plugin Run my Script. Ce plugin permet de définir un fichier à lancer et de lui passer en paramètre le chemin du .sql actuellement ouvert. Vous pouvez donc créer un script php qui sera exécuté à la place du fichier .sql, et ce script se connectera à la BDD, mettra le bon DELIMITER puis lancera le fichier SQL.

$file = $argv[1];
$mysql = "L:\\InstalledOn7\\wamp64\\bin\\mysql\\mysql5.7.14\\bin\\mysql.exe";

$command = "$mysql --port=3306 --user="..." --password="..." --database=isometry --delimiter=$$ < "$file"";
Platform::exec($command);

exit(0);
php -f "E:\Projets\Web\misc\common\sources\shell\run-sql-file.php" "$CURRENT_FILE$"
Le PHP exécuté, et sa ligne de commande pour Run my script

Lier XDebug à NetBeans

Si vous utilisez WAMP, XDebug est déjà fournit (sinon, vous devrez le télécharger et enregistrer sa DLL dans le répertoire des extensions PHP). Vous n’avez alors plus qu’à configurer le plugin PHP via le fichier php.ini, directement accessible depuis l’icône de WAMP.

[xdebug]
zend_extension_ts="C:/xamp/plugins/php_xdebug.dll"

xdebug.remote_enable=1
xdebug.auto_start=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.idekey=netbeans-xdebug

xdebug.auto_trace=0
xdebug.trace_format=0
xdebug.show_mem_delta=1
xdebug.trace_output_dir="C:/xamp/log/xdebug"
xdebug.trace_output_name=%p.%t.trace
xdebug.profiler_output_dir="C:/wamp/log/xdebug"
xdebug.profiler_output_name=%p.%t.cachegrind
xdebug.coverage_enable=1

xdebug.collect_vars=1
xdebug.collect_params=4
xdebug.collect_return=1
xdebug.show_local_vars=1

Je vous invite également à lire ce tutoriel si vous coincez sur une étape.

Maintenant, quand vous cliquerez sur “Debug”, NetBeans lancera un navigateur interne utilisant XDebug, et vous pourrez naviguer dans votre jeu normalement. Lorsque PHP tombera sur un point d’arrêt, XDebug le signalera à NetBeans (qui écoute), et l’IDE stoppera l’exécution du code: vous pourrez “ausculter” votre code, connaitre la valeur des variables, avoir accès à la stack trace de la ligne, etc.

Ouvrir la stack trace de XDebug avec NetBeans

Lors d’une erreur, XDebug vous fournit un rapport détaillé donnant la pile d’exécution complète ayant amené à l’erreur. Mais il est fastidieux de devoir ouvrir chaque des fichiers de cette pile un à un, pour aller sur la ligne indiqué par Xdebug. POur éviter cela, ajoutez le paramètre xdebug.file_link_format="netbeans://%f:%l" dans votre php.ini, puis ajoutez le protocole netbeans:// à Windows et faites-le pointer sur un .bat qui ouvrira le fichier PHP dans NetBeans.

Le même principe peut être appliqué à IntelliJ ou à Eclipse, voire même à Notepad++.

xdebug.file_link_format="netbeans://%f:%l"
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\netbeans]
@="URL:Netbeans Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\netbeans\shell]
@="open"

[HKEY_CLASSES_ROOT\netbeans\shell\open]
@="Netbeans IDE"

[HKEY_CLASSES_ROOT\netbeans\shell\open\command]
@="E:\\Projets\\Web\\misc\\common\\sources\\netbeans\\protocol\\netbeans-protocol.bat "%1""
@echo off

Setlocal EnableDelayedExpansion
SET ARG=%1

REM Remove the quotes

SET UNQUOTED=!ARG:"=!

REM Remove the protocol
SET URI=%UNQUOTED:~11%

REM remove trailing slash at end
if "
%URI:~-1%" == "/" SET URI=%URI:~,-1%

REM remove protocol "netbeans://"

REM SET PROTOCOL_LESS=%uri:~11%
SET FORWARD_SLASHED=!URI:%%5C=/!

"C:/Program Files/NetBeans 8.1/bin/netbeans64.exe" --nosplash --console suppress --open "%FORWARD_SLASHED%"
Rajouter la 1ere ligne à votre PHP.ini, rajouter les entrées registre du 2nd code à windows, et sauvez le 3e code dans un fichier .bat correspondant
Rapport d'erreur avec des liens Le fichier PHP dans NetBeans
Maintenant, en cliquant sur un lien du rapport XDebug, le fichier PHP sera ouvert dans NetBeans, à la ligne indiquée par XDebug.

Autocompletion XSL, SVG, HTML (etc) dans NetBeans

Pour obtenir l’autocomplétion dans n’importe quel langage XML (SVG, HTML, XSL, MathML, …), il vous suffit de rajouter la DTD ou la XSD du langage à la liste des définitions XML de Netbeans, en associant le namespace XML au fichier XSD/DTD (local ou distant). L’auto-complétion XML correspondante sera alors présente dans NetBeans, si vous déclarez ce namespace dans votre document XML.

Il vous faut donc d’abord une XSD, que vous aurez vous-même rédigée ou que vous aurez récupéré du W3C ou d’internet en général (comme une XSD non-officielle pour le langage HTML, une potentiellement obsolète pour SVG et une pour XSL).

Ensuite, vous devez trouver l’espace de nom de cette XSD (si elle vient d’internet, par exemple de la liste des espaces de noms du W3C) ou en définir un s’il s’agit d’une XSD perso (choisissez un espace de nom qui correspond à l’URL où se trouve la description de votre langage perso).

Maintenant, il suffit d’ajouter le namespace dans NetBeans en le liant à la XSD. Ainsi, quand on utilisera ce namespace (exemple: https://www.w3.org/1999/xhtml), Netbeans lira cette XSD pour connaitre les spécificités du langage XML contenu dans ce namespace, et proposer l’auto-complétion des éléments et des attributs.

Menu 'Tools', 'DTD and XML Schema' Sélectionner 'User Catalog' puis cliquer 'Add local DTD/Schema' Cocher 'System ID' et y entrer le namespace, puis sélectionner la XSD dans le champ 'File'
Ouvrez le menu des DTD/XSD, ajoutez la paire namespace/XSD dans le catalogue ‘Utilisateur’ (c’est à dire ‘Custom’), et indiquez le namespace (System ID) et sa XSD

Attention à bien vérifier que NetBeans n’est pas allé mettre en cache une autre XSD. Pour cela, vérifiez qu’il n’existe pas de fichier nbproject/private/retriever/catalog.xml ni nbproject/private/retriever/le.namespace/ajoute/index dans votre dossier de projet. S’ils existent, supprimez-les.

Supprimez les fichiers nbproject/private/retriever/catalog.xml et nbproject/private/retriever/le.namespace/ajoute/index s'ils existent dans votre dossier de projet
Ces deux fichiers sont à supprimer s’ils existent dans le dossier du projet

Terminé! L’auto-complétion du nouveau langage sera disponible dans tous les fichiers de type XML (vous pouvez ajouter d’autres extensions dans les options de NetBeans) dès l’instant où vous déclarez l’utilisation du namespace dans le fichier via la syntaxe xmlns="http://le.namespace/ajoute".

Ouvrir un fichier XML, puis ajouter 'xmlns:***="http://le.namespace/ajoute"
L’auto-complétion sera disponible en déclarant l’utilisation du namespace dans le fichier XML

Pour plus d’informations sur les espaces de noms en XML, consultez les explications de W3Schools.