Code Monkey home page Code Monkey logo

Comments (6)

danielstjules avatar danielstjules commented on July 26, 2024

I'm pretty sure jsinspect 0.9 and below just completely ignored any JSX and kept parsing the files. The tool was completely rewritten in 0.10 as I found people were mostly interested in copy-paste detection, and the API was pretty inconsistent. As a result, thresholds will likely need to be tweaked.

That said, that's definitely a bug! Looks like there's 2 issues that need to be addressed:

  • End line for the sequence of JSX nodes is incorrect
  • JSX ASTs tend to be quite verbose, will probably need to make them more compact so as to avoid tripping up at lower thresholds

Thanks for letting me know!

from jsinspect.

danielstjules avatar danielstjules commented on July 26, 2024

End line for the sequence of JSX nodes is incorrect

Fixed in 20a16c9 and published a new patch release. The issue is that NodeUtils.getChildren isn't guaranteeing children order. It worked for most nodes, e.g. function params get visited before its body, but not JSX. Will probably update the function to peak at node location before caching attribute order. Previous versions of jsinspect hardcoded attribute traversal order... but it's not very future-proof.

JSX ASTs tend to be quite verbose, will probably need to make them more compact so as to avoid tripping up at lower thresholds

This is still an issue, but working on a fix!

from jsinspect.

danielstjules avatar danielstjules commented on July 26, 2024

Quick explanation as to why it's not completely a false positive, but a higher threshold might be necessary for JSX files. Let's look at this small snippet from the first example:

start={{x: 0.0, y: 0.0}} end={{x: 0.0, y: 1.0}}
    locations={[0, 1]}

This small of a snippet breaks down into the following 25 nodes

JSXIdentifier (start), JSXExpressionContainer, ObjectExpression, ObjectProperty, Identifier (x), NumericLiteral (0), ObjectProperty, Identifier (y), NumericLiteral (0), JSXAttribute, JSXIdentifier (end), JSXExpressionContainer, ObjectExpression, ObjectProperty, Identifier (x), NumericLiteral (0), ObjectProperty, Identifier (y), NumericLiteral (1), JSXAttribute, JSXIdentifier (locations), JSXExpressionContainer, ArrayExpression, NumericLiteral (0), NumericLiteral 1

Token-based copy paste detection would probably even label that small snippet as having ~30-40 tokens. So this would hint that the LinearGradient element could probably benefit from a helper/wrapper/component where all these properties are already set.

As a temp fix, a threshold of 45 or more might be more appropriate. However, this might improve by correcting the JSX node attribute traversal order.

from jsinspect.

danielstjules avatar danielstjules commented on July 26, 2024

And as a note, here's what would be reported after the latest patch release (note that it's not just a single line)

screen shot 2017-03-28 at 1 49 48 pm

from jsinspect.

danielstjules avatar danielstjules commented on July 26, 2024

This has been fixed in 119e32d

screen shot 2017-03-28 at 2 48 36 pm

This makes up 40 nodes:

  <LinearGradient
    start={{x: 0.0, y: 0.0}} end={{x: 0.0, y: 1.0}}
    locations={[0, 1]}
    colors={['#074595', '#6589A4']}
    style={Styles.

With 0.12.2, setting the threshold to 41 will avoid catching this LinearGradient. Thanks!

from jsinspect.

matthargett avatar matthargett commented on July 26, 2024

Awesome, thanks for the fast turnaround! :) πŸ₯‡

from jsinspect.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.