Newsgroup: it.comp.os.linux.development
Titolo: Editor con intellisense

Hi,
avevo posto la questione più di un anno fa, la rifaccio ora sperando
che la  situazione sia cambiata...  siete a conoscenza di  un editor
di  testi  (o  anche  un  IDE) che  comprenda  una  funzione  simile
all'intellisense di  Micros~1 (cioè quella  funzione che ti  aiuta a
scrivere  il nome  delle funzioni  e dei  metodi degli  oggetti)? Mi
accontenterei anche di  un plugin per vim (ora ne  ho trovato uno ma
funziona malissimo... si basa su etags, ed è una mezza porcheria).
Ovviamente il linguaggio a cui sono interessato è il C++
Ora come  ora sto  tenendo d'occhio  KDevelop, che  funziona davvero
bene, ma non sono riuscito a  capire come fare a dirgli dove cercare
gli header che importo...
byeZ!
-- 
Vanni Brutto
| email 
za...@nofesso.libero.it
      |
| irc nick Zanac    |   ICQ 18526701 |
--- remove nofesso to reply ----------
Zanac is the Author of QTParted:
http://qtparted.sourceforge.net

 gli header che importo...
hem... ho appena fatto un giro  sul forum di kdevelop ed ho  scoperto
che la release sul CVS permette di fare quello che cerco :)
A quanto pare la creazione del  database dei  metodi va creato usando
un'utility  da  riga  di  comando  (r++),  ora  devo solo capire come
funziona  (ho   compilato   il  tutto,  lanciando  r++  sugli  header
effettivamente qualcosa fa)... boh, adesso provo a smanettare :)
-- 
Vanni Brutto
| email 
za...@nofesso.libero.it
      |
| irc nick Zanac    |   ICQ 18526701 |
--- remove nofesso to reply ----------
---PC powered by Linux kernel 2.4.20  


 porcheria).
Emacs.  Trovi il necessario a partire, se non ricordo male, da
http://ecb.sf.net
.
-- 
"We should not be looking for the tools that novices can safely use.
We should be looking to increase the skill of those novices so that
they can safely use the power tools that will get the real work
done."            (Robert Martin on the Pragmatic Programmer's mailing list)

Ovviamente il linguaggio a cui sono interessato č il C++
sicuro che Vim non supporti l'autocompletamento? a me risulta che lo
faccia benino anche senza etags, cerca l'howoto con un nome tipo
"C/c++ editing with Vim" 

 Ovviamente il linguaggio a cui sono interessato è il C++
Una mezza calzetta e' disponibile come plugin per glimmer
glimmer.sourceforge.net
si basa sull'analizzatore global.
Quando il progetto sourcebase sara' funzionante ci si potra' divertire
parecchio.
-- 
  Giuseppe "Cowo" Corbelli \/\ My software: 
http://cowo.yoda2000.net
    **ANTI-SPAM** -- **Substitute IHATESPAM with cowo to reply by mail**
  -<! 3rd Law of Computing: Anything that can go wr
		fortune: Segmentation violation -- Core dumped !>-

 parecchio.
