Existem bons programas para actionscript/flex que contem linhas de código, número de funções, arquivos, pacotes, etc.
-
09-06-2019 - |
Pergunta
Doug McCune criou algo que era exatamente o que eu precisava (http://dougmccune.com/blog/2007/05/10/analyze-your-actionscript-code-with-this-apollo-app/) mas, infelizmente - foi para o AIR beta 2.Eu só gostaria de alguma ferramenta que eu pudesse executar e que fornecesse algumas métricas decentes... alguma ideia?
Solução
Há um Code Metrics Explorer no plug-in Enterprise Flex abaixo:
Outras dicas
Ferramenta simples chamada LocMetrics também pode funcionar para arquivos .as ...
Ou
find . -name '*.as' -or -name '*.mxml' | xargs wc -l
Ou se você usar zsh
wc -l **/*.{as,mxml}
Não lhe dará qual fração dessas linhas são comentários ou linhas em branco, mas se você estiver interessado apenas em como um projeto difere do outro e tiver escrito os dois, é uma métrica útil.
Aqui está um pequeno script que escrevi para encontrar o número total de ocorrências para diferentes elementos de código-fonte no código ActionScript 3 (escrito em Python simplesmente porque estou familiarizado com ele, enquanto Perl provavelmente seria mais adequado para um script pesado em regex assim):
#!/usr/bin/python
import sys, os, re
# might want to improve on the regexes used here
codeElements = {
'package':{
'regex':re.compile('^\s*[(private|public|static)\s]*package\s+([A-Za-z0-9_.]+)\s*', re.MULTILINE),
'numFound':0
},
'class':{
'regex':re.compile('^\s*[(private|public|static|dynamic|final|internal|(\[Bindable\]))\s]*class\s', re.MULTILINE),
'numFound':0
},
'interface':{
'regex':re.compile('^\s*[(private|public|static|dynamic|final|internal)\s]*interface\s', re.MULTILINE),
'numFound':0
},
'function':{
'regex':re.compile('^\s*[(private|public|static|protected|internal|final|override)\s]*function\s', re.MULTILINE),
'numFound':0
},
'member variable':{
'regex':re.compile('^\s*[(private|public|static|protected|internal|(\[Bindable\]))\s]*var\s+([A-Za-z0-9_]+)(\s*\\:\s*([A-Za-z0-9_]+))*\s*', re.MULTILINE),
'numFound':0
},
'todo note':{
'regex':re.compile('[*\s/][Tt][Oo]\s?[Dd][Oo][\s\-:_/]', re.MULTILINE),
'numFound':0
}
}
totalLinesOfCode = 0
filePaths = []
for i in range(1,len(sys.argv)):
if os.path.exists(sys.argv[i]):
filePaths.append(sys.argv[i])
for filePath in filePaths:
thisFile = open(filePath,'r')
thisFileContents = thisFile.read()
thisFile.close()
totalLinesOfCode = totalLinesOfCode + len(thisFileContents.splitlines())
for codeElementName in codeElements:
matchSubStrList = codeElements[codeElementName]['regex'].findall(thisFileContents)
codeElements[codeElementName]['numFound'] = codeElements[codeElementName]['numFound'] + len(matchSubStrList)
for codeElementName in codeElements:
print str(codeElements[codeElementName]['numFound']) + ' instances of element "'+codeElementName+'" found'
print '---'
print str(totalLinesOfCode) + ' total lines of code'
print ''
Passe caminhos para todos os arquivos de código-fonte em seu projeto como argumentos para este script para que ele processe todos eles e relate os totais.
Um comando como este:
find /path/to/project/root/ -name "*.as" -or -name "*.mxml" | xargs /path/to/script
Produzirá algo assim:
1589 instances of element "function" found
147 instances of element "package" found
58 instances of element "todo note" found
13 instances of element "interface" found
2033 instances of element "member variable" found
156 instances of element "class" found
---
40822 total lines of code
CLOC - http://cloc.sourceforge.net/.Embora seja baseado na linha de comando do Windows, ele funciona com AS3.0, possui todos os recursos que você deseja e está bem documentado.Aqui está a configuração do arquivo BAT que estou usando:
REM =====================
echo off
cls
REM set variables
set ASDir=C:\root\directory\of\your\AS3\code\
REM run the program
REM See docs for different output formats.
cloc-1.09.exe --by-file-by-lang --force-lang="ActionScript",as --exclude_dir=.svn --ignored=ignoredFiles.txt --report-file=totalLOC.txt %ASDir%
REM show the output
totalLOC.txt
REM end
pause
REM =====================
Para obter uma estimativa aproximada, você sempre pode executar find . -type f -exec cat {} \; | wc -l
no diretório do projeto se você estiver usando o Mac OS X.