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

RFC: New major version (3.0) #260

Closed
jnvsor opened this issue Oct 20, 2017 · 3 comments
Closed

RFC: New major version (3.0) #260

jnvsor opened this issue Oct 20, 2017 · 3 comments
Assignees
Milestone

Comments

@jnvsor
Copy link
Member

jnvsor commented Oct 20, 2017

Currently planning to set up a next branch for a new major version of Kint. It will drop 5.1 and 5.2 support. 2.x will be in active development at least until next hits beta

  • I've broken Kint 2.x on 5.1/5.2 in the past by accident. Repeatedly. But I never received any complaints, so I can only presume there are very few people actually using these horrifyingly ancient PHP versions.
  • We can build a phar file instead of a bigass eval string.
    • Bug reports using single file will show a proper file and line number from inside the phar file
  • We can use namespaces
  • We can clean up a lot of old legacy compat code
  • Kint::dumpArray is a bit of a hack. We can take this opportunity to rethink the way the Kint facade goes about setting up and make it more flexible.
  • It gives me an excuse to delay porting the frontend to vue (Man I hate JS)
  • Good opportunity for cleanup in general... More to come

Note that this major bump will be less about features than 2.0 and more about internal code quality

Any (architectural?) suggestions?

Update May 18

  • Moved master to 2.x, moved next to master
  • Big improvement to Travis CI setup
    • Now has separate stages, with format, build, and static analysis (And a quick test pass) running first before the full test pass
    • Much newer dependencies allowed now (Despite CI)
    • Added Psalm to bolster the pre-existing phpstan static analysis
    • BasicObject::blank no longer auotmatically assigns name as access path
    • BasicObject::transplant now transplants parameter into this, instead of this into parameter
  • Tagged 3.0-alpha1

Before beta I want to:

  • Move script/style dedupe to shared JS file so it works on plain as well
  • Finish client-side search option
  • Decide whether to start using exceptions, or to leave that for the next major version

Update May 12

Nearly there. Going to add Psalm for some extra static analysis next to phpstan, finish writing up some Object tests, and close #11 before pushing a beta tag.

  • Improved test performance
  • Now works with symfony's mbstring and iconv polyfills as well as normal mbstring and iconv
  • Microtime and idelink related JS will be shared between RichRenderer and PlainRenderer
  • Base64Plugin will no longer match hexadecimal strings. They're unlikely to be base64.
  • Removed HHVM specific code and CI tests. HHVM 3.26 finally broke BC with PHP and will not be supported from here on.
  • Rich and Plain renderers now have an option to always dump their CSS and JS to the browser, for when you're not worried about a few kb extra bandwidth per call
  • Enabled many more php-cs-fixer rules for stricter code-style. This touched pretty much everything.
    • Thanks to one of those rules the LICENSE file is now in a docblock at the top of all source files
  • General bugfixes

Update Apr 26

  • New icons and button styles for the "New window" and "Access path" buttons
  • The first tab on throwables (IE exceptions) is now a source representation of the exception source, since it's not included in the trace. There's usually a condition near the throw that can tell you a lot about the cause
  • Uses the new npm ci command
  • Moved object property sorting to opt-in on renderers instead of always-on
  • Unified init files (Thanks to phar file)
  • Added constant that has the same effect as the extras marker to disable helpers
  • Moved \Kint to \Kint\Kint and alias it on boot.
    • Added constant and extras marker to disable alias just like helpers
  • Added microtime support to text renderer plugin
  • Microtime parser plugin now supports microtime(true)
  • Added \Kint\Utils full of utility functions like isSequential
  • Added 2-level encoding support to BlobObject: First uses mbstring to detect multibyte encodings, then uses iconv to detect ambiguous legacy encodings
  • Refactored the main Kint class
  • Added tests for the most complex representations
  • Fixed some bugs

On my todo list:

  • Make a better documentation describing the encodings and their behavior
  • Rework and simplify the logic around "Renderer has been run" checks
  • Add idelink calls to file names in traces in plain and rich renderers
  • Add javascript support to plain renderer's microtime and idelink
  • Add client-side search option

Off my todo list:

  • Frontend rewrite in vue is cancelled. Performance was horrible and I was dreading the work anyway

Update Feb 13

In version 3 so far:

  • I've moved everything around, all classes are namespaced now (Except \Kint)
  • This also means a minimum version bump to 5.3, which won't be a big deal. I broke 2.x on 5.1/5.2 before without anyone noticing.
  • The single file build is going to be distributed as a phar package instead of a single file, since this makes a lot of things easier (Such as no need to inline the built js/css files) This also needed some work to make the build reproducible for CI.
  • I've added a flag to the rich renderer that moves all the rich dumps on the page to a foldout fixed to the bottom of the browser window on page load. It's on by default and should probably help when dumping inside small columns
  • I've added phpstan (static analyser) that helped catch a few bugs. It runs in CI too
  • I've added code coverage markers to the test cases which helped find a few missing edge cases. Overall I've currently got 33% of lines covered, with the important ones (\Kint, Parser, CallFinder) being the most important. All tests that have been written have 100% coverage on the relevant classes, but there's a ton more to write that I never get around to.
  • I tried to get scrutinizer attached to the repo but I never finished it, and it seems to spit out an awful lot of false positives or needless nitpicking so I'm not in a rush there.
  • General bugfixes and cleanups

On my todo list:

  • Better choice of icons for new window & access path
  • Write tests for all the object/representation classes
  • Since HHVM has officially dropped php compatibility I intend to remove it from CI soon-ish
  • I'd like to add a text renderer plugin for microtime and SimpleXMLElement
  • I'd like to switch eslint to prettier, since it's a proper formatter and won't just scream at you if you format things wrong
  • Exceptions should render the trace including the exception frame itself

The big ones that have me worried the most:

  • I want to rewrite the frontend in vue. With vue we can keep structuring the data like html without having to move everything into a json structure, and it should improve performance:
    • In the server by moving server side branches to the client
    • In the client by vastly reducing the amount of DOM elements in a large dump
  • I want to rewrite the main \Kint dump routine. Right now things like dumpArray are just hacked on for backwards comparabilities sake but ideally the whole thing would look very different.
@jnvsor jnvsor added this to the 3.0 milestone Oct 20, 2017
@jnvsor jnvsor self-assigned this Oct 20, 2017
@raveren
Copy link
Contributor

raveren commented Dec 26, 2017

I'd just like to thank you and congratulate on outputting such quality releases, I couldn't be happier with the state of Kint!

I'm not back to the scene (yet?), just passing through :)

@jnvsor
Copy link
Member Author

jnvsor commented Dec 27, 2017

Thanks @raveren :)

@jnvsor
Copy link
Member Author

jnvsor commented Oct 1, 2018

Released!

@jnvsor jnvsor closed this as completed Oct 1, 2018
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

No branches or pull requests

2 participants