Compare commits

...

5 Commits

Author SHA1 Message Date
Christopher Arndt b3593bd713 refactor: add function annotation and check return value
Signed-off-by: Christopher Arndt <chris@chrisarndt.de>
2024-01-22 14:34:13 +01:00
Christopher Arndt 6a39d65a5b [tools]: add Lua Language Server basic Ardour Lua API definition
Signed-off-by: Christopher Arndt <chris@chrisarndt.de>
2024-01-22 14:33:22 +01:00
Christopher Arndt 760babcc8c [tools]: add VS code and Lua Language Server config
Signed-off-by: Christopher Arndt <chris@chrisarndt.de>
2024-01-22 14:32:39 +01:00
Christopher Arndt 3a85de5105 [tools] add editorconfig
Signed-off-by: Christopher Arndt <chris@chrisarndt.de>
2024-01-22 11:25:31 +01:00
Christopher Arndt 420181d531 refactor: code formatting fixes
Signed-off-by: Christopher Arndt <chris@chrisarndt.de>
2024-01-22 11:25:07 +01:00
4 changed files with 335 additions and 16 deletions

163
.editorconfig Normal file
View File

@ -0,0 +1,163 @@
# see https://github.com/CppCXY/EmmyLuaCodeStyle
[*.lua]
# [basic]
# optional space/tab
indent_style = space
# if indent_style is space, this is valid
indent_size = 4
# if indent_style is tab, this is valid
tab_width = 4
# none/single/double
quote_style = none
continuation_indent = 4
## extend option
# continuation_indent.before_block = 4
# continuation_indent.in_expr = 4
# continuation_indent.in_table = 4
# this mean utf8 length , if this is 'unset' then the line width is no longer checked
# this option decides when to chopdown the code
max_line_length = 100
# optional crlf/lf/cr/auto, if it is 'auto', in windows it is crlf other platforms are lf
# in neovim the value 'auto' is not a valid option, please use 'unset'
end_of_line = lf
# none/comma/semicolon/only_kv_colon
table_separator_style = none
#optional keep/never/always/smart
trailing_table_separator = keep
# keep/remove/remove_table_only/remove_string_only
call_arg_parentheses = keep
detect_end_of_line = false
# this will check text end with new line
insert_final_newline = true
# [space]
space_around_table_field_list = true
space_before_attribute = true
space_before_function_open_parenthesis = false
space_before_function_call_open_parenthesis = false
space_before_closure_open_parenthesis = true
# optional always/only_string/only_table/none
# or true/false
space_before_function_call_single_arg = always
## extend option
## always/keep/none
# space_before_function_call_single_arg.table = always
## always/keep/none
# space_before_function_call_single_arg.string = always
space_before_open_square_bracket = false
space_inside_function_call_parentheses = false
space_inside_function_param_list_parentheses = false
space_inside_square_brackets = false
# like t[#t+1] = 1
space_around_table_append_operator = false
ignore_spaces_inside_function_call = false
# detail number or 'keep'
space_before_inline_comment = 1
# [operator space]
space_around_math_operator = true
space_after_comma = true
space_after_comma_in_for_statement = true
# true/false or none/always/no_space_asym
space_around_concat_operator = true
space_around_logical_operator = true
# true/false or none/always/no_space_asym
space_around_assign_operator = true
# [align]
align_call_args = false
align_function_params = true
align_continuous_assign_statement = true
align_continuous_rect_table_field = true
align_continuous_line_space = 2
align_if_branch = false
# option none / always / contain_curly/
align_array_table = true
align_continuous_similar_call_args = false
align_continuous_inline_comment = true
# option none / always / only_call_stmt
align_chain_expr = none
# [indent]
never_indent_before_if_condition = false
never_indent_comment_on_if_branch = false
keep_indents_on_empty_lines = false
# [line space]
# The following configuration supports four expressions
# keep
# fixed(n)
# min(n)
# max(n)
# for eg. min(2)
line_space_after_if_statement = keep
line_space_after_do_statement = keep
line_space_after_while_statement = keep
line_space_after_repeat_statement = keep
line_space_after_for_statement = keep
line_space_after_local_or_assign_statement = keep
line_space_after_function_statement = fixed(2)
line_space_after_expression_statement = keep
line_space_after_comment = keep
line_space_around_block = fixed(1)
# [line break]
break_all_list_when_line_exceed = false
auto_collapse_lines = false
break_before_braces = false
# [preference]
ignore_space_after_colon = false
remove_call_expression_list_finish_comma = false
# keep / always / same_line / replace_with_newline / never
end_statement_with_semicolon = same_line

