Quantcast
Channel: CodeSection,代码区,Linux操作系统:Ubuntu_Centos_Debian - CodeSec
Viewing all articles
Browse latest Browse all 11063

How I chased down a PHP mode indention bug in Emacs

$
0
0

I was getting irritated by emacs refusing to indent php code properly when I was working on a MediaWiki extension. I’ve run into this before, but, today, in order to procrastinate a little, I ran into it again with the following code:

try {
$object->method( ARG );
}

It kept trying to put $object the same level as try , so it would end up with:

try {
$object->method( ARG );
}

So I chased it down. I used C-h k to find the function being called. After a bit of edebug , I found that the code in the function c-indent-line being called was essentially:

(c-get-syntactic-indentation (c-guess-basic-syntax))

In fact, doing M-; (c-get-syntactic-indentation (c-guess-basic-syntax)) RET when point was sitting on $ gave the result 4 when it tried to indent and 0 when it didn’t.

(Ok, the code had two more levels of indention than the above, so it was giving 12 and 8 , but let’s not get carried away with details.)

Now, running M-x php-mode RET (i.e. none of the added configuration in .dir-locals.el ) gave the proper indention. In my .dir-locals.el , though, I had set up a c-offsets-alist that mostly worked with bits and pieces copied from all over.

Running just M-; (c-guess-basic-syntax) RET returned ((statement-block-intro 1379)) so I figured I needed to add (statement-block-intro . +) to my c-offsets-list .

I added that, and it worked. And now I know how to chase down indention bugs.

(Header image by Ivo Kruusamgi [CC BY-SA 4.0 (http://creativecommons.org/licenses/by-sa/4.0)], via Wikimedia Commons .)

Viewing all articles
Browse latest Browse all 11063

Trending Articles