Packages
excoveralls
0.14.0
0.18.5
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.1
0.17.0
0.16.1
0.16.0
0.15.3
0.15.2
0.15.1
0.15.0
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.4
0.13.3
0.13.2
0.13.1
0.13.0
0.12.3
0.12.2
0.12.1
0.12.0
0.11.2
0.11.1
0.11.0
0.10.6
0.10.5
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.2
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.11
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
Coverage report tool for Elixir with coveralls.io integration.
Current section
Files
Jump to
Current section
Files
lib/excoveralls/cover.ex
defmodule ExCoveralls.Cover do
@moduledoc """
Wrapper class for Erlang's cover tool.
"""
@doc """
Compile the beam files for coverage analysis.
"""
def compile(compile_path) do
:cover.stop
:cover.start
:cover.compile_beam_directory(compile_path |> string_to_charlist)
end
@doc """
Returns the relative file path of the specified module.
"""
def module_path(module) do
module.module_info(:compile)[:source]
|> List.to_string
|> Path.relative_to(ExCoveralls.PathReader.base_path)
end
@doc "Wrapper for :cover.modules"
def modules do
:cover.modules |> Enum.filter(&has_compile_info?/1)
end
def has_compile_info?(module) do
with info when not is_nil(info) <- module.module_info(:compile),
path when not is_nil(path) <- Keyword.get(info, :source),
true <- File.exists?(path) do
true
else
_e ->
log_missing_source(module)
false
end
rescue
_e ->
log_missing_source(module)
false
end
@doc "Wrapper for :cover.analyse"
def analyze(module) do
:cover.analyse(module, :calls, :line)
end
if Version.compare(System.version, "1.3.0") == :lt do
defp string_to_charlist(string), do: String.to_char_list(string)
else
defp string_to_charlist(string), do: String.to_charlist(string)
end
defp log_missing_source(module) do
IO.puts :stderr, "[warning] skipping the module '#{module}' because source information for the module is not available."
end
end