[erlang-questions] Attempting to use erl_lint on a .erl source file

Steve Vinoski vinoski@REDACTED
Fri Dec 18 04:26:08 CET 2015


On Thu, Dec 17, 2015 at 9:52 PM, Sparr <sparr0@REDACTED> wrote:

> Figured it out with help from #erlang on freenode. If hello.erl is missing
> the trailing newline then the last form gets missed. I'm going to try to
> figure out how to account for that.
>

You don't need a newline specifically -- a space character will also work,
for example. Just change this:

  Forms = scan(erl_scan:tokens([],binary_to_list(B),1),[]),

to this:

  Forms = scan(erl_scan:tokens([],binary_to_list(B)++" ",1),[]),

--steve


> On Dec 17, 2015 18:32, "Steve Vinoski" <vinoski@REDACTED> wrote:
>
>>
>>
>> On Thu, Dec 17, 2015 at 1:45 PM, Sparr <sparr0@REDACTED> wrote:
>>
>>> I'm trying to use erl_lint() to build a simple Erlang syntax and style
>>> checker. I've gotten far enough to load the file and parse it into Forms
>>> and to get erl_lint to partially understand it, but then erl_lint complains
>>> about undefined functions that are defined. What am I doing wrong?
>>>
>>> erlint.erl :
>>>
>>>     -module(erlint).
>>>     -export([lint/1]).
>>>
>>>     % based on http://stackoverflow.com/a/28086396/13675
>>>
>>>     lint(File) ->
>>>         {ok, B} = file:read_file(File),
>>>         Forms = scan(erl_scan:tokens([],binary_to_list(B),1),[]),
>>>         F = fun(X) -> {ok,Y} = erl_parse:parse_form(X), Y end,
>>>         erl_lint:module([F(X) || X <- Forms],File).
>>>
>>>     scan({done,{ok,T,N},S},Res) ->
>>>         scan(erl_scan:tokens([],S,N),[T|Res]);
>>>     scan(_,Res) ->
>>>         lists:reverse(Res).
>>>
>>> hello.erl :
>>>
>>>     -module(hello).
>>>     -export([hello_world/0]).
>>>
>>>     hello_world() -> io:fwrite("hello, world\n").
>>>
>>> attempt to use :
>>>
>>>     1> c(erlint).
>>>     {ok,erlint}
>>>     2> erlint:lint("hello.erl").
>>>     {error,[{"hello.erl",
>>>              [{2,erl_lint,{undefined_function,{hello_world,0}}}]}],
>>>            []}
>>>
>>
>> I copied both erlint and hello directly out of your email, pasted them
>> into source modules, compiled erlint, and ran erlint:lint("hello.erl"),
>> same as you show. It returned {ok,[]}. I then changed the first double
>> quote in hello.erl to a single quote to introduce an obvious syntax error,
>> and retried. That gave me the same result you're seeing, which makes sense
>> because the module is exporting a function that it never defines due to the
>> syntax error. You might want to check your hello.erl source, or just try to
>> compile it, to make sure its contents are correct.
>>
>> --steve
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20151217/b9ed0f68/attachment.htm>


More information about the erlang-questions mailing list