PHPDoc no Komodo Edit

PHP
Enviado por Pedro Faria em Qui, 04/09/2008 - 09:21.PHP

Já a algum tempo estou usando o Komodo Edit que por sinal tem me deixado muito satisfeito.

Porém, por ser uma versão gratuita, não tem uma penca de funcionalidades, uma delas é a documentação do código PHP.

Para solucionar esta dificuldade, resolvi escrever um macro para o komodo que monta o bloco de comentário apenas de funções e métodos do php.

Quem quiser ver o código do macro na integra, continue lendo este artigo ou apenas faça o download do pacote.

A macro foi escrita em Javascript.

  1. if (komodo.view) { komodo.view.setFocus() };
  2.  
  3. scimoz = ko.views.manager.currentView.scimoz;
  4. ko.commands.doCommand('cmd_blockSelect')
  5. //scimoz.lineEnd();
  6. //scimoz.homeExtend();
  7.  
  8. line   = scimoz.selText
  9. indent = line.match(/^(\s*)/)[0];
  10.  
  11. scimoz.home();
  12.  
  13. function kphpdoc_addText (str) {
  14.   scimoz.insertText(scimoz.currentPos, indent + str + '\n');
  15.   scimoz.lineDown()
  16. }
  17.  
  18. function kphpdoc_parse_params(str) {
  19.   er = /(?:(\w+)\s+)?(&\s*)?(\$\w+)/g;
  20.   er2 = /(?:(\w+)\s+)?(?:&\s*)?(\$\w+)/;
  21.   rs1 = str.match(er);
  22.   for(i in rs1) {
  23.     rs2 = rs1[i].match(er2);
  24.     type = rs2[1] || 'mixed';
  25.     kphpdoc_addText(' * @param '+type+' '+rs2[2]);
  26.   }
  27. }
  28.  
  29. function kphpdoc_func(data) {
  30.   fin = data[1] || data[4];
  31.   sta = data[2] || data[5];
  32.  
  33.   kphpdoc_addText('/**');
  34.   kphpdoc_addText(' * '+ data[7]);
  35.   kphpdoc_addText(' *');
  36.   if (sta) kphpdoc_addText(' * @static');
  37.   if (fin) kphpdoc_addText(' * @final');
  38.   if (data[3]) kphpdoc_addText(' * @access '+ data[3]);
  39.  
  40.   kphpdoc_parse_params(data[8]);
  41.  
  42.   if (line.match(/return/)) kphpdoc_addText(' * @return mixed');
  43.   kphpdoc_addText(' **/');
  44. }
  45.  
  46. er_func = /^\s*(final\s+)?(static\s+)?(?:(public|private|protected)?\s+)?(final\s+)?(static\s+)?function\s+(&\s*)?(\w+)\s*\((.*)\)\s*\{?/;
  47. if (rs = line.match(er_func)) {
  48.   kphpdoc_func(rs);
  49. }

Caso você encontre algum erro ou tenha alguma sugestão de melhoria, é só falar...

t+