-
Notifications
You must be signed in to change notification settings - Fork 35
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CLI flag to define/override specs #88
Comments
Hm.. I don't know. Do you check your beam files or your erl files? The beam files (compiled with debug_info) should contain the AST after parse transform. The erl files contain the code before parse transform. It is possible to inform gradualizer about such functions, or override specs with other specs, by loading a module with spec declarations such as |
I've finally had time to check this. Indeed, typechecking .beam files works without an issue: $ cat src/lager_tracing.erl
-module(lager_tracing).
-compile([export_all]).
-include_lib("lager/include/lager.hrl").
log_event_with_tag() ->
lager:warning([{tag, true}], "warning with tag ~p", ["{tag, true}"]).
log_event_no_tag() ->
lager:warning("warning without tags", []).
$ gradualizer src/lager_tracing.erl
src/lager_tracing.erl: Call to undefined function lager:warning/3 on line 8
src/lager_tracing.erl: Call to undefined function lager:warning/2 on line 11
$ gradualizer -pa _build/default/lib/lager/ebin _build/default/lib/lager_tracing/ebin/lager_tracing.beam
$ So does importing spec stubs with I think the CLI flag would be a huge plus. Thanks for the response. I'll leave this issue open for you to decide if it's a good reminder for the flag feature or should just be closed. |
Thanks for verifying this! |
I think it would make sense to have a CLI flag in the long term. But given that we have a work-around that works well I don't consider it a high priority. |
For the record, it's been a while since I created this issue and it turns out the original problem - false warnings about The -module(lager).
-spec lager:debug(string(), list()) -> ok.
-spec lager:info(string(), list()) -> ok.
-spec lager:warning(string(), list()) -> ok.
-spec lager:error(string(), list()) -> ok.
-spec lager:critical(string(), list()) -> ok. Since I use Vim, I made the Neomake gradualizer maker (https://github.com/erszcz/neomake/tree/erlang-gradualizer-wip @ 285c6232) use
the warnings are gone for the whole project. Works great! I'm closing the issue, since there's a CLI flag now, and the original problem is solved. |
Lager is probably the most popular logging framework used in the Erlang ecosystem. However, it's API is somewhat peculiar, because calling it is done with pseudo-calls, i.e. hooks which look like regular function calls, but are actually rewritten by
lager_transform
parse transformation. This results in, for example,Call to undefined function lager:debug/2 on line 204
messages.One obvious way of solving this would be for a library using such a parse transformation to export properly typed function stubs. What's the Gradualizer team's stance on that? Do you suggest sending PRs adding suitable stubs e.g. to lager?
The text was updated successfully, but these errors were encountered: