Re: erlang.el mis-indents whole-buffer selection
Tuncer Ayaz <[email protected]> Sun, 29 Jun 2014 18:47:19 +0200
| Newsgroups | gmane.comp.lang.erlang.bugs,gmane.comp.lang.erlang.patches |
|---|---|
| Message-ID | <CAOvwQ4iaGodMAdbp+giUEW1ZXC_Jqurbvq+ZXa7wTprsruyXgQ@mail.gmail.com> |
On Sun, Jun 29, 2014 at 4:10 PM, Magnus Henoch wrote: > Magnus Henoch writes: > > > Tuncer Ayaz 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 Nice, thanks Magnus! Does the patch allow me to set (global-font-lock-mode 0) without breaking erlang-mode? _______________________________________________ erlang-bugs mailing list [email protected] http://erlang.org/mailman/listinfo/erlang-bugs