diff --git a/lint-staged.config.js b/lint-staged.config.js index 47aa3d39c..ebab41a43 100644 --- a/lint-staged.config.js +++ b/lint-staged.config.js @@ -1,3 +1,6 @@ module.exports = { - '*.md': ['textlint --rulesdir textlint/rules'], + linters: { + '*.md': ['textlint --rulesdir textlint/rules'], + }, + ignore: ['textlint/fixtures/*'], }; diff --git a/package.json b/package.json index 2a606c72f..f12d295d4 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,8 @@ "prettier": "yarn format:source && yarn format:examples", "prettier:diff": "yarn nit:source && yarn nit:examples", "reset": "rimraf ./.cache", - "test:textlint": "mocha textlint/tests/**/*.spec.js" + "test:textlint": "mocha textlint/tests/**/*.spec.js", + "test:textlint-cli": "textlint --rulesdir textlint/rules textlint/fixtures/*.md --format stylish" }, "devDependencies": { "@babel/preset-flow": "^7.0.0", diff --git a/textlint/fixtures/terminology.md b/textlint/fixtures/terminology.md new file mode 100644 index 000000000..6e6a015e9 --- /dev/null +++ b/textlint/fixtures/terminology.md @@ -0,0 +1,10 @@ +# Terminology Fixtures + +> Markdown for verifying textlint CLI result + +- 메서드 +- 서드파티와 써드파티와 써드 파티 +- 예제 +- 응용프로그램과 어플리케이션 +- 함수형 컴포넌트 +- 라이프사이클 diff --git a/textlint/rules/terminology.js b/textlint/rules/terminology.js index 679ada59d..086e5c6b4 100644 --- a/textlint/rules/terminology.js +++ b/textlint/rules/terminology.js @@ -42,13 +42,35 @@ const g = args => args.map(arg => new RegExp(arg, 'g')); */ const terms = [ { + // http://www.korean.go.kr/front/onlineQna/onlineQnaView.do?mn_id=61&qna_seq=11976 value: '메서드', expressions: [/메소드/, /메쏘드/], message: 'method는 메서드가 올바른 표현입니다', }, { - value: '서드파티', - expressions: [/써드파티/], - message: 'third party는 서드파티가 올바른 표현입니다', + // https://opendict.korean.go.kr/dictionary/view?sense_no=1251028 + value: '서드 파티', + expressions: [/서드파티/, /써드파티/, /써드 파티/], + message: 'third party는 서드 파티가 올바른 표현입니다', + }, + { + value: '예시', + expressions: [/예제/], + message: 'example은 예시로 표현합니다.', + }, + { + value: '애플리케이션', + expressions: [/응용프로그램/, /어플리케이션/], + message: 'application은 애플리케이션으로 표현합니다.', + }, + { + value: '함수 컴포넌트', + expressions: [/함수형 컴포넌트/], + message: 'function(al) component는 함수 컴포넌트로 표현합니다.', + }, + { + value: '생명주기', + expressions: [/라이프사이클/], + message: 'life cycle은 생명주기로 표현합니다.', }, ].map(term => ({...term, expressions: g(term.expressions)})); diff --git a/textlint/tests/terminology.spec.js b/textlint/tests/terminology.spec.js index 313b69ae1..ed48113ae 100644 --- a/textlint/tests/terminology.spec.js +++ b/textlint/tests/terminology.spec.js @@ -4,14 +4,37 @@ const rule = require('../rules/terminology'); const tester = new TextLintTester(); tester.run('terminology', rule, { - valid: ['메서드', '서드파티'], + valid: [ + '메서드', + '서드 파티', + '예시', + '애플리케이션', + '함수 컴포넌트', + '생명주기', + ], invalid: [ { text: '한 문장에 연속하는 용어 메소드와 메소드와 메쏘드를 테스트합니다.', errors: [{index: 14}, {index: 19}, {index: 24}], }, { - text: '써드파티', + text: '서드파티와 써드파티와 써드 파티', + errors: [{index: 0}, {index: 6}, {index: 12}], + }, + { + text: '예제', + errors: [{index: 0}], + }, + { + text: '응용프로그램과 어플리케이션', + errors: [{index: 0}, {index: 8}], + }, + { + text: '함수형 컴포넌트', + errors: [{index: 0}], + }, + { + text: '라이프사이클', errors: [{index: 0}], }, ],