Skip to content

Commit 2127578

Browse files
authored
Merge pull request #77 from rycont/no-newline-in-string
Fix: raise error when newline in string
2 parents be4641b + 9b62f88 commit 2127578

File tree

9 files changed

+52
-13
lines changed

9 files changed

+52
-13
lines changed

core/deno.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@
66
},
77
"name": "@dalbit-yaksok/core",
88
"exports": "./mod.ts",
9-
"version": "0.2.0-RC.9"
9+
"version": "0.2.0"
1010
}

core/error/prepare.ts

+12
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,18 @@ export class UnexpectedCharError extends YaksokError<UnexpectedCharErrorResource
7676
}
7777
}
7878

79+
export class UnexpectedNewlineError extends UnexpectedCharError {
80+
constructor(props: { parts: string; position?: Position }) {
81+
super({
82+
resource: {
83+
char: '줄바꿈',
84+
parts: props.parts,
85+
},
86+
})
87+
this.message = `${bold(blue(props.parts))}엔 줄바꿈을 사용할 수 없어요.`
88+
}
89+
}
90+
7991
export class UnexpectedEndOfCodeError extends YaksokError {
8092
constructor(props: {
8193
resource?: {

core/prepare/tokenize/index.ts

+10
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { NotAcceptableSignal } from './signal.ts'
22
import { RULES } from './rules.ts'
33

44
import { TOKEN_TYPE, type Token } from './token.ts'
5+
import { YaksokError } from '../../error/common.ts'
56

67
class Tokenizer {
78
private tokens: Token[] = []
@@ -72,6 +73,15 @@ class Tokenizer {
7273
if (e instanceof NotAcceptableSignal) {
7374
continue
7475
}
76+
77+
if (e instanceof YaksokError && !e.tokens) {
78+
e.position = {
79+
column: columnCheckpoint,
80+
line: lineCheckpoint,
81+
}
82+
}
83+
84+
throw e
7585
}
7686
}
7787

core/prepare/tokenize/rules.ts

+7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { NotAcceptableSignal } from './signal.ts'
22
import { Token, TOKEN_TYPE } from './token.ts'
3+
import { UnexpectedNewlineError } from '../../error/prepare.ts'
34

45
const OPERATORS = [
56
'+',
@@ -246,6 +247,12 @@ export const RULES: {
246247
return value
247248
}
248249

250+
if (view() === '\n') {
251+
throw new UnexpectedNewlineError({
252+
parts: '문자열',
253+
})
254+
}
255+
249256
value += shift()!
250257
}
251258

deno.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
"test",
2323
"monaco-language-provider"
2424
],
25-
"version": "0.2.0-RC.9",
25+
"version": "0.2.0",
2626
"tasks": {
2727
"apply-version": "deno run --allow-read --allow-write apply-version.ts",
2828
"publish": "deno task --recursive test && deno publish --allow-dirty"

monaco-language-provider/deno.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@
44
},
55
"name": "@dalbit-yaksok/monaco-language-provider",
66
"exports": "./mod.ts",
7-
"version": "0.2.0-RC.9"
7+
"version": "0.2.0"
88
}

quickjs/deno.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@
99
"check-deploy": "deno publish --dry-run --allow-dirty",
1010
"test": "deno test --quiet --allow-net --allow-read --parallel & deno lint & deno task check-deploy"
1111
},
12-
"version": "0.2.0-RC.9"
12+
"version": "0.2.0"
1313
}

runtest.ts

+3-8
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,9 @@ import { yaksok } from '@dalbit-yaksok/core'
88

99
await yaksok(
1010
`
11-
약속, 물어보기
12-
결과: "성공"
13-
14-
약속, (질문) 물어보기
15-
결과: "이건 아님"
16-
17-
(물어보기) + 물어보기 * 3 보여주기
18-
("뭐라도" 물어보기) + ("뭐라도" 물어보기) * 3 보여주기
11+
결과: "줄
12+
바꿈이
13+
나왔어요"
1914
`,
2015
// {
2116
// runFFI(runtime, bodyCode, args) {

test/errors/unexpected-eol.test.ts

+16-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import { assertIsError } from 'assert'
22
import { yaksok } from '../../core/mod.ts'
3-
import { UnexpectedEndOfCodeError } from '../../core/error/index.ts'
3+
import {
4+
UnexpectedEndOfCodeError,
5+
UnexpectedNewlineError,
6+
} from '../../core/error/index.ts'
47

58
Deno.test('예상치 못한 줄바꿈', async () => {
69
try {
@@ -10,3 +13,15 @@ Deno.test('예상치 못한 줄바꿈', async () => {
1013
console.log(error)
1114
}
1215
})
16+
17+
Deno.test('문자열 내 줄바꿈', async () => {
18+
try {
19+
await yaksok(`
20+
"줄바꿈이
21+
있는 문자열"
22+
`)
23+
} catch (error) {
24+
assertIsError(error, UnexpectedNewlineError)
25+
console.log(error)
26+
}
27+
})

0 commit comments

Comments
 (0)