[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 1/2] code style: Format ns16550 driver
On 19.02.2025 14:52, Oleksandr Andrushchenko wrote: > On 19.02.25 15:18, Jan Beulich wrote: >> On 19.02.2025 13:39, Oleksandr Andrushchenko wrote: >>> On 17.02.25 12:20, Jan Beulich wrote: >>>> On 16.02.2025 11:21, Oleksandr Andrushchenko wrote: >>>>> @@ -248,8 +249,9 @@ static int cf_check ns16550_tx_ready(struct >>>>> serial_port *port) >>>>> if ( ns16550_ioport_invalid(uart) ) >>>>> return -EIO; >>>>> >>>>> - return ( (ns_read_reg(uart, UART_LSR) & >>>>> - uart->lsr_mask ) == uart->lsr_mask ) ? uart->fifo_size : 0; >>>>> + return ((ns_read_reg(uart, UART_LSR) & uart->lsr_mask) == >>>>> uart->lsr_mask) >>>>> + ? uart->fifo_size >>>>> + : 0; >>>> Indentation of the ? and : lines is clearly wrong here? What is the tool >>>> doing? >>> There are number of options that have influence on this formatting: >>> AllowShortBlocksOnASingleLine [4] >>> BreakBeforeTernaryOperators [5] >>> AlignOperands [6] >>> >>> I was not able to tweak these options to have the previous form. >> Right, sticking to the original form (with just the stray blanks zapped) >> would of course be best. Yet again - the tool is doing more transformations >> despite there not being any need. If, however, it does so, then one of my >> expectations would be that the ? and : are properly indented: >> >> return ((ns_read_reg(uart, UART_LSR) & uart->lsr_mask) == >> uart->lsr_mask) >> ? uart->fifo_size >> : 0; > This only differs from what the tool is doing by the fact it applies > the following rule: *IndentWidth: 4*, e.g. it has indented your construct > by 4 spaces, see [1]. Which, IMO, is acceptable change. I don't view this as acceptable. It falls in the same class then as ns_write_reg(uart, UART_FCR, UART_FCR_ENABLE | UART_FCR_CLRX | UART_FCR_CLTX | UART_FCR_TRG14); that I also commented on in my initial reply. >> or >> >> return ((ns_read_reg(uart, UART_LSR) & uart->lsr_mask) == >> uart->lsr_mask) >> ? uart->fifo_size : 0; >> >> or >> >> return ((ns_read_reg(uart, UART_LSR) & uart->lsr_mask) == uart->lsr_mask >> ? uart->fifo_size >> : 0); >> >> (not going to list more variants which are all okay). >> >> In any event, a fundamental requirement of mine is that such a tool would >> only apply adjustments when and where style is actively violated. I.e. in >> the case here: >> >> return ((ns_read_reg(uart, UART_LSR) & >> uart->lsr_mask) == uart->lsr_mask) ? uart->fifo_size : 0; >> >> That's not overly neat wrapping, but in line with our style. If the other >> form was demanded going forward, I'd be curious how you'd verbally >> describe the requirement in ./CODING_STYLE. > I believe this can be stated around the fact that we need to indent, > e.g. apply the same rule as for other constructs already in use Except here the tool didn't merely adjust indentation, but moved tokens between lines. >>>>> @@ -275,9 +277,10 @@ static void pci_serial_early_init(struct ns16550 >>>>> *uart) >>>>> #ifdef NS16550_PCI >>>>> if ( uart->bar && uart->io_base >= 0x10000 ) >>>>> { >>>>> - pci_conf_write16(PCI_SBDF(0, uart->ps_bdf[0], uart->ps_bdf[1], >>>>> - uart->ps_bdf[2]), >>>>> - PCI_COMMAND, PCI_COMMAND_MEMORY); >>>>> + pci_conf_write16( >>>>> + PCI_SBDF(0, uart->ps_bdf[0], uart->ps_bdf[1], >>>>> uart->ps_bdf[2]), >>>>> + PCI_COMMAND, >>>>> + PCI_COMMAND_MEMORY); >>>>> return; >>>>> } >>>> Hmm, transforming a well-formed block into another well-formed one. No >>>> gain? (Same again further down.) >>> No, gain from human point of view >>> But there is a gain that it is now formatted automatically. >> See above: I'd first like to see a written, textual description for all these >> requirements. After all it needs to be possible for a human to write code >> that the tool then wouldn't try to re-arrange. Which in turn requires that >> the restrictions / constraints on the layout are spelled out. > Agree, the existing coding style document will require some extension: > at least clarifications and addition of the rules not described yet. >> I'm not looking >> forward to pass all my patches through such a tool. I can write style- >> conforming code pretty well, with - of course - occasional oversights, > Which the tool will allow not to have for less accurate developers I fear I don't understand this reply of yours. >> right >> now. And that in multiple projects all with different styles. I expect to be >> in the position to do so also going forward. This, imo, requires that there >> be left some room for variations. Which in turn requires that the tool would >> leave alone anything that is not in conflict with the written down or defacto >> style. > Not sure it is possible with any tool at all: it just makes the changes > without distinguishing what can be skipped or not even if it does not > violate the rules. It will always seek to improve or "improve" the > code Which by now I view as the core problem. >>>>> @@ -1706,7 +1704,7 @@ static void __init ns16550_parse_port_config( >>>>> if ( !parse_namevalue_pairs(str, uart) ) >>>>> return; >>>>> >>>>> - config_parsed: >>>>> +config_parsed: >>>> This is a no-go - ./CODING_STYLE specifically says why this isn't >>>> appropriate. >>> Yes, it can't formatted as we wish. This is controlled with >>> IndentGotoLabels [10] >>> and is a binary option, which leaves no means to disable it as both true and >>> false will re-format the code >>> >>> true:false: >>> intf(){vs.intf(){ >>> if(foo()){if(foo()){ >>> label1:label1: >>> bar();bar(); >>> }} >>> label2:label2: >>> return1;return1; >>> }} >> If there was some indentation meant to be in that blob, it was all lost, >> I'm afraid. > Yes, sorry about that. The sample I was trying to put can be found at [2] Funny, even with the setting "true" label2 there is unindented. We demand that all labels be indented, even when - contextually - at function scope. (Nor do we demand that labels be indented according to their - contextual - scope.) Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |