luau-analyzer-sys 0.1.1

A high-performance, embedded Luau type-checking and analysis engine written in Rust. This crate provides bindings to the Luau analyzer, allowing you to integrate static analysis and code intelligence directly into your applications.
Documentation
local function prequire(name) local success, result = pcall(require, name); return success and result end
local bench = script and require(script.Parent.bench_support) or prequire("bench_support") or require("../bench_support")

function test()

  -- two implementations of a sort function
  -- this is an example only. Lua has now a built-in function "sort"

  -- extracted from Programming Pearls, page 110
  function qsort(x,l,u,f)
  if l<u then
    local m=math.random(u-(l-1))+l-1	-- choose a random pivot in range l..u
    x[l],x[m]=x[m],x[l]			-- swap pivot to first position
    local t=x[l]				-- pivot value
    m=l
    local i=l+1
    while i<=u do
      -- invariant: x[l+1..m] < t <= x[m+1..i-1]
      if f(x[i],t) then
        m=m+1
        x[m],x[i]=x[i],x[m]		-- swap x[i] and x[m]
      end
      i=i+1
    end
    x[l],x[m]=x[m],x[l]			-- swap pivot to a valid place
    -- x[l+1..m-1] < x[m] <= x[m+1..u]
    qsort(x,l,m-1,f)
    qsort(x,m+1,u,f)
  end
  end

  function selectionsort(x,n,f)
  local i=1
  while i<=n do
    local m,j=i,i+1
    while j<=n do
    if f(x[j],x[m]) then m=j end
    j=j+1
    end
  x[i],x[m]=x[m],x[i]			-- swap x[i] and x[m]
  i=i+1
  end
  end

  --function show(m,x)
  -- io.write(m,"\n\t")
  -- local i=1
  -- while x[i] do
  --  io.write(x[i])
  --  i=i+1
  --  if x[i] then io.write(",") end
  -- end
  -- io.write("\n")
  --end

  function testsorts(x)
  local n=1
  while x[n] do n=n+1 end; n=n-1		-- count elements
  --show("original",x)
  qsort(x,1,n,function (x,y) return x<y end)
  --show("after quicksort",x)
  selectionsort(x,n,function (x,y) return x>y end)
  --show("after reverse selection sort",x)
  qsort(x,1,n,function (x,y) return x<y end)
  --show("after quicksort again",x)
  end

  -- array to be sorted
  x={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"}

  local ts0 = os.clock()
  for loops=1,10000 do
    testsorts(x)
  end
  local ts1 = os.clock()

  return ts1 - ts0
end

bench.runCode(test, "qsort")