diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index b824111..4c68028 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -14,7 +14,7 @@ jobs: - uses: actions/checkout@v3 - name: Install scip cli run: | - bash -c 'curl -L "https://github.com/sourcegraph/scip/releases/download/v0.2.3/scip-linux-amd64.tar.gz"' | tar xzf - scip + bash -c 'curl -L "https://github.com/sourcegraph/scip/releases/download/v0.3.0/scip-linux-amd64.tar.gz"' | tar xzf - scip ./scip --version - uses: dart-lang/setup-dart@v1 @@ -24,15 +24,22 @@ jobs: - name: pub get scip-dart package run: dart pub get - - name: pub get snapshots directory + - name: pub get basic-project directory run: dart pub get working-directory: ./snapshots/input/basic-project + - name: pub get relationships-project directory + run: dart pub get + working-directory: ./snapshots/input/relationships-project + - name: Snapshots Diff Check run: | dart run scip_dart ./snapshots/input/basic-project ./scip snapshot --to ./snapshots/output/basic-project + dart run scip_dart --index-relationships ./snapshots/input/relationships-project + ./scip snapshot --to ./snapshots/output/relationships-project + if [[ -z "$(git status --porcelain ./snapshots/output)" ]]; then echo "No changes to snapshot files" diff --git a/Makefile b/Makefile index 3a08157..a57f6ae 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,10 @@ regen-snapshots: - dart run scip_dart ./snapshots/input/basic-project --verbose + dart run scip_dart ./snapshots/input/basic-project scip snapshot --to ./snapshots/output/basic-project + dart run scip_dart --index-relationships ./snapshots/input/relationships-project + scip snapshot --to ./snapshots/output/relationships-project + run: dart run scip_dart ./snapshots/input/staging-project --verbose diff --git a/bin/scip_dart.dart b/bin/scip_dart.dart index ff37555..189546a 100644 --- a/bin/scip_dart.dart +++ b/bin/scip_dart.dart @@ -10,6 +10,13 @@ import 'package:scip_dart/src/version.dart'; Future main(List args) async { final result = (ArgParser() + ..addFlag( + 'index-relationships', + defaultsTo: false, + help: 'Whether or not to index symbol relationships. ' + 'This functionality is currently in alpha, and should not be ' + 'considered stable and accurate.', + ) ..addFlag( 'performance', aliases: ['perf'], @@ -22,8 +29,11 @@ Future main(List args) async { defaultsTo: false, help: 'Whether or not to display debugging text during indexing', ) - ..addFlag('version', - defaultsTo: false, help: 'Display the current version of scip-dart') + ..addFlag( + 'version', + defaultsTo: false, + help: 'Display the current version of scip-dart', + ) ..addMultiOption( 'path', abbr: 'p', diff --git a/lib/src/flags.dart b/lib/src/flags.dart index cc1a7d6..3d66017 100644 --- a/lib/src/flags.dart +++ b/lib/src/flags.dart @@ -7,9 +7,13 @@ class Flags { bool get performance => _performance; bool _performance = false; + bool get indexRelationships => _indexRelationships; + bool _indexRelationships = false; + void init(ArgResults results) { _verbose = results['verbose'] as bool? ?? false; _performance = results['performance'] as bool? ?? false; + _indexRelationships = results['index-relationships'] as bool? ?? false; } static Flags get instance => _instance; diff --git a/lib/src/scip_visitor.dart b/lib/src/scip_visitor.dart index 9a5a8cc..d3002ee 100644 --- a/lib/src/scip_visitor.dart +++ b/lib/src/scip_visitor.dart @@ -4,6 +4,7 @@ import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/source/line_info.dart'; import 'package:package_config/package_config.dart'; import 'package:pubspec_parse/pubspec_parse.dart'; +import 'package:scip_dart/src/flags.dart'; import 'package:scip_dart/src/metadata.dart'; import 'package:scip_dart/src/gen/scip.pb.dart'; import 'package:scip_dart/src/relationship_generator.dart'; @@ -62,9 +63,15 @@ class ScipVisitor extends GeneralizingAstVisitor { if (node.declaredElement == null) return; final element = node.declaredElement!; + + List? relationships; + if (Flags.instance.indexRelationships) { + relationships = relationshipsFor(node, element, _symbolGenerator); + } + _registerAsDefinition( element, - relationships: relationshipsFor(node, element, _symbolGenerator), + relationships: relationships, ); } diff --git a/pubspec.lock b/pubspec.lock index ca9fe15..ecdf853 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -21,7 +21,7 @@ packages: name: args url: "https://pub.dartlang.org" source: hosted - version: "2.4.2" + version: "2.4.1" async: dependency: transitive description: @@ -175,7 +175,7 @@ packages: name: glob url: "https://pub.dartlang.org" source: hosted - version: "2.1.2" + version: "2.1.1" graphs: dependency: transitive description: diff --git a/snapshots/input/basic-project/lib/relationships.dart b/snapshots/input/relationships-project/lib/main.dart similarity index 100% rename from snapshots/input/basic-project/lib/relationships.dart rename to snapshots/input/relationships-project/lib/main.dart diff --git a/snapshots/input/relationships-project/pubspec.lock b/snapshots/input/relationships-project/pubspec.lock new file mode 100644 index 0000000..89b205e --- /dev/null +++ b/snapshots/input/relationships-project/pubspec.lock @@ -0,0 +1,5 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: {} +sdks: + dart: ">=2.18.0 <3.0.0" diff --git a/snapshots/input/relationships-project/pubspec.yaml b/snapshots/input/relationships-project/pubspec.yaml new file mode 100644 index 0000000..e565a0b --- /dev/null +++ b/snapshots/input/relationships-project/pubspec.yaml @@ -0,0 +1,5 @@ +name: dart_test +version: 1.0.0 + +environment: + sdk: ">=2.18.0 <3.0.0" \ No newline at end of file diff --git a/snapshots/output/basic-project/lib/more.dart b/snapshots/output/basic-project/lib/more.dart index 28b9dbe..94af943 100755 --- a/snapshots/output/basic-project/lib/more.dart +++ b/snapshots/output/basic-project/lib/more.dart @@ -35,7 +35,6 @@ class Animal with SleepMixin { // ^^^^^^ definition scip-dart pub dart_test 1.0.0 lib/more.dart/Animal# // documentation ```dart -// relationship scip-dart pub dart_test 1.0.0 lib/more.dart/SleepMixin# implementation // ^^^^^^^^^^ reference scip-dart pub dart_test 1.0.0 lib/more.dart/SleepMixin# String name; // ^^^^^^ reference scip-dart pub dart:core 2.18.0 dart:core/string.dart/String# @@ -103,7 +102,6 @@ // ^^^^^^ reference scip-dart pub dart:core 2.18.0 dart:core/string.dart/String# // ^^^^^^^^ definition scip-dart pub dart_test 1.0.0 lib/more.dart/Animal#toString(). // documentation ```dart -// relationship scip-dart pub dart:core 2.18.0 dart:core/object.dart/Object#toString(). implementation reference return '$name the $type'; // ^^^^ reference scip-dart pub dart_test 1.0.0 lib/more.dart/Animal#name. // ^^^^ reference scip-dart pub dart_test 1.0.0 lib/more.dart/Animal#type. diff --git a/snapshots/output/basic-project/lib/relationships.dart b/snapshots/output/relationships-project/lib/main.dart similarity index 58% rename from snapshots/output/basic-project/lib/relationships.dart rename to snapshots/output/relationships-project/lib/main.dart index 29b0f41..b99c84b 100755 --- a/snapshots/output/basic-project/lib/relationships.dart +++ b/snapshots/output/relationships-project/lib/main.dart @@ -1,54 +1,54 @@ abstract class Mammal { -// definition scip-dart pub dart_test 1.0.0 lib/relationships.dart/ -// ^^^^^^ definition scip-dart pub dart_test 1.0.0 lib/relationships.dart/Mammal# +// definition scip-dart pub dart_test 1.0.0 lib/main.dart/ +// ^^^^^^ definition scip-dart pub dart_test 1.0.0 lib/main.dart/Mammal# // documentation ```dart String get hierarchy; // ^^^^^^ reference scip-dart pub dart:core 2.18.0 dart:core/string.dart/String# -// ^^^^^^^^^ definition scip-dart pub dart_test 1.0.0 lib/relationships.dart/Mammal#hierarchy. +// ^^^^^^^^^ definition scip-dart pub dart_test 1.0.0 lib/main.dart/Mammal#hierarchy. // documentation ```dart } abstract class Animal extends Mammal { -// ^^^^^^ definition scip-dart pub dart_test 1.0.0 lib/relationships.dart/Animal# +// ^^^^^^ definition scip-dart pub dart_test 1.0.0 lib/main.dart/Animal# // documentation ```dart -// relationship scip-dart pub dart_test 1.0.0 lib/relationships.dart/Mammal# implementation -// ^^^^^^ reference scip-dart pub dart_test 1.0.0 lib/relationships.dart/Mammal# +// relationship scip-dart pub dart_test 1.0.0 lib/main.dart/Mammal# implementation +// ^^^^^^ reference scip-dart pub dart_test 1.0.0 lib/main.dart/Mammal# String sound() => 'NOISE!'; // ^^^^^^ reference scip-dart pub dart:core 2.18.0 dart:core/string.dart/String# -// ^^^^^ definition scip-dart pub dart_test 1.0.0 lib/relationships.dart/Animal#sound(). +// ^^^^^ definition scip-dart pub dart_test 1.0.0 lib/main.dart/Animal#sound(). // documentation ```dart } mixin SwimAction { -// ^^^^^^^^^^ definition scip-dart pub dart_test 1.0.0 lib/relationships.dart/SwimAction# +// ^^^^^^^^^^ definition scip-dart pub dart_test 1.0.0 lib/main.dart/SwimAction# // documentation ```dart void execute() => print('swimming...'); -// ^^^^^^^ definition scip-dart pub dart_test 1.0.0 lib/relationships.dart/SwimAction#execute(). +// ^^^^^^^ definition scip-dart pub dart_test 1.0.0 lib/main.dart/SwimAction#execute(). // documentation ```dart // ^^^^^ reference scip-dart pub dart:core 2.18.0 dart:core/print.dart/print(). } class Dog extends Animal with SwimAction { -// ^^^ definition scip-dart pub dart_test 1.0.0 lib/relationships.dart/Dog# +// ^^^ definition scip-dart pub dart_test 1.0.0 lib/main.dart/Dog# // documentation ```dart -// relationship scip-dart pub dart_test 1.0.0 lib/relationships.dart/Animal# implementation -// relationship scip-dart pub dart_test 1.0.0 lib/relationships.dart/Mammal# implementation -// relationship scip-dart pub dart_test 1.0.0 lib/relationships.dart/SwimAction# implementation -// ^^^^^^ reference scip-dart pub dart_test 1.0.0 lib/relationships.dart/Animal# -// ^^^^^^^^^^ reference scip-dart pub dart_test 1.0.0 lib/relationships.dart/SwimAction# +// relationship scip-dart pub dart_test 1.0.0 lib/main.dart/Animal# implementation +// relationship scip-dart pub dart_test 1.0.0 lib/main.dart/Mammal# implementation +// relationship scip-dart pub dart_test 1.0.0 lib/main.dart/SwimAction# implementation +// ^^^^^^ reference scip-dart pub dart_test 1.0.0 lib/main.dart/Animal# +// ^^^^^^^^^^ reference scip-dart pub dart_test 1.0.0 lib/main.dart/SwimAction# @override // ^^^^^^^^ reference scip-dart pub dart:core 2.18.0 dart:core/annotations.dart/override. String sound() => 'woof'; // ^^^^^^ reference scip-dart pub dart:core 2.18.0 dart:core/string.dart/String# -// ^^^^^ definition scip-dart pub dart_test 1.0.0 lib/relationships.dart/Dog#sound(). +// ^^^^^ definition scip-dart pub dart_test 1.0.0 lib/main.dart/Dog#sound(). // documentation ```dart -// relationship scip-dart pub dart_test 1.0.0 lib/relationships.dart/Animal#sound(). implementation reference +// relationship scip-dart pub dart_test 1.0.0 lib/main.dart/Animal#sound(). implementation reference @override // ^^^^^^^^ reference scip-dart pub dart:core 2.18.0 dart:core/annotations.dart/override. String get hierarchy => 'dog.animal.mammal'; // ^^^^^^ reference scip-dart pub dart:core 2.18.0 dart:core/string.dart/String# -// ^^^^^^^^^ definition scip-dart pub dart_test 1.0.0 lib/relationships.dart/Dog#hierarchy. +// ^^^^^^^^^ definition scip-dart pub dart_test 1.0.0 lib/main.dart/Dog#hierarchy. // documentation ```dart -// relationship scip-dart pub dart_test 1.0.0 lib/relationships.dart/Mammal#hierarchy. implementation reference +// relationship scip-dart pub dart_test 1.0.0 lib/main.dart/Mammal#hierarchy. implementation reference }