Sha256: 00f922063fa8d3ec1471ba4ac4e805423d9297577ba8adbd43635dfc2f04cd4c

Contents?: true

Size: 1.18 KB

Versions: 2

Compression:

Stored size: 1.18 KB

Contents

// An @int node is any literal integer in Ruby. They can come in a number of
// bases, and look like the following:
//
// Binary (2)       - 0b0110
// Octal (8)        - 0o34 or 034
// Decimal (10)     - a normal number like 159
// Hexidecimal (16) - 0xac5
//
// If it's a decimal number, it can be optional separated by any number of
// arbitrarily places underscores. This can be useful for dollars and cents
// (34_99), dates (2020_11_30), and normal 3 digit separation (1_222_333).
function printInt(path, _opts, _print) {
  const { body } = path.getValue();

  // If the number is octal and does not contain the optional "o" character
  // after the leading 0, add it in.
  if (/^0[0-9]/.test(body)) {
    return `0o${body.slice(1)}`;
  }

  // If the number is a base 10 number, is sufficiently large, and is not
  // already formatted with underscores, then add them in in between the
  // numbers every three characters starting from the right.
  if (!body.startsWith("0") && body.length >= 5 && !body.includes("_")) {
    return `  ${body}`
      .slice((body.length + 2) % 3)
      .match(/.{3}/g)
      .join("_")
      .trim();
  }

  return body;
}

module.exports = {
  "@int": printInt
};

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
prettier-1.0.0.pre.rc1 src/nodes/ints.js
prettier-0.22.0 src/nodes/ints.js