Brunni (./1679) :Tu es sûr ?
(genre on ne peut pas ajouter un dossier qui n'est pas sous le répertoire de base du projet)
Nil (./1682) :Merci, exactement comme pycharm, donc.
(Settings > Directories > [For current project] > + Add Content Root)
Brunni (./1672) :Et tu te demandes encore si le problème est de ton côté ?
Je suis toujours sur la même tâche de trouver comment on affiche un context menu. Apparemment j'ai besoin d'un PrivateContextMenuProxy (160 lignes auxquelles je ne comprends rien du tout), d'un AbstractStaticContextMenuHandler (qui construit les options, mais je ne sais pas comment en mettre plusieurs), d'une classe AbstractContextMenuEntry PAR élément que je veux afficher (102 lignes, par entrée, franchement pas grand chose d'intéressant et d'autres trucs que je ne comprends pas), des entrées dans le manifeste, et euh je ne sais pas trop.
Brunni (./1672) :Dommage. Ça aurait pu être sympa, avec Nhut qui fait les dessins, et toi qui imites le bruit du phacochère dans le tuyau d'aspirateur pour amuser les enfants
Et euh j'aimerais bien rigoler, mais. Non pas de goûters d'anniversaire.
FiE RDアルティメットスキル紹介#2 ボクの本気を見せてやる
— Helements (@HeLEMeNts) February 7, 2017
Awesomeを全て消費して繰り出す乱舞技、「オムニスマッシュ」のリミッターを解放し、攻撃回数とダメージを2倍に高める。発動後はHPが1になり、全アビリティが一定時間使用不能になる。 pic.twitter.com/UlhT8VRO7h
Pen^2 (./1675) :Pourquoi ? Si tu connais les bonnes extensions et les raccourcis, c'est rtès rapide. J'ai un pote qui fait du python sous vim, il n'envisage pas de changer.
Mmmm, il me semble que ça reste plus un éditeur de texte qu'un ide, non ? Perso je n'imagine pas coder avec un éditeur de texte même avancé, ce serait catastrophiquement pénible. Peut-être qu'un bon ide spécialisé te permettrait de t'y retrouver beaucoup plus facilement ? Personne n'a une suggestion ? Perso je n'y connais rien en js.
Pen^2 (./1689) :
Ça dépend peut-être des langages, mais, par exemple l'import/include ajouté automatiquement sans se soucier de savoir son nom par exemple ? Ou le refactoring avancé ? (avec un respect de la portée de variable, un i d'une boucle for n'étant pas le même qu'un i d'une autre boucle for ?). Le goto déclaration/définition qui fonctionne ? La recherche des déclarations, des implémentations, des références à quelque chose (pas juste du texte qui ressemble), l'ajout automatique des annotations qui vont bien (override, etc) ?). La création de variable automatique (avec le bon type) à partir d'une fonction qui renvoie quelque chose ?) Le débugueur intégré ? Les warnings du respect du style, de bonnes pratiques, la génération d'accesseurs/délégués/etc automatique, la proposition de surcharge de méthode sans devoir se rappeler exactement de son nom, la mise en évidence des warnings/erreurs au fur et à mesure de la frappe, le designer de fenêtres, l'assistant de génération de scripts de builds, le gestionnaire de paquets de libs, etc. J'oublie sans doute plein de trucs, c'est juste des idées qui me viennent en vrac ^^)
Évidemment, si des plugins font tout ça, ça me va très bien aussi.
Mais je serais bien malheureux avec un éditeur avancé qui trouve que c'est innovant de faire du mode colonnes ou des expressions rationnelles pour remplacer des trucs. Même si ce genre d'éditeur est effectivement utile par ailleurs.
flanker (./1692) :J'avais dit etc
Mais tu as oublié l'inférence de type
flanker (./1692) :Tiens, ça me fait penser que j'oubliais aussi le remplissage automatique intelligent des arguments (c'est une option dans Eclipse JDT) lors d'une auto complétion d'appel de méthode. Évidemment, c'est potentiellement un peu dangereux mais si on n'utilise pas plus de 9000 variables dans une seule portée, ça trouve les bons arguments dans 99% des cas.
les arguments manquants ou en trop
flanker (./1692) :
J'utilise beaucoup le typage pour ne pas avoir de bug, comme dans les langages fortement typés.
flanker (./1692) :Et encore, de mémoire on peut se passer de _, c'est moins pénible à taper. Et on peut même taper juste la partie la plus ciblée du nom de la fonction pour tenter un nombre de caractères encore plus réduit tout en restant discriminant ^^
ma_su<ctrl-espace>
(Et d'ailleurs, pourquoi on taperait trois fois plus vite les caractères avec vim ?)Parce qu'on en tape plus, et de la même catégorie (je trouve plus lent de passer d'une lettre à une combinaison ou à une touche de fonction que d'une lettre à l'autre, par exemple).
flanker (./1694) :Effectivement, ça fait de l'entraînement
Parce qu'on en tape plus
flanker (./1694) :Mmmm, <esc>: c'est pas super pratique, c'est peut-être un manque d'habitude mais je trouve le ctrl+space plus accessible (bord de paume sur le ctrl et space avec le pouce)
et de la même catégorie
flanker (./1694) :Je suis déçu, je pensais que tu avais des stats
Mais bon, bien sûr, tous les chiffres ne sont que des exemples, pas des vérités absolues
flanker (./1692) :Je pense que tu devrais demander une licence gratuite de PyCharm en échange de cette phrase. Parce que venant de toi, c'est une publicité en or
Mon code s'est automagiquement très fortement amélioré avec le simple passage à PyCharm.
Folco (./1697) :Oui, mais vim n'est pas un IDE, malgré tous les plugins qu'on peut lui ajouter ^^
Les bons IDE savent faire popper MaSuperClasse quand on tape "msc".
var SimilarWebPageEntry = function(handler, modelData) { AbstractContextMenuEntry.call(this, handler); this.modelData = modelData; }; SimilarWebPageEntry.prototype = Object.create(AbstractContextMenuEntry.prototype, { constructor: { value: SimilarWebPageEntry, }, _escapeHTMLString: { value: function(text) { return text .replace(/&/g, '&') .replace(/</g, '<') .replace(/>/g, '>') .replace(/"/g, '"') .replace(/'/g, '''); }, }, cancelAction: { value: function() { return false; }, }, });Il faudrait un IDE vraiment avancé pour te lister les types et les méthodes, parce qu'il doit vraiment exécuter le truc pour avoir une idée (ternjs serait supposé faire ça, pas sûrr qu'il s'en sorte dans ce cas mais ©a a le plus de chances de.
close: { value: function(typeToClose) { if (typeToClose === undefined || typeToClose === this.showingType) { this._setModel(null); this._menuAge++; if (this.isMenuShowing() && !this._closing) { this._close(); return true; } } return false; }, }, _close: { value: function() { this._closing = this.closeMenu() .then(function() { this._closing = false; }.bind(this)); return this._closing; }, },Pour appeler un this.closeMenu (qui fait partie d'une sous classe donc, mais celle-ci est documentée). Moi qui pensais naïvement l'appeler, on dirait que je dois faire gaffe à *quelques* petits trucs là. Notez la jolie utilisation de this._closing un moment comme une promise, un moment comme un booléen. Autant j'aime bien le fait de tester avec if (object) plutôt que if (object != nil) car c'est concis et souvent on donne un nom qui rend la lecture agréable -- par exemple aujourd'hui dans Highway Runners j'ai écrit if (System::remoteSettings), pour tester l'existence de settings remote, l'objet étant nul lorsqu'ils ne sont pas disponibles -- autant le coup de la promise booléenne c'est quand même un peu too much.
struct A { int argument; A(int arg) : argument(arg) { printf("A:ctor(%d)", arg); } virtual void print(char c) { printf("A:print(%d, %c)", argument, c); }; struct B: A { int otherArg; B(int arg) : A(11), otherArg(arg) {} void print(char c) { printf("B:print(%d, %c)", otherArg, c); A::print(c); } };
/* * Simplified view of showing a menu. * -> ContextMenuProxy.showMenu(menuArguments) * -> PenMenuHandler.constructor(..., menuArguments, ...) * -> PenMenuHandlerBase.createMenu() * Note: use previously stored menuArguments to select what to display) * Create SimpleButtonEntry'es * -> [click on menu item] * -> SimpleButtonEntry.finalizeActionExecution * -> PenMenuHandler.postMessage * -> [intermodule message passing] * -> ContextMenuProxy.messageReceived * -> ContextMenuProxy.messageReceived: eventListener.emit(action) * -> PenLibraryWidget.eventListener.on(action) */Peut être qu'on aperçoit en filigrane que j'y ai passé un petit moment