Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Enabled syntax highlight to a code block #83

Merged
merged 1 commit into from
Jul 17, 2020

Conversation

korosuke613
Copy link
Contributor

@korosuke613 korosuke613 commented Jul 1, 2020

closed #82

スクリーンショット 2020-07-01 13 29 22

@korosuke613 korosuke613 marked this pull request as draft July 1, 2020 04:05
@korosuke613
Copy link
Contributor Author

CI通るように修正します

@korosuke613 korosuke613 marked this pull request as ready for review July 1, 2020 04:24
@ganta ganta self-requested a review July 1, 2020 04:30
@korosuke613
Copy link
Contributor Author

conflict直してpushしなおします。

Copy link
Owner

@ganta ganta left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@korosuke613
見ました!ご確認よろしくです〜

src/app/markdown/renderer/highlight-settings.ts Outdated Show resolved Hide resolved
src/app/markdown/renderer/highlight-settings.ts Outdated Show resolved Hide resolved
src/app/markdown/renderer/marktone-renderer.ts Outdated Show resolved Hide resolved
src/app/markdown/renderer/marktone-renderer.ts Outdated Show resolved Hide resolved
src/app/markdown/renderer/marktone-renderer.ts Outdated Show resolved Hide resolved
src/app/markdown/renderer/marktone-renderer.ts Outdated Show resolved Hide resolved
src/app/markdown/renderer/marktone-renderer.ts Outdated Show resolved Hide resolved
src/app/markdown/renderer/marktone-renderer.ts Outdated Show resolved Hide resolved
@korosuke613
Copy link
Contributor Author

@ganta
丁寧なコードレビューありがとうございます!とても勉強になります。
レビュー内容を反映しました。
よろしくお願いします。

Copy link
Owner

@ganta ganta left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@korosuke613 見逃しがあったので、いくつかコメントしました〜

src/app/markdown/renderer/marktone-renderer.ts Outdated Show resolved Hide resolved
@@ -20,6 +22,43 @@ class MarktoneRendererHelper {

return html;
}

static unescapeHTML(html: string): string {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar blocks of code found in 2 locations. Consider refactoring.

@korosuke613 korosuke613 force-pushed the enable-syntax-highlight branch 4 times, most recently from bd78320 to 7a4a791 Compare July 14, 2020 02:38
const escapeTest = /[&<>"']/;
const escapeReplace = /[&<>"']/g;
const replacements: { [key: string]: string } = {
private static escapeSettings: ReplaceSettings = {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar blocks of code found in 2 locations. Consider refactoring.

},
};

private static unescapeSettings: ReplaceSettings = {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar blocks of code found in 2 locations. Consider refactoring.

return target;
}

static escapeHTML(html: string): string {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar blocks of code found in 2 locations. Consider refactoring.

@korosuke613
Copy link
Contributor Author

@ganta
五十嵐さん。DRYの精神でescapeHTML()unescapeHTML()の共通コードを抜き出して、なるべく短くしたのですが、それでもcodeclimateにsimilar blocksがあると怒られてしまいます...
何かいい方法はないでしょうか?

https://codeclimate.com/github/ganta/chrome-extension-marktone/pull/83

@ganta
Copy link
Owner

ganta commented Jul 14, 2020

@korosuke613
DRYの罠にハマりましたね〜

コード類似の指摘は、大抵のケースにおいて似て非なるものであることが多いです。
そのため、静的解析の指摘を素直にそのまま対応しようとすると、逆にコードが複雑化したりといった罠に陥ります。
こういう場合は重複していることを自体を解決するのではなく、どこかが根本的におかしいことを疑ったほうがよいです。

今回のケースではhighlight.js側がエスケープ処理の有無に対応していないことを回避しようとしたことが発端ですね。
もっというと、Marked.jsがエスケープの状態を引数で取り回してくる仕様も、結構違和感があります。
(引数にOn/Offを渡すのは複雑化するので避けるべきパターンです)

と言っても、現段階ではわりとどうしようもない感じがするので、
最初のシンプルなescapeHTML()unescapeHTML()が独立して存在している状態にしましょうか。
おそらくそれがいちばん可読性が高そうです。

レビューが完了したらこちらでCode Climateの指摘を除外します。

コードのあやしいところを見つけてくれるので、コード類似指摘自体はまだ有効化したままにしておこうと思います。

@korosuke613 korosuke613 force-pushed the enable-syntax-highlight branch 2 times, most recently from 64646f3 to a708324 Compare July 14, 2020 04:26
@korosuke613
Copy link
Contributor Author

@ganta
なるほど〜!
根本的な原因を取り除くことを考えた方が良いと

根本原因はライブラリ側にあるので、確かに厳しい感じはありますね〜

最初のシンプルなescapeHTML()とunescapeHTML()が独立して存在している状態にしましょうか。
おそらくそれがいちばん可読性が高そうです。

了解です!修正しました!
よろしくお願いします。

Copy link
Owner

@ganta ganta left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@korosuke613 ちょっとだけコメントしましたのでよろしくです〜

Comment on lines 27 to 28
const escapeTest = /((&lt)|(&amp;)|(&gt;)|(&quat)|(&#39))/;
const escapeReplace = new RegExp(escapeTest, "g");
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nits]
ここらへんの変数名は意味が逆になっているのでunescapeTestunescapeReplaceというようにしておきましょうか
(もとの命名がよろしくないというのはあるのですが)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

あああ確認不足でした...
修正しました!ありがとうございます!
https://github.com/ganta/chrome-extension-marktone/pull/83/files#diff-9eaf230ebb45489bd5b70a3e292c7cc5R27-R28

@@ -20,6 +22,43 @@ class MarktoneRendererHelper {

return html;
}

static unescapeHTML(html: string): string {
const escapeTest = /((&lt)|(&amp;)|(&gt;)|(&quat)|(&#39))/;
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[MUST]
いくつかセミコロンが抜けてますね。

&;だけ別にする書き方もできます

Suggested change
const escapeTest = /((&lt)|(&amp;)|(&gt;)|(&quat)|(&#39))/;
const escapeTest = /(&(?:lt|amp|gt|quat|#39);)/;

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

テスト不足でした...
確かに&;は共通してましたね。ありがとうございます!
https://github.com/ganta/chrome-extension-marktone/pull/83/files#diff-9eaf230ebb45489bd5b70a3e292c7cc5R27

@@ -20,6 +22,43 @@ class MarktoneRendererHelper {

return html;
}

static unescapeHTML(html: string): string {
const unescapeTest = /(&(?:lt|amp|gt|quat|#39);)/;
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@korosuke613
quotのtypo見逃していました〜
他は大丈夫そうです!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Owner

@ganta ganta left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@korosuke613 Thank you!

@ganta ganta merged commit 746eb63 into ganta:master Jul 17, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Syntax highlighting is not applied in code blocks
2 participants