Skip to content

Commit a586c30

Browse files
authored
feat: use Unicode Standard Annex #11 rules for line width calculation (#456)
1 parent 521128c commit a586c30

File tree

6 files changed

+58
-22
lines changed

6 files changed

+58
-22
lines changed

Cargo.lock

Lines changed: 17 additions & 16 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ tracing = ["dprint-core/tracing"]
2727
[dependencies]
2828
anyhow = "1.0.64"
2929
deno_ast = { version = "0.21.0", features = ["view"] }
30-
dprint-core = { version = "0.59.0", features = ["formatting"] }
30+
dprint-core = { version = "0.60.0", features = ["formatting"] }
3131
rustc-hash = "1.1.0"
3232
serde = { version = "1.0.144", features = ["derive"] }
3333
serde_json = { version = "1.0", optional = true }

dprint.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@
1111
"**/target"
1212
],
1313
"plugins": [
14-
"https://plugins.dprint.dev/typescript-0.71.2.wasm",
15-
"https://plugins.dprint.dev/json-0.15.5.wasm",
16-
"https://plugins.dprint.dev/markdown-0.14.0.wasm",
14+
"https://plugins.dprint.dev/typescript-0.78.0.wasm",
15+
"https://plugins.dprint.dev/json-0.16.0.wasm",
16+
"https://plugins.dprint.dev/markdown-0.14.3.wasm",
1717
"https://plugins.dprint.dev/toml-0.5.4.wasm",
18-
"https://plugins.dprint.dev/exec-0.3.1.json@9351b67ec7a6b58a69201c2834cba38cb3d191080aefc6422fb1320f03c8fc4d"
18+
"https://plugins.dprint.dev/exec-0.3.2.json@8efbbb3fcfbdf84142c3c438fbdeaf1637152a020032127c837b2b14e23261c3"
1919
]
2020
}

src/generation/generate.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3902,7 +3902,10 @@ fn gen_string_literal<'a>(node: &'a Str, context: &mut Context<'a>) -> PrintItem
39023902

39033903
fn get_string_value(node: &Str, context: &mut Context) -> String {
39043904
let raw_string_text = node.text_fast(context.program);
3905-
let string_value = raw_string_text.chars().skip(1).take(raw_string_text.chars().count() - 2).collect::<String>();
3905+
if raw_string_text.len() <= 2 {
3906+
return String::new();
3907+
}
3908+
let string_value = &raw_string_text[1..raw_string_text.len() - 1];
39063909
let is_double_quote = raw_string_text.starts_with('"');
39073910

39083911
return match is_double_quote {

tests/specs/issues/issue0452.txt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
~~ deno: true ~~
2+
== should calculate line width according to unicode standard annex #11 rules ==
3+
const a = () => (
4+
<div>
5+
대충 한국어로 아무 말이나 적고 있습니다. '아무말'은 표준국어대사전에 등재되지 않은 단어이므로 '아무 말'로 띄어 씁니다. 아무
6+
말일까요? 누군가에게는 적절한 더미 텍스트일 수도 있고 누군가에게는 그냥 지루한 문단일 수 있습니다. 문장이 긴데 보여질 폭은 좁을 때
7+
어디에서 줄바꿈을 해야 할지는 중요한 이슈가 되어 왔습니다. 한국어는 띄어쓰기가 자주 등장하는 만큼 단어 사이를 끊는 것을 싫어하지만
8+
끊는 부분에 타우마타와카탕이항아코아우아우오타마테아투리푸카카피키마웅아호로누쿠포카이웨누아키타나타후 같은 단어가 존재하면 엄청난 공백이
9+
등장하게 됩니다. 직접 줄바꿈을 삽입하자는 의견도 나오지만 다양한 스크린 폭에 대응되지 못하는 것을 탐탁치 않아 하는 사람도 있습니다.
10+
대충 한국어로 아무 말이나 적었습니다.
11+
</div>
12+
);
13+
14+
[expect]
15+
const a = () => (
16+
<div>
17+
대충 한국어로 아무 말이나 적고 있습니다. '아무말'은 표준국어대사전에
18+
등재되지 않은 단어이므로 '아무 말'로 띄어 씁니다. 아무 말일까요?
19+
누군가에게는 적절한 더미 텍스트일 수도 있고 누군가에게는 그냥 지루한 문단일
20+
수 있습니다. 문장이 긴데 보여질 폭은 좁을 때 어디에서 줄바꿈을 해야 할지는
21+
중요한 이슈가 되어 왔습니다. 한국어는 띄어쓰기가 자주 등장하는 만큼 단어
22+
사이를 끊는 것을 싫어하지만 끊는 부분에
23+
타우마타와카탕이항아코아우아우오타마테아투리푸카카피키마웅아호로누쿠포카이웨누아키타나타후
24+
같은 단어가 존재하면 엄청난 공백이 등장하게 됩니다. 직접 줄바꿈을 삽입하자는
25+
의견도 나오지만 다양한 스크린 폭에 대응되지 못하는 것을 탐탁치 않아 하는
26+
사람도 있습니다. 대충 한국어로 아무 말이나 적었습니다.
27+
</div>
28+
);

tests/specs/literals/StringLiteral/StringLiteral_All.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
== should not replace escaped character with actual character ==
22
const t = "\t" ;
3+
const u = "";
4+
const v = "1";
35

46
[expect]
57
const t = "\t";
8+
const u = "";
9+
const v = "1";
610

711
== should not replace actual character with escaped character ==
812
const t = " ";

0 commit comments

Comments
 (0)