|
453 | 453 | <span id="448">448</span>
|
454 | 454 | <span id="449">449</span>
|
455 | 455 | <span id="450">450</span>
|
| 456 | +<span id="451">451</span> |
| 457 | +<span id="452">452</span> |
| 458 | +<span id="453">453</span> |
| 459 | +<span id="454">454</span> |
| 460 | +<span id="455">455</span> |
| 461 | +<span id="456">456</span> |
| 462 | +<span id="457">457</span> |
| 463 | +<span id="458">458</span> |
| 464 | +<span id="459">459</span> |
| 465 | +<span id="460">460</span> |
| 466 | +<span id="461">461</span> |
| 467 | +<span id="462">462</span> |
| 468 | +<span id="463">463</span> |
| 469 | +<span id="464">464</span> |
| 470 | +<span id="465">465</span> |
| 471 | +<span id="466">466</span> |
| 472 | +<span id="467">467</span> |
| 473 | +<span id="468">468</span> |
| 474 | +<span id="469">469</span> |
| 475 | +<span id="470">470</span> |
| 476 | +<span id="471">471</span> |
456 | 477 | </pre><pre class="rust"><code><span class="comment">// This file is part of the uutils coreutils package.</span>
|
457 | 478 | <span class="comment">//</span>
|
458 | 479 | <span class="comment">// (c) Virgile Andreani <virgile.andreani@anbuco.fr></span>
|
|
496 | 517 |
|
497 | 518 | <span class="doccomment">/// The mode to use when replacing tabs beyond the last one specified in</span>
|
498 | 519 | <span class="doccomment">/// the `--tabs` argument.</span>
|
| 520 | +<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">PartialEq</span>)]</span> |
499 | 521 | <span class="kw">enum</span> <span class="ident">RemainingMode</span> {
|
500 | 522 | <span class="prelude-val">None</span>,
|
501 | 523 | <span class="ident">Slash</span>,
|
|
520 | 542 | <span class="kw">enum</span> <span class="ident">ParseError</span> {
|
521 | 543 | <span class="ident">InvalidCharacter</span>(<span class="ident">String</span>),
|
522 | 544 | <span class="ident">SpecifierNotAtStartOfNumber</span>(<span class="ident">String</span>, <span class="ident">String</span>),
|
| 545 | + <span class="ident">SpecifierOnlyAllowedWithLastValue</span>(<span class="ident">String</span>), |
523 | 546 | <span class="ident">TabSizeCannotBeZero</span>,
|
524 | 547 | <span class="ident">TabSizeTooLarge</span>(<span class="ident">String</span>),
|
525 | 548 | <span class="ident">TabSizesMustBeAscending</span>,
|
|
540 | 563 | <span class="ident">specifier</span>.<span class="ident">quote</span>(),
|
541 | 564 | <span class="ident">s</span>.<span class="ident">quote</span>(),
|
542 | 565 | ),
|
| 566 | + <span class="ident"><span class="self">Self</span>::SpecifierOnlyAllowedWithLastValue</span>(<span class="ident">specifier</span>) => <span class="macro">write!</span>( |
| 567 | + <span class="ident">f</span>, |
| 568 | + <span class="string">"{} specifier only allowed with the last value"</span>, |
| 569 | + <span class="ident">specifier</span>.<span class="ident">quote</span>() |
| 570 | + ), |
543 | 571 | <span class="ident"><span class="self">Self</span>::TabSizeCannotBeZero</span> => <span class="macro">write!</span>(<span class="ident">f</span>, <span class="string">"tab size cannot be 0"</span>),
|
544 | 572 | <span class="ident"><span class="self">Self</span>::TabSizeTooLarge</span>(<span class="ident">s</span>) => <span class="macro">write!</span>(<span class="ident">f</span>, <span class="string">"tab stop is too large {}"</span>, <span class="ident">s</span>.<span class="ident">quote</span>()),
|
545 | 573 | <span class="ident"><span class="self">Self</span>::TabSizesMustBeAscending</span> => <span class="macro">write!</span>(<span class="ident">f</span>, <span class="string">"tab sizes must be ascending"</span>),
|
|
567 | 595 |
|
568 | 596 | <span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">nums</span> <span class="op">=</span> <span class="macro">vec!</span>[];
|
569 | 597 | <span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">remaining_mode</span> <span class="op">=</span> <span class="ident">RemainingMode::None</span>;
|
| 598 | + <span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">is_specifier_already_used</span> <span class="op">=</span> <span class="bool-val">false</span>; |
570 | 599 | <span class="kw">for</span> <span class="ident">word</span> <span class="kw">in</span> <span class="ident">s</span>.<span class="ident">split</span>(<span class="ident">is_space_or_comma</span>) {
|
571 | 600 | <span class="kw">let</span> <span class="ident">bytes</span> <span class="op">=</span> <span class="ident">word</span>.<span class="ident">as_bytes</span>();
|
572 | 601 | <span class="kw">for</span> <span class="ident">i</span> <span class="kw">in</span> <span class="number">0</span>..<span class="ident">bytes</span>.<span class="ident">len</span>() {
|
|
594 | 623 | }
|
595 | 624 | }
|
596 | 625 |
|
| 626 | + <span class="kw">if</span> <span class="ident">is_specifier_already_used</span> { |
| 627 | + <span class="kw">let</span> <span class="ident">specifier</span> <span class="op">=</span> <span class="kw">if</span> <span class="ident">remaining_mode</span> <span class="op">==</span> <span class="ident">RemainingMode::Slash</span> { |
| 628 | + <span class="string">"/"</span>.<span class="ident">to_string</span>() |
| 629 | + } <span class="kw">else</span> { |
| 630 | + <span class="string">"+"</span>.<span class="ident">to_string</span>() |
| 631 | + }; |
| 632 | + <span class="kw">return</span> <span class="prelude-val">Err</span>(<span class="ident">ParseError::SpecifierOnlyAllowedWithLastValue</span>( |
| 633 | + <span class="ident">specifier</span>, |
| 634 | + )); |
| 635 | + } <span class="kw">else</span> <span class="kw">if</span> <span class="ident">remaining_mode</span> <span class="op">!</span><span class="op">=</span> <span class="ident">RemainingMode::None</span> { |
| 636 | + <span class="ident">is_specifier_already_used</span> <span class="op">=</span> <span class="bool-val">true</span>; |
| 637 | + } |
| 638 | + |
597 | 639 | <span class="comment">// Append this tab stop to the list of all tabstops.</span>
|
598 | 640 | <span class="ident">nums</span>.<span class="ident">push</span>(<span class="ident">num</span>);
|
599 | 641 | <span class="kw">break</span>;
|
|
0 commit comments