寻找一个程序,可以帮助我生成一个lisp程序的代码行每函数统计

寻找一个程序,可以帮助我生成一个lisp程序的代码行每函数统计,lisp,common-lisp,metrics,code-metrics,loc,Lisp,Common Lisp,Metrics,Code Metrics,Loc,我正在寻找的程序,可以为我生成一个lisp程序中每个函数的代码行统计信息。在Lisp中,这意味着每个函数或宏都要计算顶级函数中递归包含的函数数 任何指针都将不胜感激 为每个函数或宏计算顶级函数中递归包含的函数数 我不知道这意味着什么 如果要计算代码中函数调用的数量,则需要一个完整的函数调用 然而,对于文件中顶级表单数量的简单含义来说,这个问题相当容易处理。 我不知道有哪一个现有的项目能做到这一点,但这听起来并不难: (defun read-file-as-string (file-name)

我正在寻找的程序,可以为我生成一个lisp程序中每个函数的代码行统计信息。在Lisp中,这意味着每个函数或宏都要计算顶级函数中递归包含的函数数

任何指针都将不胜感激

为每个函数或宏计算顶级函数中递归包含的函数数

我不知道这意味着什么

如果要计算代码中函数调用的数量,则需要一个完整的函数调用

然而,对于文件中顶级表单数量的简单含义来说,这个问题相当容易处理。 我不知道有哪一个现有的项目能做到这一点,但这听起来并不难:

(defun read-file-as-string (file-name)
  (with-open-file (in file-name :external-format charset:iso-8859-1)
    (let ((ret (make-string (1- (file-length in)))))
      (read-sequence ret in)
      ret)))
:可能不需要外部格式
。 看

  • 那是 工作所必需的 在包含此映像中当前不存在的包的文件上

为每个函数或宏计算顶级函数中递归包含的函数数

我不知道这意味着什么

如果要计算代码中函数调用的数量,则需要一个完整的函数调用

然而,对于文件中顶级表单数量的简单含义来说,这个问题相当容易处理。 我不知道有哪一个现有的项目能做到这一点,但这听起来并不难:

(defun read-file-as-string (file-name)
  (with-open-file (in file-name :external-format charset:iso-8859-1)
    (let ((ret (make-string (1- (file-length in)))))
      (read-sequence ret in)
      ret)))
:可能不需要外部格式
。 看

  • 那是 工作所必需的 在包含此映像中当前不存在的包的文件上


有一个名为Xref的静态分析器。也许它甚至包含在粘液中。。。请参阅:不知道是否有更新的版本。有一个名为Xref的静态分析器。也许它甚至包含在粘液中。。。请参阅:不知道是否有更新的版本。
(defun count-forms (string)
  (with-input-from-string (in string)
    (loop with *read-suppress* = t
      until (eq in (read in nil in))
      count t)))
(defun file-code-stats (file-name)
  (let* ((file-text (read-file-as-string file-name))
         (lines (count-lines file-text))
         (forms (count-forms file-text)))
    (format t "File ~S contains ~:D characters, ~:D lines, ~:D forms (~,2F lines per form)"
            file-name (length file-text) lines forms (/ lines forms))
    (values (length file-text) lines forms)))



(file-code-stats "~/lisp/scratch.lisp")
File "~/lisp/scratch.lisp" contains 133,221 characters, 3,728 lines, 654 forms (5.70 lines per form)
133221 ;
3728 ;
654