Git Product home page Git Product logo

Comments (9)

bevacqua avatar bevacqua commented on May 3, 2024 34

I don't see generating a different program as an inherent problem, but @jlongster probably has a better idea of where he wants prettier to head.

Regarding ES5, you could just make it an option instead of singleQuotes, have a quotes option with one of [`backtick`, `single`, `double`].

I suppose this tool will only ever support ES6+ due to complexity (if not, do they turn generators into plain functions with switch statements, etc? leads to ugly code)

from prettier.

vjeux avatar vjeux commented on May 3, 2024 12

We are unlikely going to support this. Closing this in order to clean up the issue list.

from prettier.

lydell avatar lydell commented on May 3, 2024 11

Also, this can be achieved with eslint --fix using the quotes rule.

from prettier.

jlongster avatar jlongster commented on May 3, 2024 5

The good thing is that if you write with template literal strings, we will output template literal strings. This formatter is not so opinionated that is overwrites everything into a single authoritative style. It never converts AST nodes into different types, etc.

I don't know exactly where this will head, but I do know that I want to take it slowly. I think it would be surprising to a lot of people if they typed double-quotes and they were automatically converted into a template literal. For now, I'd prefer to keep whatever the original string type was. (We do force either double or single quotes, naturally, because those compile to the same AST node type so the user can choose what to output because it's ambiguous what we should do.)

If there are any problems with template literals, let me know. Simply having the formatter is probably divisive enough so I don't want to make it any more opinionated than it has to be. I think things like this could be aided by other tools. I'm open to making it easier to integrate with other tools that can transform the AST (i.e. pass the AST elsewhere, maybe babel plugins).

from prettier.

bakkot avatar bakkot commented on May 3, 2024 3

Syntactically ES5 is a subset of ES2015 (modulo some obscure cases like the interpretation of let[a]), so if it supports ES2015+ it supports ES5. But I agree that this would be solved by providing it as an option.

I maintain that would be bad, though. Template literals aren't strings: function f(){`use strict`;} is not a strict function, import `b`; is not valid syntax, etc.

from prettier.

bevacqua avatar bevacqua commented on May 3, 2024 2

That's never a problem in actual programs, particularly if you're running build tools like this one, that can and will shout at you for writing incorrect programs.

In practice, using template literals by default means you can smoothly add interpolated expressions, something that is a hassle if you're defaulting to single or double quoted strings because of all the back and forth (remove quotes, add backticks, add interpolation, repeat in reverse if you remove all interpolations, etc).

Plus if you're already using template literals in some places, then defaulting to them is no different than using one, in terms of "but import `b` is invalid" and similar arguments.

from prettier.

bakkot avatar bakkot commented on May 3, 2024 1

That would generate a different program, even if it's semantically the same.

Also, it would make this project unusable for people writing ES5.

from prettier.

bnjmnt4n avatar bnjmnt4n commented on May 3, 2024

IMO, this doesn't belong in Prettier. Changes like these will modify the AST, and they probably should be done in a separate step or as part of a Babel plugin or JS codemod, instead of in Prettier which is simply a JavaScript formatter which aims to pretty-print the current AST.

from prettier.

jasonkuhrt avatar jasonkuhrt commented on May 3, 2024

FYI It looks like dprint is going to support this dprint/dprint-plugin-typescript#345.

from prettier.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.