• z3bra
    link
    fedilink
    3110 months ago

    Tabs for indent, spaces for alignment. This is the way, I can’t believe people are still fighting that ?

    • @[email protected]
      link
      fedilink
      29
      edit-2
      10 months ago

      Anything for indent (barely matters, as long as the editor forces it to stay consistent), and fuck alignment, just put things on a new line.

      • z3bra
        link
        fedilink
        16
        edit-2
        10 months ago
        struct Ident arr = [
        {
        .id
        = 0,
        .name
        = "Bob",
        .pubkey
        = "",
        .privkey
        = ""
        },
        {
        .id
        = 1,
        .name
        = "Alice",
        .pubkey
        = "",
        .privkey
        = ""
        }
        ];
        
        • @[email protected]
          link
          fedilink
          17
          edit-2
          10 months ago

          Not like that, lol

          Just saying, instead of this monstrosity

          CreateOrderRequest(user,
                             productDetails,
                             pricingCalculator,
                             order => order.internalNumber)
          

          Just use

          CreateOrderRequest(
              user,
              ...
          

          Putting the first argument on a separate line.

          Same if you have an if using a bunch of and (one condition per line, first one on a new line instead of same line as the if) and similar situations.

          • @Lmaydev
            link
            810 months ago

            People seem to have a real issue with using new lines and I’ve never quite understod why.

            It feels like a lot of those people are using notepad like applications instead of coding focused ones with collapsible regions etc.

          • z3bra
            link
            fedilink
            6
            edit-2
            10 months ago

            When I talk about alignment it’s not about function arguments, but values, “=” signs and such. You simply cannot use tabs for that because alignment must be fixed and indentation independent:

            CreateOrderRequest(
                user,
                productDetails     => order.detail,
                pricingCalculator  => DEFAULT_CALCULATOR,
                order              => order.internalNumber)
            
            • @[email protected]
              link
              fedilink
              10
              edit-2
              10 months ago

              I normally avoid that too, I find it hurts readability more than helps, plus a proper IDE will separate it with color anyway.

              But yeah, the newline comment doesn’t apply to this.

              • z3bra
                link
                fedilink
                110 months ago

                To each their own indeed. But my rule of thumb is: only use tabs when there’s no other character before it (aka, start of line).

                • Nate Cox
                  link
                  English
                  110 months ago

                  The emacs wiki agrees and has the correct take on this: https://www.emacswiki.org/emacs/SmartTabs

                  It seems like this basic guideline, tabs to indent and spaces to align, solves the problem for everyone. It doesn’t matter what your tab width is, it’ll look “right” regardless.

            • PHLAK
              link
              fedilink
              English
              610 months ago

              This kind of “manual” alignment should be avoided for many reasons including the fact that adding/removing/changing of one parameter here may force you to modify multiple lines which on it’s own is annoying but this will also show up in the diff during review making it harder to grep what was actually changed.

              • z3bra
                link
                fedilink
                210 months ago

                I personally favor code readability over patch readability. But I reckon this is a matter of preference so I can understand how you might not like that.

            • @[email protected]
              link
              fedilink
              410 months ago

              Yeah I agree I don’t find alignment very useful. It’s more work for dubious benefit, and god forbid you change one of the lines.

      • @[email protected]
        link
        fedilink
        010 months ago

        seconded on not aligning things. its the whole source of the problem in the first place and doesnt even serve a purpose

        • @[email protected]
          link
          fedilink
          110 months ago

          It does help with reducing thrashing between edits in git diffs. Or rather, opinionated autoformatters do, which is the only reason I bother with alignment.

    • @GuybrushThreepwo0d
      link
      910 months ago

      I used to think this way, at least when writing C++. But it’s objectively harder to do and convince other people to follow, especially if they can’t be bothered to change their environment to display tabs and spaces differently. It’s a losing battle so now I just do spaces when working with other people

      • @[email protected]
        link
        fedilink
        -110 months ago

        Always do spaces, because you can never trust how someone else has their tab configured.

        How is this even a debate anymore. I thought we all agreed on this years ago.

        • Pyro
          link
          fedilink
          English
          310 months ago

          you can never trust how someone else has their tab configured

          Why on earth would I care how someone else has their editor configured? It’s none of my business, and none of yours either.

          • @[email protected]
            link
            fedilink
            2
            edit-2
            10 months ago

            Because other people are fucking morons and their editor doesn’t have visible whitespace enabled - or it does but they don’t give a shit.

            Therefore these fucking morons have anywhere between 2 and 8 spaces-per-tab configured and will happily mash the tab key however many times is convenient for them to align their code or comments because they don’t understand shit about fuck when it comes to alignement (or they don’t care). Now I open their file and everything is predictably misaligned. Spaces and tabs are mixed from one line to the next, and in particularly egregious cases no tab width I can locally set on the file will make it readable because multiple different morons used different tab widths to align with tabs - sometimes within the same goddamn function or comment.

            Have you ever tried to read an important technical diagram in ASCII art aligned with tabs by different people with different IDE settings? Because I have. Emphasis on tried.

            • Pyro
              link
              fedilink
              English
              210 months ago

              Spaces and tabs are mixed from one line to the next

              This is a solved problem: Enforce linting before committing using something like Git Hooks / Husky.

              Have you ever tried to read an important technical diagram in ASCII art aligned with tabs by different people with different IDE settings?

              No, because we live in the present and use proper tools for diagrams. SVG diagrams tend to be common nowadays. I’m aware you can’t read them raw, but realistically the intersection between people who need to read important technical diagrams and people who don’t have access to a web browser is vanishingly small (dare I say nonexistent?)

              • @[email protected]
                link
                fedilink
                110 months ago

                Tell me you develop with modern languages without telling me you develop with modern languages.

                Try linting perl, or bash.

                Like yeah if you work on a modern JS/Python/C# project, whatever, whitespace is going to be autoformatted, so the tabs vs spaces debate does not matter AT ALL.

                • Pyro
                  link
                  fedilink
                  English
                  210 months ago

                  Tell me you develop with modern languages without telling me you develop with modern languages.

                  You say this like it’s a bad thing?

                  Try linting perl, or bash.

                  If you’re already writing Perl/Bash scripts then it would probably not take you long to write a git hook to check the beginning of each line of source to check if there’s a space or a tab character and preventing the commit if the wrong one is found. Crude and far from perfect, but still better than nothing.

                  if you work on a modern JS/Python/C# project, whatever, whitespace is going to be autoformatted, so the tabs vs spaces debate does not matter AT ALL.

                  It does though. If you read the original article then you’d know that the advantage of tabs is that everyone can choose exactly how deep their tabstops are, which is an objective benefit over spaces.

                  • @[email protected]
                    link
                    fedilink
                    English
                    1
                    edit-2
                    10 months ago

                    It’s not wrong to work with modern languages, but don’t pretend that you have the answer to the debate if you don’t work in a field where it applies.

                    Linting bash/perl is a TERRIBLE idea. Consider the following, extremely common piece of code (perl has equivalent syntax as well):

                    #!/bin/bash
                    
                    cat > testfile < < EOF
                        test1
                    	test2
                    EOF
                    

                    (lol lemmy bug found, can’t write the actual “left angled bracket - left angled bracket” syntax, it somehow truncates the comment)

                    OTOH if you use a modern auto-formattable language, then you can auto-format to tabs with a git hook or IDE plugin (and back for committing) if you want, so the debate doesn’t matter in that case. It goes both ways.

    • AnyOldName3
      link
      fedilink
      610 months ago

      I’ve yet to find tooling that supports this. Clang format has a setting that looks like it does it, but actually does something else. If I have to press the spacebar a bunch of times each time I add an argument to a function, that’s a pain, and it’s a bigger pain to convince the people I’m working with that that pain’s less bad than using spaces everywhere and having the IDE deal with it.

      Until the people making editors and auto formatters acknowledge that the obvious most sensible whitespace style is even a thing, I’m forced to do something else and be really grumpy about it.

      • z3bra
        link
        fedilink
        110 months ago

        I understand your point of view. Personally I either copy the previous line and replace the arguments there, or insert X number of space using the repetition feature of my editor. It also has a feature that will align multiple cursors together with the “farthest” one using space, which is a killer feature for me! (See this presentation video @1:40).

    • @zygo_histo_morpheus
      link
      510 months ago

      It’s hard to do this consistently (especially in a team) because people might (and statistically in a large enough project, will) use the tab key for alignment since it’s faster than pressing space, or just be confused about what whitespace is tabs and what is space. Just using space everywhere is idiot proof and requires no work to micromanage. The only way to use tabs is to not align at all.

      • z3bra
        link
        fedilink
        110 months ago

        I agree that it’s hard, but not impossible. This usually boils down to how Nazi people are when merging code. In a corporate environment, nobody gives a damn so yeah you gotta use whatever you want because there are already different indentation systems within the same file anyway :)

        But hey, you gotta live by the changes you want to see happen, so I personally put a lot of effort in formatting my code regardless.

    • @[email protected]
      link
      fedilink
      310 months ago

      Then you lose the benefit of tabs: you can’t adjust the tab width without destroying alignment. So you end up with a confusing mix of characters for no benefit.

      Mixing them is the worst option.

      • @[email protected]
        link
        fedilink
        English
        5
        edit-2
        10 months ago

        The opposite is true, though. If you use tabs for indentation and spaces for alignment, you can adjust the tab width without destroying alignment. That’s the big benefit of the tabs-for-indentation-spaces-for-alignment mix.

        You can’t do that with only tab characters, you can’t even align stuff with tabs because it has variable width.

      • z3bra
        link
        fedilink
        310 months ago

        You might not understand how to do it properly so here’s the idea:

        Tabs will let you reach the indentation level of the current block, then from here, you’ll use spaces to align stuff property. Here’s an example, where >••• are tabs (I’m exaggerating alignment for the sake of the example) :

        >•••if (condition1 == true
        >••• || condition2 != false)
        >•••{
        >•••>•••struct ident people[] = [
        >•••>•••>•••{
        >•••>•••>•••>•••.name   = "bob",
        >•••>•••>•••>•••.pubkey = "value1",
        >•••>•••>•••},
        >•••>•••>•••{
        >•••>•••>•••>•••.name   = "alice",
        >•••>•••>•••>•••.pubkey = "value2",
        >•••>•••>•••}
        >•••>•••];
        >•••>•••secureConnection(people[0].name, people[0].pubkey,
        >•••>•••                 people[1].name, people[1].pubkey,
        >•••>•••                 CRYPTO_ALGO_DEFAULT);
        >•••}
        

        As you can see, everything will stay correctly aligned as long as it’s within the same block.

      • JackbyDev
        link
        English
        310 months ago

        You’re confusing using tabs for indentation and spaces for alignment with using tabs and spaces for indentation. This means each line starts with tabs. Next you optionally have spaces for alignment with previous lines. Then you have content (like code or comments). Because you never have a tab following a space the alignment is never destroyed by adjusting how wide a tabstop is.

          • JackbyDev
            link
            English
            310 months ago

            That example is using tabs for both indentation and alignment. The article you linked even says not using tabs for alignment is a solution.

            • Do not use tabs for alignment. In such case given example should look like:
            fun foo x =
            --->let val abs = if x > 0
            --->              then x
            --->              else -x
            --->in
            --->--->(* ... *)
            --->end
            
              • JackbyDev
                link
                English
                110 months ago

                Many styles are difficult to maintain, I’m not saying it is or isn’t. I’m saying that using only spaces for alignment will not let your alignment get messed up with various tabstops settings.