# Proposal: Adding line/column to SourceKit's import declaration's index

**URL:** <https://forums.swift.org/t/proposal-adding-line-column-to-sourcekits-import-declarations-index/15631>\
**Category:** Source Tooling\
**Tags:** sourcekit\
**Created:** [August 29, 2018, 12:42pm UTC](https://forums.swift.org/t/proposal-adding-line-column-to-sourcekits-import-declarations-index/15631 "2018-08-29T12:42:20Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![rockbruno](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/rockbruno/32/41051_2.png) [@rockbruno](https://forums.swift.org/u/rockbruno)\
**Post date:** [August 29, 2018, 12:42pm UTC](https://forums.swift.org/t/proposal-adding-line-column-to-sourcekits-import-declarations-index/15631/1 "2018-08-29T12:42:20Z")

</div>

Hello guys, please forgive me and feel free to close this thread if this isn't the correct forum for this kind of discussion!

I've been playing a lot with SourceKit's index request for a few of my tools and noticed the lack of some potential features that could benefit tools that rely on SourceKit.

In my tool's case, I'm having a dire need of knowing the line and column of import declarations directly in the index request.

```swift
{
      key.kind: source.lang.swift.import.module.clang,
      key.name: "MyLibrary",
      key.filepath: "path",
      // key.line: 2,
      // key.column: 8
}

```

As most entities already provide this info, I thought it wouldn't be too disruptive if the imports also had them. My C++ is rusty, but looking at [SwiftIndexing.cpp](https://github.com/apple/swift/blob/6fc4cef671947d1d2482951853f7f82854473d91/tools/SourceKit/lib/SwiftLang/SwiftIndexing.cpp#L57) and its sister files makes me think it's possible to do so without too much trouble.

What do you guys think?

---

<div class="post-metadata">

**Author:** ![taylorswift](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/taylorswift/32/43413_2.png) [@taylorswift](https://forums.swift.org/u/taylorswift)\
**Post date:** [August 29, 2018, 4:59pm UTC](https://forums.swift.org/t/proposal-adding-line-column-to-sourcekits-import-declarations-index/15631/2 "2018-08-29T16:59:28Z")

</div>

related: [SourceKit get 2D character indices (instead of byte indices) - #6 by taylorswift](https://forums.swift.org/t/sourcekit-get-2d-character-indices-instead-of-byte-indices/14692/6)

---

<div class="post-metadata">

**Author:** ![akyrtzi](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/akyrtzi/32/4963_2.png) [@akyrtzi](https://forums.swift.org/u/akyrtzi)\
**Post date:** [August 31, 2018, 12:44am UTC](https://forums.swift.org/t/proposal-adding-line-column-to-sourcekits-import-declarations-index/15631/3 "2018-08-31T00:44:17Z")

</div>

The 'key.dependencies' entries is a set and don't directly correlate to source occurrences, meaning if you have:

```swift
import MyLibrary
import MyLibrary

```

You are going to see one entry for 'MyLibrary' in 'key.dependencies' entries.  
But I think it would be useful to add entries to 'key.entities' representing module imports, including line info. For the above example there would be 2 entries, one for each import.

---

<div class="post-metadata">

**Author:** ![rockbruno](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/rockbruno/32/41051_2.png) [@rockbruno](https://forums.swift.org/u/rockbruno)\
**Post date:** [August 31, 2018, 8:38pm UTC](https://forums.swift.org/t/proposal-adding-line-column-to-sourcekits-import-declarations-index/15631/4 "2018-08-31T20:38:50Z")

</div>

Adding 'key.entities' entries sounds great - If I'm correct, that could also cover explicit library references in code such as:

`let foo = Swift.String()`

These are also currently not visible in indexSources but feel like a very useful info to identify - at least for my tool.

---

<div class="post-metadata">

**Author:** ![akyrtzi](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/akyrtzi/32/4963_2.png) [@akyrtzi](https://forums.swift.org/u/akyrtzi)\
**Post date:** [August 31, 2018, 8:42pm UTC](https://forums.swift.org/t/proposal-adding-line-column-to-sourcekits-import-declarations-index/15631/5 "2018-08-31T20:42:22Z")

</div>

Yes, that'd be useful!

---

<div class="post-metadata">

**Author:** ![rockbruno](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/rockbruno/32/41051_2.png) [@rockbruno](https://forums.swift.org/u/rockbruno)\
**Post date:** [August 31, 2018, 9:09pm UTC](https://forums.swift.org/t/proposal-adding-line-column-to-sourcekits-import-declarations-index/15631/6 "2018-08-31T21:09:26Z")

</div>

Do you consider this a Starter task Argyrios? I would love to try to implement this, would just need some file paths and small directions as I never wandered outside the Standard Library.

---

<div class="post-metadata">

**Author:** ![akyrtzi](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/akyrtzi/32/4963_2.png) [@akyrtzi](https://forums.swift.org/u/akyrtzi)\
**Post date:** [August 31, 2018, 9:24pm UTC](https://forums.swift.org/t/proposal-adding-line-column-to-sourcekits-import-declarations-index/15631/7 "2018-08-31T21:24:10Z")

</div>

I think so. Start a JIRA issue and we could iterate.  
For module references note that `SourceEntityWalker::visitModuleReference()` exists as callback but `IndexSwiftASTWalker` is not overriding it to take advantage of it.

---

<div class="post-metadata">

**Author:** ![rockbruno](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/rockbruno/32/41051_2.png) [@rockbruno](https://forums.swift.org/u/rockbruno)\
**Post date:** [August 31, 2018, 9:47pm UTC](https://forums.swift.org/t/proposal-adding-line-column-to-sourcekits-import-declarations-index/15631/8 "2018-08-31T21:47:14Z")

</div>

Done. [[SR-8677] SourceKit: Add module references as indexSource entities · Issue #51191 · apple/swift · GitHub](https://bugs.swift.org/browse/SR-8677)
