def Linter(self, view, lineNumber):
		self.linterQueue -= 1 # Remove from queue
		if self.linterQueue > 0: # If there is a queue, then cancel
			return
		elif self.completionRunning: # If completions are being generated, then cancel
			return
		self.linterRunning = True # Block further attempts to run the linter until this instance has finished
		if view:
			SublimePapyrus.ClearLinterHighlights(view)
		#start = None #DEBUG
		def Exit():
			#print("Linter: Finished in %f milliseconds and releasing lock..." % ((time.time()-start)*1000.0)) #DEBUG
			self.linterRunning = False
			return False
		global cacheLock
		global lex
		global syn
		global sem
		global SUBLIME_VERSION
		with cacheLock:
			if not self.linterErrors.get(self.bufferID, None):
				self.linterErrors[self.bufferID] = {}
			#start = time.time() #DEBUG
			settings = None
			if view:
				settings = SublimePapyrus.GetSettings()
			if SUBLIME_VERSION >= 3103 and view.is_auto_complete_visible(): # If a list of completions is visible, then cancel
				return Exit()
			if view:
				SublimePapyrus.SetStatus(view, "sublimepapyrus-linter", "The linter is running...")
			#lexSynStart = time.time() #DEBUG
			scriptContents = None
			if view:
				scriptContents = view.substr(sublime.Region(0, view.size()))
			else:
				scriptContents = self.scriptContents
			lineCount = scriptContents.count("\n") + 1
			statements = []
			lines = []
			tokens = []
			currentLine = None
			try:
				for token in lex.Process(scriptContents):
					if token.type == lex.NEWLINE:
						if tokens:
							if currentLine:
								stat = syn.Process(tokens)
								if stat:
									statements.append(stat)
							elif token.line >= lineNumber:
								currentLine = syn.Process(tokens)
								if currentLine:
									while lines:
										stat = syn.Process(lines.pop(0))
										if stat:
											statements.append(stat)
									statements.append(currentLine)
								currentLine = True
							else:
								lines.append(tokens)
							tokens = []
						else:
							if token.line >= lineNumber:
								while lines:
									stat = syn.Process(lines.pop(0))
									if stat:
										statements.append(stat)
								currentLine = True
					elif token.type != lex.COMMENT_LINE and token.type != lex.COMMENT_BLOCK:
						tokens.append(token)
			except Linter.LexicalError as e:
				if view:
					error = self.linterErrors[self.bufferID].get(e.message, None)
					if error and error.message == e.message and abs(error.line - e.line) < settings.get("linter_error_line_threshold", 2) + 1:
						SublimePapyrus.HighlightLinter(view, e.line, e.column, False)
					else:
						SublimePapyrus.HighlightLinter(view, e.line, e.column)
					self.linterErrors[self.bufferID][e.message] = e
					SublimePapyrus.SetStatus(view, "sublimepapyrus-linter", "Error on line %d, column %d: %s" % (e.line, e.column, e.message))
					if settings.get("linter_panel_error_messages", False):
						view.window().show_quick_panel([[e.message, "Line %d, column %d" - (e.line, e.column)]], None)
				return Exit()
			except Linter.SyntacticError as e:
				if view:
					error = self.linterErrors[self.bufferID].get(e.message, None)
					if error and error.message == e.message and abs(error.line - e.line) < settings.get("linter_error_line_threshold", 2) + 1:
						SublimePapyrus.HighlightLinter(view, e.line, center=False)
					else:
						SublimePapyrus.HighlightLinter(view, e.line)
					self.linterErrors[self.bufferID][e.message] = e
					SublimePapyrus.SetStatus(view, "sublimepapyrus-linter", "Error on line %d: %s" % (e.line, e.message))
					if settings.get("linter_panel_error_messages", False):
						view.window().show_quick_panel([[e.message, "Line %d" % e.line]], None)
				return Exit()
			#print("Linter: Finished lexical and syntactic in %f milliseconds..." % ((time.time()-lexSynStart)*1000.0)) #DEBUG
			#semStart = time.time() #DEBUG
			if statements:
				try:
					script = None
					if view:
						script = sem.Process(statements, SublimePapyrus.GetSourcePaths(view))
					else:
						script = sem.Process(statements, self.sourcePaths)
					if script:
						self.SetScript(self.bufferID, script)
				except Linter.SemanticError as e:
					if view:
						error = self.linterErrors[self.bufferID].get(e.message, None)
						if error and error.message == e.message and abs(error.line - e.line) < settings.get("linter_error_line_threshold", 2) + 1:
							SublimePapyrus.HighlightLinter(view, e.line, center=False)
						else:
							SublimePapyrus.HighlightLinter(view, e.line)
						self.linterErrors[self.bufferID][e.message] = e
						SublimePapyrus.SetStatus(view, "sublimepapyrus-linter", "Error on line %d: %s" % (e.line, e.message)) 
						if settings.get("linter_panel_error_messages", False):
							view.window().show_quick_panel([[e.message, "Line %d" % e.line]], None)
					return Exit()
				#print("Linter: Finished semantic in %f milliseconds..." % ((time.time()-semStart)*1000.0)) #DEBUG
				if view:
					SublimePapyrus.ClearStatus(view, "sublimepapyrus-linter")
				if self.linterErrors.get(self.bufferID, None):
					del self.linterErrors[self.bufferID]
		return Exit()

	# Completions
dataset/ETHPy150Open Kapiainen/SublimePapyrus/Source/Modules/Skyrim/Plugin.py/EventListener.Linter/operator `%` -> `-`