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
Rule based html validation against hydration #2493
Conversation
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #2493 +/- ##
==========================================
+ Coverage 51.01% 51.15% +0.14%
==========================================
Files 124 125 +1
Lines 5389 5399 +10
Branches 1162 1157 -5
==========================================
+ Hits 2749 2762 +13
+ Misses 2350 2345 -5
- Partials 290 292 +2 ☔ View full report in Codecov by Sentry. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @yiwen101 thanks for this PR! It seems very interesting and will definitely be useful for our users.
One thing I wanted to ask is if the RuleBuilder is necessary? Could you initialise the Rule directly using a constructor?
Could you also add some test cases to test htmlValidationUtil.ts
functionality? Like show that there is a warning/error when a table is missing a body and so on.
Another thing with regards to code quality is maybe we can abstract out the actual rules (like table needed a tbody) to a seperate file from htmlValidationUtil.ts
. Then htmlValidationUtil.ts
will load in these rules. So htmlValidationUtil.ts
only handles creating rules while this other file will handle the actual rule content.
cb84513
to
69ec838
Compare
Thanks for the extensibility considerations! I can definitely see it the code and I agree with the overall approach. I second @/yucheng11122017 's comments though on whether we can use a constructor. I also don't like the idea of the pushRuleAndReset, because I feel like it opens the possibility where someone forgets to push a rule and maybe one of the other setter functions and then you don't get a well formed rule. If the user is expected to call all of those functions, it makes sense to me that they are all called at once. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for working on this! Just some nits on improving logger messages and property names. It would be good to add some tests and documentation for this as well.
Similar to other reviewers, I also think that encapsulating the existing rules to another class for example would be good to better manage rule registration and execution.
@kaixin-hc @tlylt @yucheng11122017 @jingting1412 Thank you for all the comments and sorry about the later reply. On second thought, I feel that although this is a quite simple, trivial and straightforward addition, the current code still complicating it unnecessarily. I wish to remove all the over-engineered parts, and reduce this PR to a simple validation of Let me explain where the current design comes from, and why it sucks. Initially I want to add an extensive rule based checkers. However as commented here, it turns out that modern browsers are quite robust and can tolerate most of the common html violations (eg: nesting block level in inline level, missing closing tag, missing quotation for href...) . So However, since With "table body missing" being the only known violations that will for sure leads to hydration, I want to remove all over-engineered parts and make it the simplest, most straightforward form. What are you thoughts on this? |
@yiwen101 Thanks for sharing your reasoning! Yes, it was a good surprise to me as well how robust current browsers are. As shared in earlier comments I have some issues with the code in this "over-engineered" form. I support a PR specifically targeting "table body missing" especially if it's a small change; we can always change the code that checks this if we discover that there are more cases we must check. |
This is great reasoning and very well thought through and researched! I am ok to keep it simple :) |
@kaixin-hc @yucheng11122017 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Some comments! Thanks for the work
Co-authored-by: Chan Yu Cheng <77204346+yucheng11122017@users.noreply.github.com>
Co-authored-by: Chan Yu Cheng <77204346+yucheng11122017@users.noreply.github.com>
Co-authored-by: Chan Yu Cheng <77204346+yucheng11122017@users.noreply.github.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Some nits
Co-authored-by: Chan Yu Cheng <77204346+yucheng11122017@users.noreply.github.com>
Co-authored-by: Chan Yu Cheng <77204346+yucheng11122017@users.noreply.github.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
IMO, good to go.
After resolving all comments.
This reverts commit c052a4d.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!
@yiwen101 you can trying merging this PR yourself :)
Noted, thanks. |
@yiwen101 Each PR must have a SEMVER impact label, please remember to label the PR properly. |
* Add rule based html validation against Vue hydration issue * Improve docs * Update test * Add rule to check against table tag without tboby * Update docs/devGuide/design/serverSideRendering.md * Update packages/core/test/unit/utils/HtmlValidationUtil.test.ts * Update packages/core/src/utils/htmlValidationUtil.ts * Update packages/core/test/unit/utils/HtmlValidationUtil.test.ts --------- Co-authored-by: Chan Yu Cheng <77204346+yucheng11122017@users.noreply.github.com>
What is the purpose of this pull request?
Work on #2025
Overview of changes:
Add extensible rule based validation check against hydration
Anything you'd like to highlight/discuss:
As commented in #2025, it turns out that modern browsers are quite robust and can tolerate most of the common html violations.
But still ideal to add check for violations that are fatal, and make checks for other violations optional.
I made the changes with extensibility in mind, as it is very likely that we will add further rules in the future.
Have not added test/documentation as not sure whether current implementation is desirable. Review required.
Testing instructions:
Add following in index.md
Proposed commit message: (wrap lines at 72 characters)
Rule based html validation against hydration
Checklist: ☑️
Reviewer checklist:
Indicate the SEMVER impact of the PR:
At the end of the review, please label the PR with the appropriate label:
r.Major
,r.Minor
,r.Patch
.Breaking change release note preparation (if applicable):