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
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
## [0.9.2]

### Fixed
- partial analysis for same length strings

## [0.9.1]

### Fixed
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ repositories {
```

```shell
implementation("dev.snipme:highlights:0.9.1")
implementation("dev.snipme:highlights:0.9.2")
```

## Features ✨
Expand Down
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ plugins {
}

group = "dev.snipme"
version = "0.9.1"
version = "0.9.2"

kotlin {
// Android
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,8 @@ internal object CodeAnalyzer {
codeSnapshot.structure - newStructure.move(lengthDifference)
}

is CodeDifference.Full -> analyzeForLanguage(code, codeSnapshot.language)

CodeDifference.None -> return codeSnapshot.structure
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,19 @@ private const val WORDS_DELIMITER = " "
internal sealed class CodeDifference {
data class Increase(val change: String) : CodeDifference()
data class Decrease(val change: String) : CodeDifference()
object None : CodeDifference()
data object Full : CodeDifference()
data object None : CodeDifference()
}

internal object CodeComparator {
fun difference(current: String, updated: String): CodeDifference {
val currentWords = current.tokenize()
val updatedWords = updated.tokenize()
val currentWords = current.tokenize().map { it.trim() }
val updatedWords = updated.tokenize().map { it.trim() }

return when {
currentWords.size == updatedWords.size -> CodeDifference.None
currentWords.size == updatedWords.size ->
if (currentWords == updatedWords) CodeDifference.None
else CodeDifference.Full

currentWords.size < updatedWords.size -> CodeDifference.Increase(
findDifference(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,13 +66,46 @@ internal class CodeComparatorTest {
}

@Test
fun `Returns none difference for the mixed new phrase`() {
fun `Returns full difference for the mixed new phrase`() {
val currentCode = "@ABCD abcd dd ee"
val newCode = "@ABCD abcd ee dd"

val result = CodeComparator.difference(currentCode, newCode)

assertEquals(CodeDifference.None, result)
assertEquals(CodeDifference.Full, result)
}

@Test
fun `Returns full difference for the char change in token`() {
val currentCode = "const foo = 'bar';"

val newCode = "const foo = 'baz';"

val result = CodeComparator.difference(currentCode, newCode)

assertEquals(CodeDifference.Full, result)
}

@Test
fun `Returns difference for the char addition in single token`() {
val currentCode = "const foo = 'bar';"

val newCode = "const foo = 'barrr';"

val result = CodeComparator.difference(currentCode, newCode)

assertEquals(CodeDifference.Full, result)
}

@Test
fun `Returns difference for the char subtraction in single token`() {
val currentCode = "const foo = 'barrr';"

val newCode = "const foo = 'bar';"

val result = CodeComparator.difference(currentCode, newCode)

assertEquals(CodeDifference.Full, result)
}

@Test
Expand Down