ソースを参照

bindgen: add option to use tiger style for zig

Tiger Style comes from TigerBeetle's Zig style guide that they used for
their popular database (same name).

"Use snake_case for function, variable, and file names. The underscore is the closest thing we have as programmers to a space, and helps to separate words and encourage descriptive names."

https://github.com/tigerbeetle/tigerbeetle/blob/main/docs/TIGER_STYLE.md
Adam Patterson 5 ヶ月 前
コミット
a737aae10c
2 ファイル変更17 行追加8 行削除
  1. 6 2
      bindgen/gen_all.py
  2. 11 6
      bindgen/gen_zig.py

+ 6 - 2
bindgen/gen_all.py

@@ -1,4 +1,8 @@
-import os, gen_nim, gen_zig, gen_odin, gen_rust, gen_d, gen_jai, gen_c3
+import os, argparse, gen_nim, gen_zig, gen_odin, gen_rust, gen_d, gen_jai, gen_c3
+
+parser = argparse.ArgumentParser()
+parser.add_argument("--zig-tiger-style", action="store_true", help="Enable zig tiger style mode.")
+args = parser.parse_args()
 
 tasks = [
     [ '../sokol_log.h',            'slog_',     [] ],
@@ -39,7 +43,7 @@ zig_tasks = [
 gen_zig.prepare()
 for task in zig_tasks:
     [c_header_path, main_prefix, dep_prefixes] = task
-    gen_zig.gen(c_header_path, main_prefix, dep_prefixes)
+    gen_zig.gen(c_header_path, main_prefix, dep_prefixes, {"tiger-style": args.zig_tiger_style})
 
 # D
 d_tasks = [

+ 11 - 6
bindgen/gen_zig.py

@@ -420,9 +420,13 @@ def gen_func_c(decl, prefix):
     l(f"extern fn {decl['name']}({funcdecl_args_c(decl, prefix)}) {funcdecl_result_c(decl, prefix)};")
     l('')
 
-def gen_func_zig(decl, prefix):
+def gen_func_zig(decl, prefix, tiger_style=False):
     c_func_name = decl['name']
-    zig_func_name = util.as_lower_camel_case(check_override(decl['name']), prefix)
+    if not tiger_style:
+        zig_func_name = util.as_lower_camel_case(check_override(decl['name']), prefix)
+    else:
+        zig_func_name = util.as_lower_snake_case(check_override(decl['name']), prefix)
+
     c(decl.get('comment'))
     if c_func_name in c_callbacks:
         # a simple forwarded C callback function
@@ -552,7 +556,7 @@ def gen_helpers(inp):
         l('}')
         l('')
 
-def gen_module(inp, dep_prefixes):
+def gen_module(inp, dep_prefixes, opt={}):
     l('// machine generated, do not edit')
     if inp.get('comment'):
         l('')
@@ -574,7 +578,8 @@ def gen_module(inp, dep_prefixes):
                     gen_enum(decl, prefix)
                 elif kind == 'func':
                     gen_func_c(decl, prefix)
-                    gen_func_zig(decl, prefix)
+                    tiger_style = opt.get('tiger-style', False)
+                    gen_func_zig(decl, prefix, tiger_style=tiger_style)
 
 def prepare():
     print('=== Generating Zig bindings:')
@@ -583,7 +588,7 @@ def prepare():
     if not os.path.isdir('sokol-zig/src/sokol/c'):
         os.makedirs('sokol-zig/src/sokol/c')
 
-def gen(c_header_path, c_prefix, dep_c_prefixes):
+def gen(c_header_path, c_prefix, dep_c_prefixes, opt={}):
     if not c_prefix in module_names:
         print(f' >> warning: skipping generation for {c_prefix} prefix...')
         return
@@ -593,7 +598,7 @@ def gen(c_header_path, c_prefix, dep_c_prefixes):
     reset_globals()
     shutil.copyfile(c_header_path, f'sokol-zig/src/sokol/c/{os.path.basename(c_header_path)}')
     ir = gen_ir.gen(c_header_path, c_source_path, module_name, c_prefix, dep_c_prefixes, with_comments=True)
-    gen_module(ir, dep_c_prefixes,)
+    gen_module(ir, dep_c_prefixes, opt)
     output_path = f"sokol-zig/src/sokol/{ir['module']}.zig"
     with open(output_path, 'w', newline='\n') as f_outp:
         f_outp.write(out_lines)