Bonjour à tous,

Mon objectif est de créer un plugin CakePhp pour SublimeText2 qui gère l' autocompletion (je sais qu'il existe déjà un mais il ne fait pas l'affaire).
Je vais essayer d'expliquer :
Si je suis dans un controller et je veux ajouter une propriété dès que je tape $ il me fait sortir une liste de ' uses, helpers, components ...', dans une méthode lorsque j'écris $this-> une liste de ' set, render, redirect ...' apparaisse . Idem pour les models, components, helpers, utilities ...(Voir les figures au dessous pour mieux comprendre)

J'ai créé pour la même occasion un fichier CakePhp.sublime-completions qui contient toutes (je dis bien toutes) les méthodes du framework j'en ai aussi profiter pour les tester( je l'offre pour les gens intéressés et qui veulent collaborer avec moi pour créer ce plugin).

J'ai cherché sur internet et ce que j'ai compris qu'il faut créer un fichier de syntax spécifique(.tmLanguage) pour le model, controller et view , voici un lien de la doc, il faut installer le plugin AAAPackageDev avant, j'ai téléchargé le plugin officiel du cakephp pour sublime text2(il faut passer par le package control) qui contient un fichier de définition de syntax aussi j'ai trouvé un autre sur github crée par josegonzalez mais malheureusement je n'ai pas arrivé à grand chose.

;)

4 réponses


En soit le plugin de jose gonzales n'est pas un plugin d'auto complétion mais plutôt un ensemble de snippet ;). Pour ce qui est du plugin pour l'auto complétion de cakephp je suis pour :). Mais je ne pourrais pas t'aider je ne me suis jamais intéressé au dev de plugin ST2 :/. Mais pour répertorié toutes les méthodes de tout les objets le mieux ne serait pas de faire une sorte de génération d'une doc à l'aide des entête de méthode (comme les IDE procède) ?

Merci pour votre réponse,
Oui je sais que le plugin de jose gonzales est un ensemble snippet mais moi je parle du fichier de définition de syntax (.tmLanguage) que l'on trouve dans ce plugin . Je n'ai pas compris la deuxième partie de votre réponse.
N.B : Dans la librairie les entêtes de toutes les méthodes de cakephp sont commentés
Exemple la méthode delete du model (pathToCakePhp\lib\Cake\Model\Model.php) :

/**
 * Removes record for given ID. If no ID is given, the current ID is used. Returns true on success.
 *
 * @param integer|string $id ID of record to delete
 * @param boolean $cascade Set to true to delete records that depend on this record
 * @return boolean True on success
 * @link http://book.cakephp.org/2.0/en/models/deleting-data.html
 */
    public function delete($id = null, $cascade = true) {
        if (!empty($id)) {
            $this->id = $id;
        }
        $id = $this->id;
        $event = new CakeEvent('Model.beforeDelete', $this, array($cascade));
        list($event->break, $event->breakOn) = array(true, array(false, null));
        $this->getEventManager()->dispatch($event);
        if (!$event->isStopped()) {
            if (!$this->exists()) {
                return false;
            }
            $db = $this->getDataSource();
            $this->_deleteDependent($id, $cascade);
            $this->_deleteLinks($id);
            $this->id = $id;
            $updateCounterCache = false;
            if (!empty($this->belongsTo)) {
                foreach ($this->belongsTo as $parent => $assoc) {
                    if (!empty($assoc'counterCache'])) {
                        $updateCounterCache = true;
                        break;
                    }
                }
                if ($updateCounterCache) {
                    $keys = $this->find('first', array(
                        'fields' => $this->_collectForeignKeys(),
                        'conditions' => array($this->alias . '.' . $this->primaryKey => $id),
                        'recursive' => -1,
                        'callbacks' => false
                    ));
                }
            }
            if ($db->delete($this, array($this->alias . '.' . $this->primaryKey => $id))) {
                if ($updateCounterCache) {
                    $this->updateCounterCache($keys$this->alias]);
                }
                $this->getEventManager()->dispatch(new CakeEvent('Model.afterDelete', $this));
                $this->_clearCache();
                $this->id = false;
                return true;
            }
        }
        return false;
    }

Comment ça peut m'aider ?

http://fr.wikipedia.org/wiki/PHPDoc

Le mieux c'est de regarder comment fonctionne un plugin d'auto complétion dans ST2 et de partir sur la même base, je ne sais pas si ça utilise vraiment un générateur de documentation mais si c'est pas le cas ça veut dire qu'il faut tout se taper à la main ? (je ne pense pas que les mec aime perdre du temps donc je vois que ça de mon point de vue)

Est ce que vous connaissez déjà un plugin d'autocompletion (n'importe quel langage) dont je peux s'inspirer ?
A noter que Sublime text 2 gère l'autocompletion à l'aide des snippets et non pas un plugin !!
Je vous s'assure qu'avec un tel plugin on vas avoir un gain de temps énorme et surtout pour les débutants !!
Merci comme même et si vous voulez avoir le fichier CakePhp.sublime-completion envoie moi un email sur flashios09@gmail.com
En tous cas si je trouve pas de solution je vais le déposer sur github ;)