mark-nicepants / figma2flutter

Converts design token json files to flutter
Apache License 2.0
17 stars 16 forks source link

[BUG] Expression parser fails with operators other than +/-* like roundTo() #9

Open freemansoft opened 8 months ago

freemansoft commented 8 months ago

:information_source: Info

The expression parser does not handle some function calls or power operators.

Version: 0.2.0-alpha current head of the main branch

:speech_balloon: Description

The expression parser for math operations will return incorrect results for math functions on operations.

solved to `NaN` for {"value": roundTo({semantic.fontSize.base} / {semantic.fontSize.scale}, 0), "type": "fontSizes", "path": ".semantic.fontSize", "name": "sm", "variableName": "semanticFontSizeSm" }

solved to `0.0` for {"value": roundTo({semantic.fontSize.base} * {semantic.fontSize.scale}^7, 0), "type": "fontSizes", "path": ".semantic.fontSize", "name": "6xl", "variableName": "semanticFontSize6xl" }

where base and scale have values though the values really don't matter

  "fontSize"
      "base": {
        "type": "fontSizes",
        "value": "16"
      },
      "scale": {
        "type": "fontSizes",
        "value": "1.2"
      },

:scroll: tokens file you tried to import

Example 2 in PR https://github.com/mark-nicepants/figma2flutter/pull/4 demonstrates this. There extra logging in that PR

mark-nicepants commented 8 months ago

Can this be closed now that #4 is merged?

freemansoft commented 8 months ago

I'm pretty sure that function-based math operations are not implemented. The example in the PR had the roundTo(x,y) and ^ operations removed from the JSON.

mark-nicepants commented 8 months ago

Aah ok, I understand it better now. It's not a bug, but a missing feature. What type of token export generated these?

freemansoft commented 7 months ago

The current code fails silently I thin returning null for any clause that contains a function. This means you get a NaN if there is a division operator or a null if there is one of the other operators. The code should abort or log errors or something if it runs across an unsupported function.