From 8ed14729565a72fba884c7f42de0e31a23e06ea5 Mon Sep 17 00:00:00 2001 From: lixy Date: Mon, 9 Jan 2017 14:02:41 +0800 Subject: [PATCH 1/2] remove duplicate imports --- ImportExtension/AddImportOperation.swift | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/ImportExtension/AddImportOperation.swift b/ImportExtension/AddImportOperation.swift index d7ecbff..b477454 100644 --- a/ImportExtension/AddImportOperation.swift +++ b/ImportExtension/AddImportOperation.swift @@ -35,20 +35,34 @@ class AddImportOperation { guard isValid(importString: importString) else { return } + + //remove duplicate imports + removeDuplicate(importString: importString) + let line = appropriateLine(ignoringLine: selectionLine) guard line != NSNotFound else { return } - self.buffer.lines.removeObject(at: selectionLine) self.buffer.lines.insert(importString, at: line) //add a new selection. Bug fix for #7 - let selectionPosition = XCSourceTextRange.init(start: XCSourceTextPosition.init(line: 0, column: 0), end: XCSourceTextPosition.init(line: 0, column: 0)) + let selectionPosition = XCSourceTextRange.init(start: XCSourceTextPosition.init(line: selectionLine, column: 0), end: XCSourceTextPosition.init(line: selectionLine, column: 0)) self.buffer.selections.removeAllObjects() self.buffer.selections.insert(selectionPosition, at: 0) } + func removeDuplicate(importString: String) -> Void { + + let tempLines = NSMutableArray.init(array: buffer.lines) + tempLines.enumerateObjects(options: .reverse) { (line, index, stop) in + if line as! String == importString { + buffer.lines.removeObject(at: index) + } + } + + } + func isValid(importString: String) -> Bool { var numberOfMatches = 0 let matchingOptions = NSRegularExpression.MatchingOptions(rawValue: UInt(0)) From 4836d93e8bca545fbd3a166473dd2d00d5ed8669 Mon Sep 17 00:00:00 2001 From: lixy Date: Mon, 9 Jan 2017 14:30:11 +0800 Subject: [PATCH 2/2] remove duplicate imports --- ImportExtension/AddImportOperation.swift | 30 +++++++++++++----------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/ImportExtension/AddImportOperation.swift b/ImportExtension/AddImportOperation.swift index b477454..f8416ce 100644 --- a/ImportExtension/AddImportOperation.swift +++ b/ImportExtension/AddImportOperation.swift @@ -29,17 +29,20 @@ class AddImportOperation { func execute() { let selection = self.buffer.selections.firstObject as! XCSourceTextRange - let selectionLine = selection.start.line - let importString = (self.buffer.lines[selectionLine] as! String).trimmingCharacters(in: CharacterSet.whitespaces) + var selectionLine = selection.start.line + + var importString = (self.buffer.lines[selectionLine] as! String).trimmingCharacters(in: CharacterSet.whitespaces) + importString = importString.trimmingCharacters(in: CharacterSet.init(charactersIn: " \t\n")) guard isValid(importString: importString) else { return } //remove duplicate imports - removeDuplicate(importString: importString) + let removeNum = removeDuplicate(importString: importString) + selectionLine = selectionLine-removeNum - let line = appropriateLine(ignoringLine: selectionLine) + let line = appropriateLine() guard line != NSNotFound else { return } @@ -52,15 +55,21 @@ class AddImportOperation { self.buffer.selections.insert(selectionPosition, at: 0) } - func removeDuplicate(importString: String) -> Void { + func removeDuplicate(importString: String) -> Int { + + //do not forget itself + var lineNumber = -1; let tempLines = NSMutableArray.init(array: buffer.lines) tempLines.enumerateObjects(options: .reverse) { (line, index, stop) in - if line as! String == importString { + let string = (line as! String).trimmingCharacters(in: CharacterSet.init(charactersIn: " \t\n")) + if string == importString { buffer.lines.removeObject(at: index) + lineNumber += 1 } } + return lineNumber } func isValid(importString: String) -> Bool { @@ -79,15 +88,12 @@ class AddImportOperation { return numberOfMatches > 0 } - func appropriateLine(ignoringLine: Int) -> Int { + func appropriateLine() -> Int { var lineNumber = NSNotFound let lines = buffer.lines as NSArray as! [String] //Find the line that is first after all the imports for (index, line) in lines.enumerated() { - if index == ignoringLine { - continue - } if isValid(importString: line) { lineNumber = index @@ -100,10 +106,6 @@ class AddImportOperation { //if a line is not found, find first free line after comments for (index, line) in lines.enumerated() { - if index == ignoringLine { - continue - } - lineNumber = index if line.isWhitespaceOrNewline() { break