Re: erlang.el mis-indents whole-buffer selection

Magnus Henoch <[email protected]>
Newsgroups gmane.comp.lang.erlang.bugs,gmane.comp.lang.erlang.patches
Message-ID <[email protected]>
Magnus Henoch <[email protected]> writes:

> Tuncer Ayaz <[email protected]> writes:
>
>> Previously it was just a certain[1] function in rebar.erl which got
>> mis-indented when you did a whole-buffer indent, but now there's also
>> a second[2] function which gets mis-indented.
>>
>> In both cases indenting the function itself separately works, and the
>> bug happens if you select the whole buffer and indent that with
>> erlang.el (C-x C-q).
>>
>> I'm using Emacs 24.3.1 with latest erlang.el from maint.
>>
>> Is it possible to fix this in the existing indenter?
>>
>> [1] https://github.com/rebar/rebar/blob/620c4b01c/src/rebar.erl#L318-L365
>> [2] https://github.com/rebar/rebar/blob/620c4b01c/src/rebar_erlc_compiler.erl#L92-L112
>
> It seems like this happens when the code being indented has not yet been
> made visible, and thus lazy syntax highlighting has not yet happened.
> The syntax table for erlang-mode is unable to handle some combinations
> of characters; in particular, when a string ends with a dollar sign (as
> in "foo$"), the dollar sign plus the double quote would be treated as a
> character constant were it not for some magic regexps in
> font-lock-syntactic-keywords.  Manually scrolling through the buffer
> before reindenting seems to make the problem go away.
>
> This is less than satisfactory, of course.  Looking up online help for
> font-lock-syntactic-keywords in a modern Emacs gives:
>
>   This variable is obsolete since 24.1;
>   use `syntax-propertize-function' instead.
>
> And the NEWS file for Emacs 24.1 contains:
>
>   *** New variable `syntax-propertize-function'.
>   This replaces `font-lock-syntactic-keywords' which is now obsolete.
>   This allows syntax-table properties to be set independently from font-lock:
>   just call syntax-propertize to make sure the text is propertized.
>   Together with this new variable come a new hook
>   syntax-propertize-extend-region-functions, as well as two helper functions:
>   syntax-propertize-via-font-lock to reuse old font-lock-syntactic-keywords
>   as-is; and syntax-propertize-rules which provides a new way to specify
>   syntactic rules.
>
> This sounds like the right way to solve the problem, though of course
> you won't know until you try...

While playing with the code, I realised that there's a much simpler
solution: explicitly run syntax highlighting before indenting; that way
all syntax properties will be set.

git fetch git://github.com/legoscia/otp.git fontify-before-indentation

https://github.com/legoscia/otp/compare/fontify-before-indentation

Regards,
Magnus
_______________________________________________
erlang-bugs mailing list
[email protected]
http://erlang.org/mailman/listinfo/erlang-bugs
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.