Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions apps/engine/lib/engine/engine/bootstrap.ex
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ defmodule Engine.Bootstrap do
the project's code paths, which are then added to the code paths from the language server. At this
point, it's safe to start the project, as we should have all the code present to compile the system.
"""
alias Forge.LogFilter
alias Forge.Project

require Logger
Expand Down Expand Up @@ -66,6 +67,7 @@ defmodule Engine.Bootstrap do
}

:logger.add_handler(handler_name, :logger_std_h, config)
LogFilter.hook_into_logger()
end

defp maybe_change_directory(%Project{} = project) do
Expand Down
3 changes: 3 additions & 0 deletions apps/expert/lib/expert/application.ex
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ defmodule Expert.Application do
@moduledoc false

alias Forge.Document
alias Forge.LogFilter

use Application

Expand All @@ -26,6 +27,8 @@ defmodule Expert.Application do
assigns: Expert.Assigns}
]

LogFilter.hook_into_logger()

opts = [strategy: :one_for_one, name: Expert.Supervisor]
Supervisor.start_link(children, opts)
end
Expand Down
42 changes: 42 additions & 0 deletions apps/forge/lib/forge/log_filter.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
defmodule Forge.LogFilter do
def hook_into_logger() do
:logger.add_primary_filter(:ignore_module_warnings, {&reject_module_warnings/2, []})
end

def reject_module_warnings(log_event, _) do
case log_event do
%{msg: {:report, _}} ->
:ignore

%{msg: {:string, message}} ->
message
|> ensure_binary()
|> action()

%{msg: {format_string, format_data}} ->
format_string
|> :io.format(format_data)
|> ensure_binary()
|> action()

_ ->
:ignore
end
end

defp action(message) do
if message =~ "is already compiled." do
:stop
else
:ignore
end
end

defp ensure_binary(charlist) when is_list(charlist) do
List.to_string(charlist)
end

defp ensure_binary(s) when is_binary(s) do
s
end
end
Loading