Current section
Files
Jump to
Current section
Files
lib/module_report.ex
defmodule Doctor.ModuleReport do alias __MODULE__ alias Doctor.ModuleInformation defstruct ~w(doc_coverage spec_coverage file functions missed_docs missed_specs has_module_doc)a def build(%ModuleInformation{} = module_info) do %ModuleReport{ doc_coverage: calculate_doc_coverage(module_info), spec_coverage: calculate_spec_coverage(module_info), file: module_info.file_relative_path, functions: length(module_info.user_defined_functions), missed_docs: calculate_missed_docs(module_info), missed_specs: calculate_missed_specs(module_info), has_module_doc: has_module_doc?(module_info) } end defp calculate_missed_docs(module_info) do Enum.count(module_info.docs, fn doc -> {doc.name, doc.arity} in module_info.user_defined_functions and doc.doc == :none end) end defp calculate_doc_coverage(module_info) do total = length(module_info.user_defined_functions) missed = calculate_missed_docs(module_info) if total > 0 do (total - missed) / total * 100 else nil end end defp calculate_missed_specs(module_info) do Enum.count(module_info.user_defined_functions, fn function -> function not in module_info.specs end) end defp calculate_spec_coverage(module_info) do total = length(module_info.user_defined_functions) missed = calculate_missed_specs(module_info) if total > 0 do (total - missed) / total * 100 else nil end end defp has_module_doc?(module_info) do if module_info.module_doc == :none do false else true end endend