Skip to content

Commit

Permalink
Separate each class generated with gen_bindings.py
Browse files Browse the repository at this point in the history
  • Loading branch information
smolck committed Oct 23, 2019
1 parent 6824f9d commit 9a53fbe
Show file tree
Hide file tree
Showing 10 changed files with 460 additions and 386 deletions.
3 changes: 3 additions & 0 deletions analysis_options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,6 @@ include: package:pedantic/analysis_options.yaml
analyzer:
exclude:
- gen_bindings/dart_nvim_api.dart
gen_bindings/src/buffer.dart
gen_bindings/src/tabpage.dart
gen_bindings/src/window.dart
32 changes: 7 additions & 25 deletions gen_bindings/dart_nvim_api.dart
Original file line number Diff line number Diff line change
@@ -1,40 +1,22 @@
// Generated {{ date }} by `gen_bindings.py`.
// Generated 2019-10-23 12:28:11.546414 by `gen_bindings.py`.
// DO NOT MODIFY DIRECTLY!

import 'dart:async';

import 'package:meta/meta.dart';

import 'src/tabpage.dart';
import 'src/window.dart';
import 'src/buffer.dart';
import 'src/session.dart';
import 'src/ui_attach_options.dart';

export 'src/tabpage.dart';
export 'src/window.dart';
export 'src/buffer.dart';
export 'src/session.dart';
export 'src/ui_attach_options.dart';

{% for etype in exttypes %}
class {{ etype.name }} {
dynamic _codeData;
/// Internal value that represents the type.
get codeData => _codeData;
{{ etype.name }}(this._codeData);

{% for f in functions if f.ext and f.name.startswith(etype.prefix) %}
{% set trimmedFname = f.name | replace('nvim_', '') %}
/// since: {{ f.since }}
Future<{{ f.return_type.native_type_ret }}> {{ to_camel_case(trimmedFname) }}(Neovim neovim, {{ f.argstring }}) {
{% set trimmedFname = f.name | replace('nvim_', '') %}
return neovim.session.call("{{f.name}}",
args: [_codeData
{% if f.parameters|count > 0 %}
, {{ f.parameters|map(attribute = "name")|join(", ") }}
{% endif %}
]);
}
{% endfor %}
}

{% endfor %}

/// Represents an instance of Neovim which can be communicated with via
/// methods.
class Neovim {
Expand Down
12 changes: 7 additions & 5 deletions gen_bindings/gen_bindings.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,10 @@ def get_api_info(nvim):
return decutf8(msgpack.unpackb(info))


def generate_file(name, outpath, **kw):
def generate_file(name, outpath, location, **kw):
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader(
INPUT), trim_blocks=True)
location), trim_blocks=True)
template = env.get_template(name)
with open(os.path.join(outpath, name), 'w') as fp:
fp.write(template.render(kw))
Expand Down Expand Up @@ -241,14 +241,16 @@ def print_api(api):

if __name__ == '__main__':

if len(sys.argv) < 2 or len(sys.argv) > 3:
if len(sys.argv) < 2 or len(sys.argv) > 4:
print('Usage:')
print('\tgenerate_bindings <nvim>')
print('\tgenerate_bindings <nvim> [path]')
print('\tgenerate_bindings <nvim> [path] [bindings_dir]')
sys.exit(-1)

nvim = sys.argv[1]
outpath = None if len(sys.argv) < 3 else sys.argv[2]
directory = INPUT if len(sys.argv) < 4 else sys.argv[3]

try:
api = get_api_info(sys.argv[1])
Expand All @@ -260,7 +262,7 @@ def print_api(api):
print('Writing auto generated bindings to %s' % outpath)
if not os.path.exists(outpath):
os.makedirs(outpath)
for name in os.listdir(INPUT):
for name in os.listdir(directory):
if name.startswith('.'):
continue
if name.endswith('.dart'):
Expand All @@ -276,7 +278,7 @@ def print_api(api):
env['exttypes'] = exttypes
env['to_camel_case'] = make_camel_case
env['make_args_from_params'] = make_args_from_params
generate_file(name, outpath, **env)
generate_file(name, outpath, directory, **env)

else:
print('Neovim api info:')
Expand Down
26 changes: 26 additions & 0 deletions gen_bindings/src/buffer.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import 'package:dart_nvim_api/dart_nvim_api.dart';

{% for etype in exttypes %}
{% if etype.name == "Buffer" %}
class {{ etype.name }} {
dynamic _codeData;
/// Internal value that represents the type.
get codeData => _codeData;
{{ etype.name }}(this._codeData);

{% for f in functions if f.ext and f.name.startswith(etype.prefix) %}
{% set trimmedFname = f.name | replace('nvim_', '') %}
/// since: {{ f.since }}
Future<{{ f.return_type.native_type_ret }}> {{ to_camel_case(trimmedFname) }}(Neovim neovim, {{ f.argstring }}) {
{% set trimmedFname = f.name | replace('nvim_', '') %}
return neovim.session.call("{{f.name}}",
args: [_codeData
{% if f.parameters|count > 0 %}
, {{ f.parameters|map(attribute = "name")|join(", ") }}
{% endif %}
]);
}
{% endfor %}
}
{% endif %}
{% endfor %}
26 changes: 26 additions & 0 deletions gen_bindings/src/tabpage.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import 'package:dart_nvim_api/dart_nvim_api.dart';

{% for etype in exttypes %}
{% if etype.name == "Tabpage" %}
class {{ etype.name }} {
dynamic _codeData;
/// Internal value that represents the type.
get codeData => _codeData;
{{ etype.name }}(this._codeData);

{% for f in functions if f.ext and f.name.startswith(etype.prefix) %}
{% set trimmedFname = f.name | replace('nvim_', '') %}
/// since: {{ f.since }}
Future<{{ f.return_type.native_type_ret }}> {{ to_camel_case(trimmedFname) }}(Neovim neovim, {{ f.argstring }}) {
{% set trimmedFname = f.name | replace('nvim_', '') %}
return neovim.session.call("{{f.name}}",
args: [_codeData
{% if f.parameters|count > 0 %}
, {{ f.parameters|map(attribute = "name")|join(", ") }}
{% endif %}
]);
}
{% endfor %}
}
{% endif %}
{% endfor %}
26 changes: 26 additions & 0 deletions gen_bindings/src/window.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import 'package:dart_nvim_api/dart_nvim_api.dart';

{% for etype in exttypes %}
{% if etype.name == "Window" %}
class {{ etype.name }} {
dynamic _codeData;
/// Internal value that represents the type.
get codeData => _codeData;
{{ etype.name }}(this._codeData);

{% for f in functions if f.ext and f.name.startswith(etype.prefix) %}
{% set trimmedFname = f.name | replace('nvim_', '') %}
/// since: {{ f.since }}
Future<{{ f.return_type.native_type_ret }}> {{ to_camel_case(trimmedFname) }}(Neovim neovim, {{ f.argstring }}) {
{% set trimmedFname = f.name | replace('nvim_', '') %}
return neovim.session.call("{{f.name}}",
args: [_codeData
{% if f.parameters|count > 0 %}
, {{ f.parameters|map(attribute = "name")|join(", ") }}
{% endif %}
]);
}
{% endfor %}
}
{% endif %}
{% endfor %}
Loading

0 comments on commit 9a53fbe

Please sign in to comment.