From af6d72c572408ff2976863f30cc2010c27de634e Mon Sep 17 00:00:00 2001 From: Prerak Mann Date: Mon, 24 Jul 2023 17:20:36 +0530 Subject: [PATCH] =?UTF-8?q?Fix=20doc=20comment=20missing=20on=20struct/uni?= =?UTF-8?q?on=20array=20fields,=20update=20test,=20ve=E2=80=A6=20(#593)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 4 ++++ lib/src/code_generator/compound.dart | 10 +++++----- .../header_parser/sub_parsers/functiondecl_parser.dart | 4 ++-- pubspec.yaml | 2 +- test/header_parser_tests/comment_markup.h | 3 +++ .../_expected_comment_markup_bindings.dart | 4 ++++ 6 files changed, 19 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c6919af9..1b70ff75 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 9.0.1 + +- Fix doc comment missing on struct/union array fields. + # 9.0.0 - Added a JSON schema for FFIgen config files. diff --git a/lib/src/code_generator/compound.dart b/lib/src/code_generator/compound.dart index 894d3799..db755826 100644 --- a/lib/src/code_generator/compound.dart +++ b/lib/src/code_generator/compound.dart @@ -134,17 +134,17 @@ abstract class Compound extends BindingType { const depth = ' '; for (final m in members) { m.name = localUniqueNamer.makeUnique(m.name); + if (m.dartDoc != null) { + s.write('$depth/// '); + s.writeAll(m.dartDoc!.split('\n'), '\n$depth/// '); + s.write('\n'); + } if (m.type is ConstantArray) { s.write('$depth@${w.ffiLibraryPrefix}.Array.multi('); s.write('${_getArrayDimensionLengths(m.type)})\n'); s.write('${depth}external ${_getInlineArrayTypeString(m.type, w)} '); s.write('${m.name};\n\n'); } else { - if (m.dartDoc != null) { - s.write('$depth/// '); - s.writeAll(m.dartDoc!.split('\n'), '\n$depth/// '); - s.write('\n'); - } if (!sameDartAndCType(m.type, w)) { s.write('$depth@${m.type.getCType(w)}()\n'); } diff --git a/lib/src/header_parser/sub_parsers/functiondecl_parser.dart b/lib/src/header_parser/sub_parsers/functiondecl_parser.dart index 94d5ed01..552a0d43 100644 --- a/lib/src/header_parser/sub_parsers/functiondecl_parser.dart +++ b/lib/src/header_parser/sub_parsers/functiondecl_parser.dart @@ -70,8 +70,8 @@ List? parseFunctionDeclaration(clang_types.CXCursor cursor) { // Initialized with a single value with no prefix and empty var args. var varArgFunctions = [VarArgFunction('', [])]; - if (clang.clang_isFunctionTypeVariadic(cursor.type()) == 1) { - if (config.varArgFunctions.containsKey(funcName)) { + if (config.varArgFunctions.containsKey(funcName)) { + if (clang.clang_isFunctionTypeVariadic(cursor.type()) == 1) { varArgFunctions = config.varArgFunctions[funcName]!; } else { _logger.warning( diff --git a/pubspec.yaml b/pubspec.yaml index 68a08628..3a8e0c15 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ # BSD-style license that can be found in the LICENSE file. name: ffigen -version: 9.0.0 +version: 9.0.1 description: Generator for FFI bindings, using LibClang to parse C header files. repository: https://github.com/dart-lang/ffigen diff --git a/test/header_parser_tests/comment_markup.h b/test/header_parser_tests/comment_markup.h index b3912dab..635c2c3c 100644 --- a/test/header_parser_tests/comment_markup.h +++ b/test/header_parser_tests/comment_markup.h @@ -23,4 +23,7 @@ struct Com4{ /* Single line field comment. */ float b; + + /* Comment on array member. */ + int c[3]; }; diff --git a/test/header_parser_tests/expected_bindings/_expected_comment_markup_bindings.dart b/test/header_parser_tests/expected_bindings/_expected_comment_markup_bindings.dart index 05754781..91d99088 100644 --- a/test/header_parser_tests/expected_bindings/_expected_comment_markup_bindings.dart +++ b/test/header_parser_tests/expected_bindings/_expected_comment_markup_bindings.dart @@ -61,4 +61,8 @@ final class Com4 extends ffi.Struct { /// Single line field comment. @ffi.Float() external double b; + + /// Comment on array member. + @ffi.Array.multi([3]) + external ffi.Array c; }