Comments (8)
Relevant:
https://eslint.org/docs/rules/lines-between-class-members
https://eslint.org/docs/rules/padded-blocks
Might be of some help, since they both have fixes.
from dprint-plugin-typescript.
Is this something you still consider? Is there anything we can help with to move it forward?
I think it would be a great way to attract many new users (like myself) who can't stand how prettier works when it comes to blank lines, but still want to use some formatter. The problem is especially visible when you use decorators, but it's not just about that. Here is a relevant prettier issue: prettier/prettier#4870, it's funny how they suggest using eslint instead if this bothers you, while the TS eslint version has completely broken indent
rule, and they point in the very opposite direction - don't use our broken indent rule, use a formatter instead.
from dprint-plugin-typescript.
I love coming to an issue and being greeting with my own comment 😄
Experimenting with dprint
again; would love to see this option. Here's a list of my mental rules for formatting -- it might help decide on which options to add.
- Obligatory exactly two blank lines after all imports. Allow at most one blank line between groups of imports.
import a from 'a'
import b from 'b'
import x from './x'
import y from './y'
console.log()
- Inside blocks, allow at most one blank line between things.
function () {
foo()
bar()
}
- If the block has at least one empty line, then padding empty lines are necessary.
function () {
// first this
foo()
bar()
// then this
foo()
bar()
}
That way, a simple class could be written as
class Foo {
bar: string
baz: number
}
but a more complex one would, due to blank lines between properties, force the padded lines.
class Foo {
/** docs */
bar: string
/** docs */
baz: string
}
Bonus points: anything multi-lined in a class forces blank lines around it (which in turn forces the padding.
I love the topic of formatting code. I probably sound crazy to some with the rules I follow, and yet I had to ask myself really hard to define how I format code manually (and subconsciously) to derive all the rules up there 🤔
from dprint-plugin-typescript.
I am currently experimenting with dprint
, and it appears to be superior to many options I have tried so far, such as eslint
, prettier
, oxc
, and biome
. The "AST configuration" feature is particularly impressive. dprint
is almost perfect and lacks only a few options, and this is one of them.
I largely agree with the proposal made by @lazarljubenovic in #7 (comment). However, I'm not entirely convinced by the two-blank lines part.
Additionally, I would like to suggest an option to preserve single empty lines and remove only redundant ones. With the AST configuration, this enhancement would make dprint
even more powerful.
from dprint-plugin-typescript.
@lazarljubenovic for the two-blank lines part you are, probably, interested in #394
from dprint-plugin-typescript.
Thanks @lazarljubenovic! I appreciate the "prior art" in order to get some ideas 🙂
Right now only member spacing is implemented for enum members. The options are "maintain", "newline", and "blankline" (I believe). I could add this to other nodes and make a general setting.
Also, I can add a "padding blocks" option. I'm just going to get dprint/dprint#54 merged before doing any of this though.
from dprint-plugin-typescript.
@dsherret Any update on this?
from dprint-plugin-typescript.
@dsherret after thinking about the two blank lines proposed earlier, I have come to the conclusion that the best option would be something like 'maintain' | number
, where the number
represents the count of line breaks. 0
would mean no line break, 1
would represent one line break, and so on. Together with the AST configuration, this would be quite powerful.
from dprint-plugin-typescript.
Related Issues (20)
- Support configuration for inner spacing in template literals
- Enforce multiline import when importing more than one thing HOT 1
- add option to format content of comments as if it was markdown
- spaceAround fails for arrow functions inside parens HOT 1
- Support Stroustrup brace stlyes HOT 3
- Support catchStatement.spaceAfterCatchKeyword
- Lexicographical sorting of object keys
- Inappropriately removes type assertion in accessor definition
- Code inside `<pre>` is not formatted HOT 1
- Feature Request: Consistent formatting of multiline eslint-disable descriptions
- Allow different quoteStyle inside of JSX HOT 1
- Parse error when encountering JSDoc style types in declaration files HOT 3
- constructorType.spaceAfterNewKeyword ignores constructors within object literals HOT 2
- eslint sort-import vs dprint sort imports HOT 3
- Expand `forceMultiLineSpecifiers` to format imports of a single named import as a single line
- Format breaks file with merge conflict HOT 2
- Support configuration for space around equal sign in JSX props HOT 1
- Option `jsxExpressionContainer.spaceSurroundingExpression` adds spaces between multiple braces
- Q: Plugin Location HOT 2
- Consider renaming `arrowFunction.useParentheses: "always"` HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from dprint-plugin-typescript.