Javascript IDE - automatikus kód kiegészítés örökléssel is
Üdv.
Szeretnék egy olyan js IDE-t használni fejlesztéshez, ami egyrészt támogatja a nodejs-t libeket is, másrészt meg lehet használni benne valami hasonló kódot, mint ez:Na most ez a tű a szénakazalban típusú probléma... A legjobb az lenne, ha valami létező keretrendszert támogatna, amiben megvan ez a fajta öröklődés, és nem kéne semmit csinálnom, minden flottul menne magától... Ha esetleg tudtok ilyet, akkor küldöm is a láda sört... :D
Ami még tetszene, ha viszonylag könnyen lehetne olyan plugin-t írni, ami a fenti kódot értelmezi, és az alapján felindexeli a kód kiegészítőt, hogy tudjon róla melyik prototípus milyen metódusokat tartalmaz, stb... Na ez az, amihez nem tudom, hogy melyik lenne a megfelelő eszköz. Odáig már eljutottam, hogy pl feltettem spket-et vagy aptanát eclipse-hez, de hogy hogyan álljak neki az ilyen pluginek írásának, vagy hogy ezek támogatják e egyáltalán a nodejs-t, az számomra elég homályban van. Ha van köztetek olyan, aki szintén hasonló problémával küzd, és van egyéb hasznosítható ötlete a témában, akkor csapatban is szívesen csinálnám. Az van, hogy ez nekem elég sürgős lenne, és ha rövid időn belül nem találok egy ilyen megoldást sem, akkor inkább nekiállok java-ban fejleszteni.
Ami még szintén beleférne, ha egyesével írnám a prototype-ba a metódusokat, csak azzal meg az a bajom, hogy az öröklésnél ott is probléma lesz a kód kiegészítéssel...
■ Szeretnék egy olyan js IDE-t használni fejlesztéshez, ami egyrészt támogatja a nodejs-t libeket is, másrészt meg lehet használni benne valami hasonló kódot, mint ez:
(function() {
var core = {
bind : function(method, scope) {
if (!( method instanceof Function))
throw new TypeError("Function needed as method.");
if ( typeof (scope) != "object")
throw new TypeError("Object needed as scope.");
return function() {
return method.apply(scope, arguments);
};
},
require : function(source) {
if ( typeof (source) != "object" || !source)
throw new TypeError("Object needed as source.");
for (var property in source)
if (source.hasOwnProperty(property) && !this.prototype.hasOwnProperty(property))
this.prototype[property] = source[property];
},
override : function(source) {
if ( typeof (source) != "object" || !source)
throw new TypeError("Object needed as source.");
for (var property in source)
if (source.hasOwnProperty(property))
this.prototype[property] = source[property];
},
extend : function(source) {
var superClass = this;
var newClass = source.hasOwnProperty("constructor") ? source.constructor : function() {
superClass.apply(this, arguments);
};
newClass.superClass = superClass;
var superClone = function() {
};
superClone.prototype = superClass.prototype;
newClass.prototype = new superClone();
newClass.prototype.constructor = newClass;
if (source)
newClass.override(source);
return newClass;
}
};
core.require.call(Function, core);
Function.create = function (source){
var newClass = source.hasOwnProperty("constructor") ? source.constructor : function() {};
newClass.override(source);
return newClass;
};
})();
var Vehicle = Function.create({
constructor : function(wheels) {
this.wheels = wheels;
}
});
var Truck = Vehicle.extend({
constructor : function(hp, wheels) {
this.horsepower = hp;
Vehicle.call(this, wheels);
},
printInfo : function() {
console.log('I am a truck and I have ' + this.horsepower + ' hp.');
}
});
var t = new Truck(4, 350);
t.printInfo();
Ami még tetszene, ha viszonylag könnyen lehetne olyan plugin-t írni, ami a fenti kódot értelmezi, és az alapján felindexeli a kód kiegészítőt, hogy tudjon róla melyik prototípus milyen metódusokat tartalmaz, stb... Na ez az, amihez nem tudom, hogy melyik lenne a megfelelő eszköz. Odáig már eljutottam, hogy pl feltettem spket-et vagy aptanát eclipse-hez, de hogy hogyan álljak neki az ilyen pluginek írásának, vagy hogy ezek támogatják e egyáltalán a nodejs-t, az számomra elég homályban van. Ha van köztetek olyan, aki szintén hasonló problémával küzd, és van egyéb hasznosítható ötlete a témában, akkor csapatban is szívesen csinálnám. Az van, hogy ez nekem elég sürgős lenne, és ha rövid időn belül nem találok egy ilyen megoldást sem, akkor inkább nekiállok java-ban fejleszteni.
Ami még szintén beleférne, ha egyesével írnám a prototype-ba a metódusokat, csak azzal meg az a bajom, hogy az öröklésnél ott is probléma lesz a kód kiegészítéssel...
Utánanézek, hogy nodejs-nél
Object.create
Kb ugyanazt csinálja a kód.
Eclipse-ben nem működik a
Pl az Eclipse-ben a beépített dokumentációk úgy vannak megoldva, hogy egy külön jsdoc fájlban le van vezetve az osztálynak a váza.
2 párhuzamos fájl
Én mondjuk elviselném, ha tudnék olyan plugint írni, ami a saját vagy egy már létező osztály készítő könyvtárra működik. Majd keresgélek, hogy hogyan álljak neki, de ez leginkább dokumentáció kérdése, és félek, hogy nem lesz semmi használható a témában :S
Azt nézem, hogy netbeans-hez
Ha esetleg sikerül majd
Én egyébként is használok
Hmm esetleg meg lehetne
Mi lenne, ha alapból prototype-al csinálnánk, és a new kulcsszót használnánk örököltetéshez. Talán van olyan IDE, ami képes ezt kezelni. Ezek után meg buildbe be lehet tenni egy olyat, ami ezt átalakítja egy Object.create-es megoldásra. Így az automatikus kiegészítés is menne, a kimeneti kód meg nem lenne 2x akkora a commentek meg az egyesével hozzáadott metódusok miatt. Az egyedüli gond, hogy minden new-ra meghívja a rendszer a konstruktort, de ha a tesztelés előtt mindig van deploy, és nem a begépelt kóddal tesztelsz, hanem a deploy utánival, akkor működhet. A prototype beírása nem okoz akkora gondot, ha van automatikus kiegészítés rá...
Kipróbálom, hogy ilyen megoldással működik e az automatikus kiegészítés öröklődésre, meg minden másra. Ha igen, akkor azt hiszem ez lesz, és nem szórakozok plugin írással.
Ez azért nem biztos, hogy jó,
Így működik:var A = function
Kipróbáltam, spket-ben van extjs meg mootools támogatás, de ott sem működnek az örökléssel kapcsolatos dolgok. Egyedül a fenti módszerrel lehet megoldani...
Ezzel egyáltalán nincsen gond, a fenti formában megírom a prototípusokat, aztán csinálok egy deploy-t, ami a new ParentClass() formát átalakítja Object.create(ParentClass.prototype)-ra, vagy amire nekem tetszik, és a deploy-ban elkészült osztályokat használom a tesztekben, nem azokat, amik a kódban vannak. Ami kicsit problémás lehet így, hogy nem fog stimmel debug-nál, hogy melyik sorban van a hiba, ha nagyon átírom az eredeti forrást. Szóval egyedül a new -> Object.create amit érdemes belevinni, mert az ugyanúgy egy sor...
Ez így tűrhető, de attól még örülnék, ha lenne nodejs support is a rendszerben, nem csak extjs, meg hasonlók... Egyelőre a fent leírtak szerint fogom használni a rendszert, aztán ha találok megoldást arra, hogy felvegyem az osztály készítő függvényeket is a rendszerbe, akkor majd megírom.
szerk:
Azt néztem, hogy a legalapabb javascript editor is működik ezzel a megoldással eclipse-ben, szóval ez valami beépített feature...
A 8. és 10. sorban az ott mi?
Az, hogy mit ajánl felkód
http://www.normalesup.org/~simonet/soft/ow/eclipse-closure-javascript.en.html
Ezt érdemes még megnézni, meg találtam egy pár tutorialt, hogy hogyan kell plugint csinálni eclipse-hez. Még keresgélek, hogy melyik a legjobb megoldás, de egyáltalán nem lehetetlen megcsinálni...
http://plugins.netbeans.org/plugin/39133/javascript-rhino-content-assist
Ez netbeans-hez van, és elvileg tud osztályokat, meg hasonlókat. Érdemes lenne megnézni. Egyelőre gyűjtögetek, aztán majd döntök, hogy melyiket használom, vagy írok e sajátot... Az eclipse így külsőre sokkal szimpatikusabb nekem, mint a netbeans..
nb code assist plugin fejlesztés
Most feltettem Aptanát, mint eclipse plugint, de egyáltalán nem világos, hogy mit csinál. Mármint nem látok olyat, hogy aptana text editor a js fájlok megnyitásánál a listában, pedig lennie kéne, nem? Amit írtak még róla, hogy szétcseszi az egész eclipse-t, mondjuk nekem ez most nem akkora gond, mert csak tesztelgetek, szóval meg tudom csinálni, hogy törlöm, és másolok egy új példányt a helyére.
Na megvan, hogy a "javascript source editor"-nak nevezett valami az övé. A gond vele, hogy pl a függvény paramétereket ki sem tölti, az osztályok meg ugyanúgy nem mennek vele. Szóval szerintem még rosszabb, mint a beépített megoldás.
http://www.viplugin.com/scripteclipse/
Ez se rossz, olyan, hogy javascriptben lehet írni eclipse plugin-t. Mondjuk annyira nem ódzkodom java-tól, de ha ebben is meg lehet oldani, akkor miért ne! Próbálom valahogy elérni a cucc szerzőjét, hátha meg tudja mondani, hogy lehetséges e ilyesmi. Elvileg a code completion gombnyomásra van bindelve, szóval bele lehet nyúlni az alap viselkedésére. Én úgy sejtem, hogy a doksikat felindexeli valami a code completion meg ettől kéri el a lehetőségeket, szóval az indexelőbe kéne inkább belenyúlni, de ha az nem megy, akkor a code completion-höz kell betenni egy decoratort, ami feldobja egy kicsit.
http://planetorion.org/news/2012/01/writing-a-content-assist-plugin-for-orion/
Van egy ilyen is, hogy eclipse orion, ebben példa is van code assistant írására, viszont nekem az feküdne jobban, ha megmaradna az eredeti, és csak néhány módosítást végeznék rajta. Kisebb munka...
http://www.vogella.com/articles/EclipsePlugIn/article.html
A ScriptEclipse-hez képest pár oldallal bonyolultabb java-ban megírni a plugint :D Mondjuk az eredmény biztos, hogy gyorsabb, mint egy scriptelt cucc... Megpróbálom elérni a ScriptEclipse szerzőjét, aztán megkérdezni, hogy szerinte lehetséges e megírni a plugint a programjával, vagy inkább csináljam java-ban... Utánanézek még, hogy van e lehetőség a kód indexelésbe belenyúlni.
http://www.eclipse.org/articles/Article-PDE-does-plugins/PDE-intro.html
Azért van plugin fejlesztésre hasonló rövidségű megoldás is java-ban... :-) Az előnye, hogy elég jól dokumentált, és gondolom a kód kiegészítés is rendesen működik nála, nem úgy, mint a scriptes megoldásban, ahol lövésem sincs, hogy milyen csomagok, meg milyen elérhető funkciók vannak...
http://docs.huihoo.com/eclipse/How-to-Write-Your-Own-Eclipse-Plug-ins-OSCON-2009.pdf
Találtam használható leírást plugin készítésről. Mondjuk van egy sereg tutorial, de azért mégsem ennyire részletesek. Találtam még olyat, hogy nodeclipse, ami nodejs plugin eclipse-hez. Meg fogom kérdezni annak a fejlesztőjét, hátha tud segíteni.
Van még egy VJET nevű cucc, amit érdemes lehet kipróbálni, de nem sikerült telepítenem.
Közben megtaláltam, hogy ebbe
Package org.eclipse.wst.jsdt.web.core.javascript.search
A dolgot bonyolítja, hogy azt írják, hogy ez még jelentősen változni fog a közeljövőben, úgyhogy ha nem akarom, hogy használhatatlan legyen nagyon hamar a módosításom, akkor jobb megkeresni a fejlesztőket, és megdumálni velük, hogy tegyék bele a következő release-be.
update:
the classpath mechanism from the JDT to represent javascript's Global Scope.
Imports are added / removed from the Global Scope.
Have a look at the JSPTranslation.java class in the
org.eclipse.wst.jsdt.web.core plugin. The imports are parsed in the
translator, stored in the translation, then passed to the
DocumentContextFragmentRoot (o.e.w.jsdt.core) for inclusion in the Global
Scope.
Asszem vicces lesz ezt meghaxolni, elég érdekes logikája van... Mondjuk nagyjából el tudom képzelni, hogy egy fát alkotnak global scope-on az osztályok, aztán ha scope-ot váltasz, akkor ehhez ad hozzá dolgokat, vagy vesz el belőle... Legalábbis valami ilyesmi lehet a leírás alapján. Majd írok a szerzőknek, hogy szerintük mennyire lehetséges amit akarok.
http://www.eclipse.org/forums
Itt írnak arról, hogy hogyan lehet az alap beállításokkal meg jsdoccal megoldani a modul pattern-nél a kód kiegészítést.
Arra gondoltam, hogy lehet, hogy szimplán jsdoccal megoldható az örökléses probléma is... Ennek még jobban utánajárok.
jsdoc lehetőségek eclipseben
alap osztályok:
PHPStorm vagy WebStorm
PHP/Webstorm nem ingyenes de elerheto aron merfoldekkel jobb es gyorsabb
oroklodesnel lesd meg John Resig peldajat, az tamogatja a parent fuggvenyeinek is a meghivasat, nekem bevalt link
Amit fentebb bemásoltam
Amivel nekem bajom van, hogy az IDE nem hoz fel a parent függvényeire automatikus kódkiegészítést. Netbeans-ben neki sem álltam, mert nem valami stabil Eclipse-hez képest, és már meguntam, hogy napi 10x omlik össze... Webstorm nem hiszem, hogy bármivel jobb lenne Eclipse-nél, de javíts ki, ha tévedek. Ha van rajta nodejs támogatás meg a szülő osztályokat is mutatja az automatikus kódkiegészítés, akkor szívesen megveszem...
alapbol
WebStorm
30 nap
Nem kell bemutatni őket.
NodeJS van benne.
Az öröklődésnél ugyanaz a helyzet, bár ez legalább tud róla, hogy van olyan, hogy Object.create, csak képtelen felfogni a jelentését. Megnézem a bővíthetőségét, de ha manuálisan kell indexelni, akkor inkább írok plugint eclipse-hez, mint ehhez. Az legalább ingyen nyújtja ugyanezt.
Teszteltem az Extjs-el megy
Ami még mindig zavaró, hogy a metódusoknál nem teszi ki alapból a paramétereket mint bármelyik másik IDE...
A végén rájöttem, hogy a
Mondjuk talán nem wikipedián kellett volna néznem...
Az van, hogy Aptana, Netbeans, Eclipse - egyik sem támogatja a jsDoc 3-at. Ami érdekes, hogy nem tudtam visszanézni, hogy melyik előző verziót támogatják, mert sehol nincs fent a jsDoc története a neten. Egyedül a WebStorm (meg a többi Jetbrains termék), ami támogatja a jsDoc 3-at.
A fenti példa jsDoc 3-al:
Újabb problémába ütköztem,
Gyakorlatilag ennyiről van szó:
test.js
Szerintem ha csak nincs a
Van egy NodeJs Core Modules
Amúgy nincs valami más módja, hogy beszúrjak egy js fájlt, csak a require? Ez a fájlokra darabolás nekem csak arra kell, hogy átláthatóbb legyen a kód... Mondjuk a deploy-nál összeraknám őket nagyobb fájlokba, vagy bármi ilyesmi (egyelőre csak próbálgatom, hogy mik a lehetőségek).
Nem tudtam, h van ilyen, de
Amit ez Eclipse ismer (és gondolom akkor a webstorm is esetleg) az a @extends annotáció.
van egy build tool amit a
Webstorm alapból támogatja a
Egyébként az Ant még mindig
Még semmit, egyelőre csak
A Puppetről semmit az ég
Láttam már emlegetve de nem vettem még a fáradtságot, hogy ránézzek egyáltalán. Én konzervatív vagyok, "bash forever" ;). Ha IDE-zek akkor Ant, egyébként meg make, nincs igényem többre/másra :)
Közben azt találtam, hogy