10
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,10 @@
{
"Lua.runtime.version": "Lua 5.3",
"Lua.diagnostics.globals": [
"ardour",
"factory",
"icon",
"sess_params",
"signals"
]
}

143
ardour_definitions.lua Normal file
View File

@ -0,0 +1,143 @@
---@meta
---@class ID
ID = {}
---@return string
function ID:to_s() end
---@class StatefulDestructible
StatefulDestructible = {}
---@class StatefulDestructiblePtr
StatefulDestructiblePtr = {}
function StatefulDestructiblePtr:clear_changes() end
---@class SessionObjectPtr
SessionObjectPtr = {}
---@return StatefulDestructible
function SessionObjectPtr:to_statefuldestructible() end
---@return ID
function StatefulDestructiblePtr:id() end
---@class Temporal
Temporal = {}
---@param pos integer
---@return timepos_t
function Temporal.timepos_t(pos) end
---@param pos integer
---@return timecnt_t
function Temporal.timecnt_t(pos) end
---@class timepos_t
timepos_t = {}
---@class timecnt_t
timecnt_t = {}
---@class Location
Location = {}
---@return string
function Location:name() end
---@class Locations
Locations = {}
---@param pos timepos_t
---@param cnt timecnt_t
---@param flag boolean
---@return Location
function Locations:range_starts_at(pos, cnt, flag) end
---@class Route
Route = {}
---@return Track
function Route:to_track() end
---@class RouteListPtr
RouteListPtr = {}
---@return fun():Route
function RouteListPtr:iter() end
---@class Region: SessionObjectPtr
Region = {}
---@return boolean
function Region:isnil() end
---@return timepos_t
function Region:position() end
---@param string name
function Region:set_name(name) end
---@return AudioRegion
function Region:to_audioregion() end
---@return StatefulDestructiblePtr
function Region:to_stateful() end
---@class RegionList
RegionList = {}
---@return fun():Region
function RegionList:iter() end
---@class RegionSelection
RegionSelection = {}
---@return RegionList
function RegionSelection:regionlist() end
---@class AudioRegion: Region
AudioRegion = {}
---@return boolean
function AudioRegion:isnil() end
---@class Playlist
Playlist = {}
---@param region_id ID
---@return Region
function Playlist:region_by_id(region_id) end
---@class Track
Track = {}
---@return Playlist
function Track:playlist() end
---@return string
function Track:name() end
---@class Command
Command = {}
---@class Selection
---@field regions RegionSelection
Selection = {}
---@class Session
Session = {}
---@return Locations
function Session:locations() end
---@return RouteListPtr
function Session:get_tracks() end
---@param name string
function Session:begin_reversible_command(name) end
---@param obj StatefulDestructible|StatefulDestructiblePtr
function Session:add_stateful_diff_command(obj) end
function Session:abort_empty_reversible_command() end
---@param cmd Command|nil
function Session:commit_reversible_command(cmd?) end
---@class Editor
Editor = {}
---@return Selection
function Editor:get_selection() end

View File

@ -9,29 +9,30 @@ ardour {
function factory()
-- there is currently no direct way to find the track
-- corresponding to a [selected] region
function find_track_for_region(region_id)
---@param region_id ID
---@return Track?
local function find_track_for_region(region_id)
for route in Session:get_tracks():iter() do
local track = route:to_track();
local pl = track:playlist ()
local track = route:to_track()
local pl = track:playlist()
if not pl:region_by_id(region_id):isnil() then
return track
end
end
assert (0) -- can't happen, region must be in a playlist
assert(0) -- can't happen, region must be in a playlist
end
return function()
local sel = Editor:get_selection () -- get current selection
return function ()
local sel = Editor:get_selection() -- get current selection
local loc = Session:locations() -- get locations
-- prepare undo operation
Session:begin_reversible_command ("Rename regions from markers")
Session:begin_reversible_command("Rename regions from markers")
-- for each selected region...
for region in sel.regions:regionlist():iter () do
for region in sel.regions:regionlist():iter() do
-- test if it's an audio region
local ar = region:to_audioregion ()
if ar:isnil() then
if region:to_audioregion():isnil() then
goto next
end
@ -48,6 +49,7 @@ function factory()
local track = find_track_for_region(rid)
if track then
region:to_stateful():clear_changes()
--~ print("Marker label:", mloc:name())
@ -56,6 +58,7 @@ function factory()
-- collect undo data
Session:add_stateful_diff_command(region:to_statefuldestructible())
end
::next::
end