<div dir="ltr">Thanks very much for the comprehensive answer.<br>
<br>
Using spaces and tabs for alignment does make the code more readable<br>
to my mind.<br>
<br>
The reason behind my question originally was that the CodingStyle doc states:<br>
<br>
&quot;Outside of comments, documentation and except in Kconfig, spaces are never<br>
used for indentation, and the above example is deliberately broken.&quot;<br>
<br>
however most code I have seen is not compliant with that.<br>
<br>
Should the docs be updated?<br>
<br>
Cheers,<br>
Laurence.<br>
<br>
On Mon, Sep 26, 2016 at 10:32:06PM +0300, Andrey Utkin wrote:<br>
&gt; On Mon, Sep 26, 2016 at 06:28:58PM +0100, Laurence Rochfort wrote:<br>
&gt; &gt; Hi all,<br>
&gt; &gt;<br>
&gt; &gt; I&#39;ve read Documentation/CodingStyle and it states to use 8 character tabs.<br>
&gt; &gt;<br>
&gt; &gt; Reading several USB driver files including drivers/usb/usb-skeleton.c, I see that multi-line lists of argument and operands are often aligned on top of each other using a mixture of tabs and spaces. checkpatch doesn&#39;t complain about the mixture.<br>
&gt; &gt;<br>
&gt; &gt; For instance from usb-skeleton.c:<br>
&gt; &gt;<br>
&gt; &gt; static int skel_probe(struct usb_interface *interface,<br>
&gt; &gt;                       const struct usb_device_id *id)<br>
&gt; &gt;<br>
&gt; &gt; uses two tabs and 6 spaces, not just tabs like:<br>
&gt; &gt;<br>
&gt; &gt; static int skel_probe(struct usb_interface *interface,<br>
&gt; &gt;                const struct usb_device_id *id)<br>
&gt; &gt;<br>
&gt; &gt; or<br>
&gt; &gt;<br>
&gt; &gt; static int skel_probe(struct usb_interface *interface,<br>
&gt; &gt;                                  const struct usb_device_id *id)<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; Is a mixture of tabs and spaces acceptable if it enhances readability? If not, which of the tabs-only forms is correct?<br>
&gt; &gt;<br>
&gt; &gt; Similarly, what about assignment alignment in structs?<br>
&gt;<br>
&gt; By my observations, conventional alignment in kernel contributions<br>
&gt; nowadays is N*tab followed by M*space, where M &lt; 8. For details, consult<br>
&gt; &quot;checkpatch --strict&quot; output. It&#39;s not a paramount to make all existing<br>
&gt; codebase to pass that check cleanly, but if you are polishing your new<br>
&gt; patch, you can use that as guidance.<br>
&gt;<br>
&gt; If you use Vim, see <a href="https://github.com/vivien/vim-linux-coding-style" rel="noreferrer" target="_blank">https://github.com/vivien/vim-linux-coding-style</a> -<br>
&gt; it will indent your code more or less in accordance with coding style,<br>
&gt; also making checkpatch happy.<br>
&gt;<br>
&gt; checkpatch in --strict mode actually prefers trailing lines to be<br>
&gt; aligned on opening brace. Tabs and spaces are allowed for such alignment<br>
&gt; (and you _need_ spaces to be able to align like that).<br>
&gt;<br>
&gt; So what above vim plugin makes, and what is widely used in kernel<br>
&gt; codebase, is something like this (&quot;|tab---&gt;&quot; or a smaller part<br>
&gt; represents tab character, &quot;.&quot; represents space):<br>
&gt;<br>
&gt; static int blah_blah_blah(struct usb_interface *interface,<br>
&gt; |tab---&gt;|tab---&gt;|tab---&gt;..const struct usb_device_id *id)<br>
&gt; {<br>
&gt; |tab---&gt;if (1) {<br>
&gt; |tab---&gt;|tab---&gt;int var = blah_blah(interface-&gt;foo_bar-&gt;baz_fuzz,<br>
&gt; |tab---&gt;|tab---&gt;|tab---&gt;|tab---&gt;....11111111111111 + 111111111111111);<br>
&gt;<br>
&gt; Also<br>
&gt;<br>
&gt; |tab---&gt;|tab---&gt;|tab---&gt;|tab---&gt;|tab---&gt;|tab---&gt;|tab---&gt; (shown for reference)<br>
&gt; #define DRIVERNAME_REGISTER1_NAMEXXX---&gt;|tab---&gt;0xdead<br>
&gt; #define DRIVERNAME_REGISTER2_NAME_WHICH_IS_LONG&gt;0xdeaf<br>
&gt;<br>
&gt; Which looks this way with actual tab characters:<br>
&gt;<br>
&gt; #define DRIVERNAME_REGISTER1_NAMEXXX          0xdead<br>
&gt; #define DRIVERNAME_REGISTER2_NAME_WHICH_IS_LONG       0xdeaf<br>
&gt;<br>
&gt; This is supposed to be displayed ALWAYS with 8-char tab (this is carved<br>
&gt; in slate of CodingStyle), thus arguments about breaking viewing with<br>
&gt; different tab sizes are to be ignored.<br>
&gt;<br>
&gt; To my taste this is not best possible approach, and I would like all<br>
&gt; readers of this thread to check this article:<br>
&gt; <a href="http://dmitryfrank.com/articles/indent_with_tabs_align_with_spaces" rel="noreferrer" target="_blank">http://dmitryfrank.com/articles/indent_with_tabs_align_with_spaces</a><br>
&gt; But, unfortunately, checkpatch is explicitly not happy with that<br>
&gt; approach, giving notices of ERROR and WARNING levels for first example,<br>
&gt; however accepting #define case to be aligned with spaces IIRC.<br>
</div>