chore: restore original directory structure (project under code-review-graph-main/)
This commit is contained in:
+119
@@ -0,0 +1,119 @@
|
||||
-- sample.luau - Luau test fixture for tree-sitter parsing
|
||||
-- Exercises Luau-specific features: type annotations, type aliases, and Lua constructs
|
||||
|
||||
-- Module-level require() imports
|
||||
local HttpService = require(game.ReplicatedStorage.HttpService)
|
||||
local utils = require("lib.utils")
|
||||
local log = require("logging").getLogger("sample")
|
||||
|
||||
-- Type alias (Luau-specific)
|
||||
type Vector3 = {
|
||||
x: number,
|
||||
y: number,
|
||||
z: number,
|
||||
}
|
||||
|
||||
type Callback = (input: string) -> string
|
||||
|
||||
-- Top-level function with type annotations
|
||||
function greet(name: string): string
|
||||
print("Hello, " .. name)
|
||||
return name
|
||||
end
|
||||
|
||||
-- Local function with type annotations
|
||||
local function add(a: number, b: number): number
|
||||
return a + b
|
||||
end
|
||||
|
||||
-- Variable assignment creating a function
|
||||
local transform = function(data: any): string
|
||||
return HttpService:JSONEncode(data)
|
||||
end
|
||||
|
||||
-- Table constructor as a "class" using metatable + __index pattern
|
||||
local Animal = {}
|
||||
Animal.__index = Animal
|
||||
|
||||
-- Constructor with type annotations
|
||||
function Animal.new(name: string, sound: string): Animal
|
||||
local self = setmetatable({}, Animal)
|
||||
self.name = name
|
||||
self.sound = sound
|
||||
return self
|
||||
end
|
||||
|
||||
-- Method defined with colon syntax
|
||||
function Animal:speak(): string
|
||||
log:info(self.name .. " says " .. self.sound)
|
||||
return self.sound
|
||||
end
|
||||
|
||||
-- Another colon-syntax method
|
||||
function Animal:rename(new_name: string): string
|
||||
local old = self.name
|
||||
self.name = new_name
|
||||
return old
|
||||
end
|
||||
|
||||
-- Inheritance pattern
|
||||
local Dog = setmetatable({}, { __index = Animal })
|
||||
Dog.__index = Dog
|
||||
|
||||
function Dog.new(name: string): Dog
|
||||
local self = Animal.new(name, "Woof")
|
||||
return setmetatable(self, Dog)
|
||||
end
|
||||
|
||||
function Dog:fetch(item: string): string
|
||||
self:speak()
|
||||
print(self.name .. " fetches " .. item)
|
||||
return item
|
||||
end
|
||||
|
||||
-- Nested function calls and method calls
|
||||
local function process_animals(): string
|
||||
local a = Animal.new("Cat", "Meow")
|
||||
local d = Dog.new("Rex")
|
||||
|
||||
a:speak()
|
||||
d:speak()
|
||||
d:fetch("ball")
|
||||
|
||||
local encoded = HttpService:JSONEncode({ animals = { a.name, d.name } })
|
||||
print(string.format("Processed %d animals", 2))
|
||||
utils.log(encoded)
|
||||
|
||||
return encoded
|
||||
end
|
||||
|
||||
-- Test functions
|
||||
local function test_greet()
|
||||
local result = greet("World")
|
||||
assert(result == "World", "greet should return name")
|
||||
end
|
||||
|
||||
local function test_animal_speak()
|
||||
local a = Animal.new("TestCat", "Mew")
|
||||
local sound = a:speak()
|
||||
assert(sound == "Mew", "speak should return sound")
|
||||
end
|
||||
|
||||
local function test_dog_fetch()
|
||||
local d = Dog.new("TestDog")
|
||||
local item = d:fetch("stick")
|
||||
assert(item == "stick", "fetch should return item")
|
||||
end
|
||||
|
||||
-- Return statement (module pattern)
|
||||
return {
|
||||
greet = greet,
|
||||
add = add,
|
||||
transform = transform,
|
||||
Animal = Animal,
|
||||
Dog = Dog,
|
||||
process_animals = process_animals,
|
||||
test_greet = test_greet,
|
||||
test_animal_speak = test_animal_speak,
|
||||
test_dog_fetch = test_dog_fetch,
|
||||
}
|
||||
Reference in New Issue
Block a user