diff --git a/lib/src/pubspec_indexer.dart b/lib/src/pubspec_indexer.dart index 493a0f3..f2502ca 100644 --- a/lib/src/pubspec_indexer.dart +++ b/lib/src/pubspec_indexer.dart @@ -24,30 +24,22 @@ Document indexPubspec({ }) { final pubspecLineInfo = LineInfo.fromContent(pubspecStr); - final fileSymbol = [ - 'scip-dart', - 'pub', - pubspec.name, - pubspec.version!, - '`pubspec.yaml`/', - ].join(' '); + final symbols = []; + final occurrences = []; - final symbols = [ - SymbolInformation( - symbol: fileSymbol, - kind: SymbolInformation_Kind - .UnspecifiedKind, // TODO: Add SymbolInformation_Kind.Dependency - signatureDocumentation: Document( - language: Language.YAML.name, - text: ['name: ${pubspec.name}', 'version: ${pubspec.version}'] - .join('\n'))) - ]; - final occurrences = [ - Occurrence( - symbol: fileSymbol, + // a 'none' publishTo implies that the pubspec.yaml file (and project) are not + // actually published to a pub server, and only used for testing. We still want + // to index the dependencies in this case, but avoid creating the file symbol + // to reduce duplicate packages names + if (pubspec.publishTo != 'none') { + final info = _buildFileSymbol(pubspec); + symbols.add(info); + occurrences.add(Occurrence( + symbol: info.symbol, + symbolRoles: SymbolRole.Definition.value, range: [0, 0, 0], - ) - ]; + )); + } final deps = { DependencyKind.regular: pubspec.dependencies, @@ -73,6 +65,29 @@ Document indexPubspec({ ); } +SymbolInformation _buildFileSymbol(Pubspec pubspec) { + final symbol = [ + 'scip-dart', + 'pub', + pubspec.name, + pubspec.version ?? '*', + '`pubspec.yaml`/', + ].join(' '); + + return SymbolInformation( + symbol: symbol, + kind: SymbolInformation_Kind + .UnspecifiedKind, // TODO: Add SymbolInformation_Kind.Dependency + signatureDocumentation: Document( + language: Language.YAML.name, + text: [ + 'name: ${pubspec.name}', + 'version: ${pubspec.version}', + ].join('\n'), + ), + ); +} + SymbolInformation _buildSymbol(String depName, PubspecLock lock) { final depVersion = lock.packages[depName]?.version.toString(); if (depVersion == null) { @@ -80,23 +95,27 @@ SymbolInformation _buildSymbol(String depName, PubspecLock lock) { 'Unable to find ${depName} in pubspec.lock. Have you ran pub get?'); } + final symbol = [ + 'scip-dart', + 'pub', + depName, + depVersion, + '`pubspec.yaml`/', + ].join(' '); + return SymbolInformation( - displayName: depName, - symbol: [ - 'scip-dart', - 'pub', - depName, - depVersion, - '`pubspec.yaml`/', - ].join(' '), - kind: SymbolInformation_Kind - .UnspecifiedKind, // TODO: Add SymbolInformation_Kind.Dependency and SymbolInformation_Kind.DevDependency - signatureDocumentation: Document( - language: Language.YAML.name, - text: [ - 'name: $depName', - 'version: $depVersion', - ].join('\n'))); + displayName: depName, + symbol: symbol, + kind: SymbolInformation_Kind + .UnspecifiedKind, // TODO: Add SymbolInformation_Kind.Dependency and SymbolInformation_Kind.DevDependency + signatureDocumentation: Document( + language: Language.YAML.name, + text: [ + 'name: $depName', + 'version: $depVersion', + ].join('\n'), + ), + ); } enum DependencyKind { diff --git a/snapshots/output/basic-project/pubspec.yaml b/snapshots/output/basic-project/pubspec.yaml index ea4b27a..a38e70e 100755 --- a/snapshots/output/basic-project/pubspec.yaml +++ b/snapshots/output/basic-project/pubspec.yaml @@ -1,5 +1,5 @@ name: dart_test -// reference scip-dart pub dart_test 1.0.0 `pubspec.yaml`/ +// definition scip-dart pub dart_test 1.0.0 `pubspec.yaml`/ version: 1.0.0 environment: diff --git a/snapshots/output/diagnostics/pubspec.yaml b/snapshots/output/diagnostics/pubspec.yaml index 91cf323..f96b652 100755 --- a/snapshots/output/diagnostics/pubspec.yaml +++ b/snapshots/output/diagnostics/pubspec.yaml @@ -1,5 +1,5 @@ name: dart_test_diagnostics -// reference scip-dart pub dart_test_diagnostics 1.0.0 `pubspec.yaml`/ +// definition scip-dart pub dart_test_diagnostics 1.0.0 `pubspec.yaml`/ version: 1.0.0 environment: