Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 14 additions & 5 deletions src/main/kotlin/com/mituuz/fuzzier/entities/RowContainer.kt
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,9 @@ class RowContainer(
return null
}

val parts = row.split(":", limit = 3)
val filePath = getFilePath(parts[0])
val (driveLetter, adjustedRow) = extractWindowsDriveLetter(row)
val parts = adjustedRow.split(":", limit = 3)
val filePath = getFilePath(driveLetter + parts[0])
val filename = filePath.replace('\\', '/').substringAfterLast('/')
val rowNumber = parts[1].toInt() - 1
val trimmedRow: String = parts[2].trim()
Expand All @@ -57,8 +58,9 @@ class RowContainer(
return null
}

val parts = row.split(":", limit = 4)
val filePath = getFilePath(parts[0])
val (driveLetter, adjustedRow) = extractWindowsDriveLetter(row)
val parts = adjustedRow.split(":", limit = 4)
val filePath = getFilePath(driveLetter + parts[0])
val filename = filePath.replace('\\', '/').substringAfterLast('/')
val rowNumber = parts[1].toInt() - 1
val columnNumber: Int = parts[2].toInt() - 1
Expand All @@ -67,9 +69,16 @@ class RowContainer(
return RowContainer(filePath, basePath, filename, rowNumber, trimmedRow, columnNumber)
}

private fun extractWindowsDriveLetter(row: String): Pair<String, String> {
if (row.length >= 2 && row[0].isLetter() && row[1] == ':') {
return Pair(row.substring(0, 2), row.substring(2))
}
return Pair("", row)
}

private fun getFilePath(filePath: String): String {
val filePath = filePath.removePrefix(".")
if (!filePath.startsWith(FILE_SEPARATOR)) {
if (!filePath.startsWith(FILE_SEPARATOR) && !filePath.matches(Regex("^[A-Za-z]:.*"))) {
return "$FILE_SEPARATOR$filePath"
}

Expand Down
32 changes: 32 additions & 0 deletions src/test/kotlin/com/mituuz/fuzzier/entities/RowContainerTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -146,4 +146,36 @@ class RowContainerTest {

assertNull(rc, "Expected null for input with insufficient parts")
}

@Test
@EnabledOnOs(OS.WINDOWS)
fun fromRGString_windowsAbsolutePath() {
val input = "C:/Users/user/.ideavimrc:10:5: some matched text"
val basePath = "C:\\Users\\user\\IdeaProjects\\fuzzier"
val rc = rgRowContainerFromString(input, basePath)

assertNotNull(rc, "Could not create row container from $input")
assertEquals("C:/Users/user/.ideavimrc", rc.filePath)
assertEquals(basePath, rc.basePath)
assertEquals(".ideavimrc", rc.filename)
assertEquals(9, rc.rowNumber)
assertEquals(4, rc.columnNumber)
assertEquals("some matched text", rc.trimmedRow)
}

@Test
@EnabledOnOs(OS.WINDOWS)
fun fromGrepString_windowsAbsolutePath() {
val input = "C:/Users/user/.ideavimrc:10: some matched text"
val basePath = "C:\\Users\\user\\IdeaProjects\\fuzzier"
val rc = rowContainerFromString(input, basePath)

assertNotNull(rc, "Could not create row container from $input")
assertEquals("C:/Users/user/.ideavimrc", rc.filePath)
assertEquals(basePath, rc.basePath)
assertEquals(".ideavimrc", rc.filename)
assertEquals(9, rc.rowNumber)
assertEquals(0, rc.columnNumber)
assertEquals("some matched text", rc.trimmedRow)
}
}