Ho  dato  un'occhio  alla  libreria sourcebase,  ma  sembra  già  un
progetto defunto  ancor prima di nascere  :( Il fatto poi  che hanno
deciso  di "estrarre"  le  funzioni  di sourcenav  è  un fatto  imho
negativo. Questa è duplicazione di  codice, e rende immantenibile un
progetto  nel medio/lungo  termine. Il  tutto molto  IMHO... io  non
conterei molto su di un progetto del genere.
Al contrario sono fiducioso nell'implementazione di kdevelop, sembra
un ottimo lavoro pensato con la  modularità in testa. In pratica c'è
un'utility a riga  di comando, r++ per l'appunto, che  fa il parsing
degli  header e  crea un  database  di questi,  includendo anche  le
classi, i metodi  e le proprietà; poi ovviamente vi  sarà un insieme
di funzioni  che effettuano  a sua volta  la scansione  del database
creato. Se fanno  un lavoro modulare sulle  librerie che scansionano
il  database  sarà  un  lavoro  che  potrebbe  venire  reciclato  in
un'infinità di editor... è positivo anche il fatto che l'utility che
crea il database sia richiamabile da riga di comando!
IMHO da  come si presente sembra  già che il metore  di intellisense
sia completamente  separato dall'editor, visto che  kdevelop prevede
due "engine" diversi per l'editing, e in entrambi funziona lo stesso
intellisense. Certo,  a vedere lo  stato attuale di lavoro  ne hanno
ancora tanto da  fare, ma qualcuno doveva pur  cominciare, visto che
attualmente nessun editor prevedeva una funzionalità del genere.
Per la cronaca confermo infatti che ne emacs ne vim fanno quello che
mi  interessa in  modo  soddisfacente! Il  problema  è sempre  nelle
classe derivate,  provate a fare  una classe "Prova", con  il metodo
"pippo",  poi  fate una  classe  "Prova2"  derivata da  "Prova"  che
sovraccarica il metodo "pippo" aggiungendo qualche parametro in più.
A questo punto create un oggetto della classe Prova2 e fate qualcosa
del tipo nomeoggetto.pippo( Se aggiungete poi che la classe Prova si
trova  in un'accoppiata  di file  .cpp/h,  e Prova2  su di  un'altra
accoppiata... beh, il pasticcio  è fatto! Tuttavia l'intellisense di
Micros~1 funziona  anche in  questo caso è  visualizza correttamente
sia il metodo pippo di Prova che  quello di Prova2. Un altro caso di
difficile parsing  è quando vi  sono in  gioco dei cast,  o robaccia
simile. Ad  esempio: (QWidget  *)pippo, se ci  pensate per  fare una
cosa  simile alla  fin  fine  si deve...  riscrivere  il parser  del
compilatore!  Mi  rendo conto  che  non  sia  una cosa  semplice  da
realizzare,  e  guarda caso  ancora  nessun  editor sotto  Linux  lo
prevede[*], ma è imho una funzione molto cool!
Ora sono sicuro  che qualcuno obbietterà "ma è una  funzione che non
serve  a  nulla"... beh,  vi  assicuro  invece  che siamo  in  molti
ad  usarla... e  molti  la  usarebbero se  fosse  a disposizione  :)
Ricordarsi  a memoria  il  nome di  tutti  i metodi  e  di tutte  le
proprietà di tutte  le classi di un progetto che  sia qualcosa di un
po' più complesso di Hello World[**]  è una cosa difficile... se poi
aggiungiamo ricordarsi anche tutti i  parametri da passare ai metodi
e l'ordine corretto nel quale vanno  scritti, beh, a questo punto vi
rendete conto che solo un Pico della Mirandola può farcela :)
[*]  in effetti  ho  mentito. Un  editor che  fa  quello che  voglio
esiste. E'  l'ottimo "visual slickedit"! Quest'ultimo  è un prodotto
ben congegnato, che prevede "l'intellisense" (anche se non si chiama
così)  sia  per c++  che  per  Java,  e  funziona pure  molto  bene.
Purtroppo però  non è un  prodotto free,  è venduto con  una licenza
commerciale... e un  po' perché non ho i soldi  per comparlo, un po'
perché per  principio cerco di  usare solo prodotti Open  Source, mi
rifiuto di usarlo.
[**] e  anche qui  un po'  ho mentito.  La funzione  di intellisense
funziona benissimo  su file  medio/piccoli, se si  dispone di  un PC
poco  potente  basta un  file  che  includa  molti header  lunghi  e
complessi per rallentare l'editing. Cmq  sul mio P4 2400Mhz problemi
non ce ne sono,  ma mi ricordo quando usavo MSVC++  su di un Pentium
200Mhz... beh, per quanto comodo  fosse l'intellisense dopo 2 minuti
lo disabilitivi ;)
-- 
Vanni Brutto
| email 
za...@nofesso.libero.it
      |
| irc nick Zanac    |   ICQ 18526701 |
--- remove nofesso to reply ----------
---PC powered by Linux kernel 2.4.20  


 creato.
Devi far girare ogni volta l'aggiornamento del database a mano? Non e'
possibile che il database si aggiorni mentre si scrive il codice?
Alessandro.

 possibile che il database si aggiorni mentre si scrive il codice?
Calma e sangue freddo :)
Tutti gli  editor che hanno  una feature "simil" intellisense  ha il
database composto da  due distinte sezioni: una  aggiornata in tempo
reale dai  file che  stai editando  (e quindi  ho risposto  alla tua
questione),  e  un'altra  parte  che,  per  motivi  di  performance,
deve  essere  generata a  mano.  Un  esempio?  Tutti gli  header  in
/usr/include! E' proprio di questi header che stavo parlando. Non ha
senso rigenerare  il database in realtime  per (esempio) le QT  o le
GTK, meno senso ancora ha controllare  se gli header sono cambiati e
in  questo  caso rigenerare  il  database  (ho appena  guardato  per
scrupolo...  la  mia /usr/include  ha  la  bellezza di  7725  files,
capirai che controllare ogni singolo file ogni volta...).
IMHO non ci sono molte alternative, a meno di voler rendere l'editor
lento...


 attualmente nessun editor prevedeva una funzionalità del genere.
Concordo. Ed e' uno scandalo. Sourcebase (evoluto da tagmanager, utilizzato
in anjuta1) secondo me puo' essere una buona risposta all'esigenza. Ma non
sempre e' facile organizzare un team di sviluppo.
...
-- 
  Giuseppe "Cowo" Corbelli \/\ My software: 
http://cowo.yoda2000.net
    **ANTI-SPAM** -- **Substitute IHATESPAM with cowo to reply by mail**
  -<! The Moment Is Now In All History, The Time Has Arrived And This Is The
  		One Place To Be. !>- Savatage - This Is The Time

 effettivamente qualcosa fa)... boh, adesso provo a smanettare :)
r++ nome_db header.
Esempio (per generare quello della STL sul mio PC):
r++ stl -a /usr/include/c++/3.3
Il -a serve per dirgli tutti i file, anche quelli che non finiscono con
.h
Funziona ma non molto bene per ora..
-- 
Andrea Bergia - studente              Linux Registered User #281550