| @@ -38,6 +38,81 @@ Like ``clang-format`` for the rest of the kernel, ``rustfmt`` works on · 37 unmodified lines |
| 38 | 38 | individual files, and does not require a kernel configuration. Sometimes it may |
| 39 | 39 | even work with broken code. |
| 40 | 40 | |
| 41 | +Imports |
| 42 | +~~~~~~~ |
| 43 | + |
| 44 | +``rustfmt``, by default, formats imports in a way that is prone to conflicts |
| 45 | +while merging and rebasing, since in some cases it condenses several items into |
| 46 | +the same line. For instance: |
| 47 | + |
| 48 | +.. code-block:: rust |
| 49 | + |
| 50 | + // Do not use this style. |
| 51 | + use crate::{ |
| 52 | + example1, |
| 53 | + example2::{example3, example4, example5}, |
| 54 | + example6, example7, |
| 55 | + example8::example9, |
| 56 | + }; |
| 57 | + |
| 58 | +Instead, the kernel uses a vertical layout that looks like this: |
| 59 | + |
| 60 | +.. code-block:: rust |
| 61 | + |
| 62 | + use crate::{ |
| 63 | + example1, |
| 64 | + example2::{ |
| 65 | + example3, |
| 66 | + example4, |
| 67 | + example5, // |
| 68 | + }, |
| 69 | + example6, |
| 70 | + example7, |
| 71 | + example8::example9, // |
| 72 | + }; |
| 73 | + |
| 74 | +That is, each item goes into its own line, and braces are used as soon as there |
| 75 | +is more than one item in a list. |
| 76 | + |
| 77 | +The trailing empty comment allows to preserve this formatting. Not only that, |
| 78 | +``rustfmt`` will actually reformat imports vertically when the empty comment is |
| 79 | +added. That is, it is possible to easily reformat the original example into the |
| 80 | +expected style by running ``rustfmt`` on an input like: |
| 81 | + |
| 82 | +.. code-block:: rust |
| 83 | + |
| 84 | + // Do not use this style. |
| 85 | + use crate::{ |
| 86 | + example1, |
| 87 | + example2::{example3, example4, example5, // |
| 88 | + }, |
| 89 | + example6, example7, |
| 90 | + example8::example9, // |
| 91 | + }; |
| 92 | + |
| 93 | +The trailing empty comment works for nested imports, as shown above, as well as |
| 94 | +for single item imports -- this can be useful to minimize diffs within patch |
| 95 | +series: |
| 96 | + |
| 97 | +.. code-block:: rust |
| 98 | + |
| 99 | + use crate::{ |
| 100 | + example1, // |
| 101 | + }; |
| 102 | + |
| 103 | +The trailing empty comment works in any of the lines within the braces, but it |
| 104 | +is preferred to keep it in the last item, since it is reminiscent of the |
| 105 | +trailing comma in other formatters. Sometimes it may be simpler to avoid moving |
| 106 | +the comment several times within a patch series due to changes in the list. |
| 107 | + |
| 108 | +There may be cases where exceptions may need to be made, i.e. none of this is |
| 109 | +a hard rule. There is also code that is not migrated to this style yet, but |
| 110 | +please do not introduce code in other styles. |
| 111 | + |
| 112 | +Eventually, the goal is to get ``rustfmt`` to support this formatting style (or |
| 113 | +a similar one) automatically in a stable release without requiring the trailing |
| 114 | +empty comment. Thus, at some point, the goal is to remove those comments. |
| 115 | + |
| 41 | 116 | |
| 42 | 117 | Comments |
| 43 | 118 | -------- |