describe-d 0.2.0

Library that provides structures for code introspection


To use this package, run the following command in your project's root directory:

Manual usage
Put the following dependency into your project's dependences section:

describe.d

describe.d is a library that provides a structured interface to introspect DLang source code.

Usage

Introspection

The library provides the describe template which returns a structure with the introspection result:

import described;

/// Introspecting modules
assert(describe!(std.array).name == "module array");
assert(describe!(std.array).fullyQualifiedName == "std.array");
assert(describe!(std.array).functions.length == 1);
assert(describe!(std.array).templates.length == 31);

/// Introspecting aggregates
struct MyStruct {
  void callMe() {
  }
}

assert(describe!MyStruct.name == "MyStruct");
assert(describe!MyStruct.methods.length == 1);
assert(describe!MyStruct.methods[0].name == "callMe");
assert(describe!MyStruct.methods[0].returns.name.should.equal("void"));

/// Introspecting methods
assert(describe!(MyStruct.callMe).name == "MyStruct");
assert(describe!(MyStruct.callMe).returns.name.should.equal("void"));

Given an introspected Type like a class or struct, it can be converted to the D type using fromType:

  alias T = fromType!(describe!RandomClass.type);

  static assert(is(T == RandomClass));

Filtering

The library provides the where structure which allows you to filter the describe result.

by attribute name

  struct Test {
    @("test") void foo() { }
    @("other") void other() { }
  }

  /// Check that there is a method with the string attribute "test"
  static assert(describe!Test.methods.where.attribute!`"test"`.exists);

  /// Iterate over the methods with the "test" attribute
  static foreach(method; describe!Test.methods.where.attribute!`"test"`) {
    ...
  }

by type

The types can be queried by name or by the fullyQualifiedName

  enum moduleDescription = describe!(my.module);

  static assert(moduleDescription.aggregates.where.typeIs!"TestStructure".exists);
  static assert(moduleDescription.aggregates.where.typeIs!"my.module.TestStructure".exists);

  static assert(moduleDescription.aggregates.where.typeIsAnyOf!("TestStructure", "TestClass").exists);
  static assert(moduleDescription.aggregates.where.typeIsAnyOf!("my.module.TestStructure", "my.module.TestClass").exists);

  /// negations
  static assert(moduleDescription.aggregates.where.typeIsNot!"TestStructure".exists);
  static assert(moduleDescription.aggregates.where.typeIsNot!"my.module.TestStructure".exists);

  static assert(moduleDescription.aggregates.where.typeIsNotAnyOf!("TestStructure", "TestClass").exists);
  static assert(moduleDescription.aggregates.where.typeIsNotAnyOf!("my.module.TestStructure", "my.module.TestClass").exists);

License

This project is licensed under the MIT license - see the LICENSE file for details.

Authors:
  • Szabo Bogdan
Dependencies:
none
Versions:
0.11.1 2023-Jun-02
0.11.0 2022-Dec-03
0.10.0 2021-Apr-03
0.9.0 2021-Apr-03
0.8.0 2020-Oct-28
Show all 13 versions
Download Stats:
  • 4 downloads today

  • 8 downloads this week

  • 25 downloads this month

  • 4758 downloads total

Score:
0.9
Short URL:
describe-d.dub.pm