<div dir="ltr"><div>What's up with the bracing style in <a href="https://phabricator.services.mozilla.com/D36399">https://phabricator.services.mozilla.com/D36399</a> ? It looks quite alien to me. Is this style (specifically the omission of newlines) mandated by Prettier?</div><div><br></div><div>Thanks,</div><div>Dao<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Am Sa., 15. Juni 2019 um 07:27 Uhr schrieb Victor Porof <<a href="mailto:vporof@mozilla.com">vporof@mozilla.com</a>>:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="overflow-wrap: break-word;"><div>This email was also sent to dev-platform a few days ago, and a copy can be found <a href="https://docs.google.com/document/d/1UDERMflocqdszMGhhtxiVhaCTVOHo6jxLsGbt4BR9uw" target="_blank">here</a><span style="font-family:"Helvetica Neue"">. </span>In case there’s folks who aren’t subscribed to dev-platform, I’m forwarding it here on firefox-dev as well.</div><div><div><div style="overflow-wrap: break-word;"><div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue""><b>TL;DR</b></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">To improve developer productivity, we plan to automate JS formatting using <span style="color:rgb(220,161,13)"><a href="https://prettier.io/" target="_blank">Prettier</a></span>, a broadly adopted tool specifically designed for this task and maintained by well known stakeholders. This should reduce the amount of time spent writing and reviewing JS code.</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">This choice was informed by explicit goals such as compatibility with third-party libraries (e.g. React), consistency, and predictability. The resulting integration includes automation (try, phabricator) as well as CLI (mach).</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">Changes have been tested and verified with a small part of the codebase before being rolled out to the entire tree.</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue""><b>Background</b></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">Mozilla is more invested than ever in using automated tools for checking and rewriting code. Various tools are already in use on CI, for example <span style="color:rgb(220,161,13)"><a href="https://clang.llvm.org/docs/ClangFormat.html" target="_blank">clang-format</a></span>, <span style="color:rgb(220,161,13)"><a href="https://github.com/checkstyle/checkstyle" target="_blank">checkstyle</a></span>, <span style="color:rgb(220,161,13)"><a href="http://flake8.pycqa.org/en/latest/" target="_blank">flake8</a></span>, as well as C/C++ static analysis. For JS, <span style="color:rgb(220,161,13)"><a href="https://eslint.org/" target="_blank">eslint</a> </span>is primarily used for ensuring code quality, however consistent and predictable styling was a non-goal until now.</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">As with C++, Mozilla has had a coding style for JS, but it’s not entirely enforced through tooling. In addition, the current style is only used in our projects; by contrast, Prettier is complete, <span style="color:rgb(220,161,13)"><a href="https://www.npmjs.com/browse/depended/prettier" target="_blank">well supported</a> </span>in tooling, and <span style="color:rgb(220,161,13)"><a href="https://prettier.io/en/users/" target="_blank">widely used</a> </span>by many other stakeholders.</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">We still have styling inconsistencies in our codebase. On top of that, we have been spending a lot of time talking about and adjusting whitespace. This wastes human time when writing, reviewing, and discussing code.</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue""><b>Details</b></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">We will build on the existing tooling foundation by applying coding style checks and automated rewrites throughout the authoring process (pre-commit, commit, review, landing).</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">We’re announcing the following changes to our coding style and its enforcement through our commit policy:</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">1. We will migrate to the Prettier coding style to encourage more consistent code. We will be preserving all other aspects pertaining to code quality (linting) through eslint.</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">2. We will check conformance with coding style rules upon review and landing, so that issues can be easily addressed or fixed through automation. The preference will be to enforce style issues as early as possible (before landing) to avoid late surprises.</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">3. We will automatically enforce restrictions on formatting of whitespace (such as indentation and braces). For other stylistic issues (such as naming), no particular style is enforced, and consistency with surrounding code should take precedence.</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">These changes have been approved both by Firefox senior engineering leadership and the <span style="color:rgb(220,161,13)"><a href="https://wiki.mozilla.org/Modules/Firefox_Technical_Leadership" target="_blank">Firefox Technical Leadership Module</a></span>.</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">We’ve already smoke-tested these changes, as well as fine tuned various aspects of the tooling with the DevTools and Activity Stream teams.</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue""><b>When?</b></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">A month ago, <span style="color:rgb(220,161,13)"><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1551218" target="_blank">we pushed a patch</a> </span>to reformat and enable CLI and automation support for Prettier in a section of the tree (devtools/debugger). This first step was intended to be a smoke test in a controlled environment with a team of developers who have volunteered to help us test this change. We haven’t found any major surprises.</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">Last Friday <span style="color:rgb(220,161,13)"><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1556013" target="_blank">we landed</a> </span>top-level support for Prettier, as a preliminary stop-gap for allowing folks to check out what `./mach lint --fix` does for them, and manually whitelist sources in the meantime if needed.</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">Assuming that everything continues to go well, on Friday, July 5, we will push a patch to mozilla-central in order to rewrite the entire tree using Prettier.</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">We want to do this work right before a merge (when nightly version moves to beta) to limit the impact on the beta uplift process. To mitigate the impact on the developers who backport fixes to ESR, two weeks after the merge we will also reformat the ESR68 code base. A more detailed roadmap is available <span style="color:rgb(220,161,13)"><a href="https://docs.google.com/document/d/1qV3aULyhulHsNHvnlbgAxeqlMGnpklUnxmpnY1OovXk/edit#" target="_blank">here</a></span>.</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">Next week during Whistler, we also invite you to the “Using Prettier across Mozilla” lightning talk to discuss in person about this project.</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue""><b>How?</b></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">To reformat code locally after the landing on July 5:</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">$ ./mach lint <glob> --fix</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">Eslint integrations for most popular code editors already allow developers to easily format the code they’re working on at the time they’re making changes to it. Prettier leverages this infrastructure and is triggered automatically when running `eslint --fix`. If your code editor has an eslint plugin, enable auto-fix to trigger Prettier. We’ll share some tutorials about this soon.</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue""><b>Providing Feedback</b></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">This post is intended as an announcement, but we do welcome your feedback on this, both at a high level and at the technical level.</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue""><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue""><b>For high level feedback please reach out to <span style="color:rgb(220,161,13)"><a href="mailto:vporof@mozilla.com" target="_blank">vporof@mozilla.com</a></span>. For technical feedback (e.g. bugs about the conversion process) please file bugs under <span style="color:rgb(220,161,13)"><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1558517" target="_blank">bug prettier-format</a></span>.</b></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">We understand that coding styles can be subjective. Many people would agree that having a consistent style across the code base is valuable, and that’s not where we are now. This change doesn’t mean that the coding style will remain forever this way; it gives us the opportunity to easily change our coding style and apply the change on the code base. It’s the first step to actually having consistency.</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">Thanks to the many who have helped out technically and with planning, including Dave Townsend, Mark Banner, Dan Mosedale, Kate Hudson, Ed Lee, Jason Laster, Sylvestre Ledru, Andi-Bogdan Postelnicu, Sebastian Hengst and Ritu Kothari.</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">Victor</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue""><b>FAQ:</b></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">1. Can I see what it looks like?</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">To reformat code locally today, apply the patches in <span style="color:rgb(220,161,13)"><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1558517" target="_blank">bug 1558517</a> </span>and whitelist the respective sources in the top level <span style="color:rgb(220,161,13)"><a href="https://dxr.mozilla.org/mozilla-central/source/.prettierignore" target="_blank">.prettierignor</a></span><span style="color:rgb(220,161,13)"><a href="https://dxr.mozilla.org/mozilla-central/source/.prettierignore" target="_blank">e</a> </span>file, then:</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">$ ./mach lint <glob> --fix</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">A formatted repository is available on Github: <span style="color:rgb(220,161,13)"><a href="https://github.com/victorporof/gecko-dev/tree/prettier" target="_blank">https://github.com/victorporof/gecko-dev/tree/prettier</a> </span>to visualise the changes.</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">2. Can I ignore just a file?</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">If you have a good reason, yes. Just add it into <span style="color:rgb(220,161,13)"><a href="https://dxr.mozilla.org/mozilla-central/source/.prettierignore" target="_blank">.prettierignore</a> </span>with a comment explaining why it should be ignored.</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">3. Can I ignore a whole directory?</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">If it’s third party code, yes! Just add it into <span style="color:rgb(220,161,13)"><a href="https://dxr.mozilla.org/mozilla-central/source/tools/rewriting/ThirdPartyPaths.txt?q=thirdpartypaths.txt&redirect_type=direct" target="_blank">thirdpartypaths.txt</a> </span>and `mach` will ignore it. Otherwise, you can also add a glob to <span style="color:rgb(220,161,13)"><a href="https://dxr.mozilla.org/mozilla-central/source/.prettierignore" target="_blank">.prettierignore</a></span>.</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue""><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">4. Why not continue using eslint?</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">To a great degree, we’ve moved closer towards a consistent codebase using eslint. However, eslint specializes in code quality checks, and not formatting.</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">For example, auto-fix is <span style="color:rgb(220,161,13)"><a href="https://eslint.org/docs/rules/#stylistic-issues" target="_blank">not available for most stylistic issues</a></span>. Another problem pertains to output being inconsistent depending on the initial styling. Furthermore, depending on which rules are chosen, conflicts may also arise and successive runs can result in differently styled output. All of those issues are incompatible with our goals. To enforce a coding style, consistency and predictability are necessary, both of which are not possible with eslint.</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">We’ll continue having eslint coexisting with Prettier. Rules strictly pertaining to code quality will be preserved, and this task will continue to be in eslint's domain. Most styling-related rules will be removed in favour of separating this concern into Prettier’s domain. Both tools will be running in tandem.</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">5. Why not something else?</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">Our choice of Prettier was informed by meticulously analyzing existing JS formatters, including eslint, jsbeautify and clang-format. We’ve tested reformatting mozilla-central using each one of them, measuring consistency (“is the output predictable regardless of source?”), integration effort (“can this fit into our CLI and build infrastructure?”), build/server time cost (“is this fast enough?”), capabilities (“can this parse our funny-looking JS or JSX?”) and also configurability (“can this tool suit our existing code quality checks?”).</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">In addition, every single rule for all of those tools was also individually tested against all of mozilla-central, measuring code churn. We’ve gathered a lot of info, and decided that a <span style="color:rgb(220,161,13)"><a href="https://dxr.mozilla.org/mozilla-central/source/.prettierrc" target="_blank">minimal configuration</a> </span>is the least impactful objectively: all other configuration rules have relatively equal churn across the codebase regardless of the settings used, so we defined those as subjective and settled for the defaults.</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">6. Will this break blame on VCS?</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">As with the clang-format rollout for reformatting C++, we will tag the formatting changeset commit message with “skip-blame” so that Mercurial would automatically ignore the reformat changeset for blame operations.</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">7. Will I have to rebase?</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">In order to mitigate the impact for pending changes, we will re-enable <span style="color:rgb(220,161,13)"><a href="https://pypi.python.org/pypi/hg-formatsource" target="_blank">format-source</a> </span>and make it work with Prettier, to locally reformat the changes before the big patch is pulled. This will fix most of the conflict issues.</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue"">We will share more details about this later.</div><div style="margin:0px;font-stretch:normal;line-height:normal;font-family:"Helvetica Neue";min-height:14px"><br></div></div></div></div></div><br></div>_______________________________________________<br>
firefox-dev mailing list<br>
<a href="mailto:firefox-dev@mozilla.org" target="_blank">firefox-dev@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/firefox-dev" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/firefox-dev</a><br>
</blockquote></div>