Skip to content

how to use programmatically? #21

Closed

Description

@hoebat

I'd like to use this in the browser, however, trying it out with

  • "@prettier/plugin-lua": "0.0.1",
  • "prettier": "^2.2.1"
const prettier = require("prettier");
const plugin = require("@prettier/plugin-lua");

function format_lua(s) {
  return prettier.format(s, { parser: "lua" });
}

format_lua("function deepcopy(orig)
  local orig_type = type(orig)
     local copy

  if orig_type == 'table' then; copy = {}
  for orig_key, orig_value in next, orig, nil do
  copy[deepcopy(orig_key)] = deepcopy(orig_value)
          end
          setmetatable(
            copy,
            deepcopy(
              getmetatable(orig)))
      else
          copy = orig
      end
    return copy
  end")

gives:

format_lua("function deepcopy(orig)
           ^^^^^^^^^^^^^^^^^^^^^^^^

SyntaxError: Invalid or unexpected token
    at wrapSafe (node:internal/modules/cjs/loader:1024:16)
    at Module._compile (node:internal/modules/cjs/loader:1072:27)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1137:10)
    at Module.load (node:internal/modules/cjs/loader:973:32)
    at Function.Module._load (node:internal/modules/cjs/loader:813:14)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:76:12)
    at node:internal/main/run_main_module:17:47

Activity

  1. suchipi commented on Jan 25, 2021

    @suchipi
    Member

    try it with prettier 1.x

  2. hoebat commented on Jan 26, 2021

    @hoebat
    Author

    @suchipi: which version?

    I've done a simple example here: https://github.com/zcaudate/tool.prettier-plugin-lua/blob/master/src/main.js

    using prettier v1.19.1 gives:

    ~/.../prettier_plugin_lua/.build ( master U:1 ?:1 ⊘ )
    ❯  node src/main.js 
    
    /Users/chris/Development/tahto/foundation/src-app/tool/prettier_plugin_lua/.build/node_modules/prettier/index.js:9755
        throw error.stack;
        ^
    SyntaxError: [1:0] unexpected number '1' near '+'
    
  3. suchipi commented on Jan 26, 2021

    @suchipi
    Member

    try 1.13.7; it's been a long time since I've worked on this plugin

  4. hoebat commented on Jan 27, 2021

    @hoebat
    Author

    @suchipi: thanks for your help. It actually works great with 1.19.1.

    I figured out why it wasn't working. I had used "" for quotes instead of backticks. So the loader was spitting out this wrapSafe error:

    SyntaxError: Invalid or unexpected token
        at wrapSafe (node:internal/modules/cjs/loader:1024:16)
        at Module._compile (node:internal/modules/cjs/loader:1072:27)
        at Object.Module._extensions..js (node:internal/modules/cjs/loader:1137:10)
        at Module.load (node:internal/modules/cjs/loader:973:32)
        at Function.Module._load (node:internal/modules/cjs/loader:813:14)
        at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:76:12)
        at node:internal/main/run_main_module:17:47
    

    changing the source to backticks works fine:

    format_lua(`function deepcopy(orig)
      local orig_type = type(orig)
         local copy
    
      if orig_type == 'table' then; copy = {}
      for orig_key, orig_value in next, orig, nil do
      copy[deepcopy(orig_key)] = deepcopy(orig_value)
              end
              setmetatable(
                copy,
                deepcopy(
                  getmetatable(orig)))
          else
              copy = orig
          end
        return copy
      end`)

    Unfortunately, it's not supported with prettier v2.*. running the example, I get:

    node src/main.js 
    node_modules/prettier/index.js:3572
      return isNextLineEmptyAfterIndex(text, locEnd(node));
                                             ^
    
  5. suchipi commented on Apr 17, 2023

    @suchipi
    Member

    Thanks to fixes in #17, it should work with prettier 2.x now (you'll need to use @prettier/plugin-lua 0.0.2)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions