Sublime Linter ist eines der Pakete von Sublime Text2 und eine Funktion zum Hervorheben des Teils, in dem der Kompilierungs- oder Syntaxfehler aufgetreten ist. Es sieht aus wie auf dem Bild unten.
Die offizielle Seite für Sublime Linter ist unten. https://github.com/SublimeLinter/SublimeLinter
Auf der folgenden Seite finden Sie Informationen zur Installation von Sublime Linter. http://perl.no-tubo.net/2012/05/03/mac%E3%81%AE%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF-sublime-text2%E3%81%A7javascript%E3%81%AE%E3%82%B7%E3%83%B3%E3%82%BF%E3%83%83%E3%82%AF%E3%82%B9%E3%82%A8%E3%83%A9/ http://watson1978.github.com/blog/2012/08/23/make-a-sublime-text-environment/
Hier erfahren Sie, wie Sie die D-Sprache damit hervorheben.
Öffnen Sie nach der Installation von SublimeLinter den Ordner mit den Paketen, indem Sie [Sublime Text 2] -> [Einstellungen] -> [Pakete durchsuchen…] auswählen. (Für MacOS. Ich kenne kein anderes Betriebssystem.)
Wenn Sie dann den Ordner mit dem Paket öffnen, öffnen Sie den Ordner [~~ / Packages / SublimeLinter / sublimelinter / modules /]. Ich denke, dass python.py oder java.py darin enthalten ist, also erstelle d.py.
Kopieren Sie die Quelle von objectiv-j.py nach d.py, löschen Sie nicht benötigte Teile und gehen Sie wie folgt vor.
d.py
import re
import os
import subprocess
from base_linter import BaseLinter
CONFIG = {
'language': 'D'
}
class Linter(BaseLinter):
def built_in_check(self, view, code, filename):
return ''
def parse_errors(self, view, errors, lines, errorUnderlines, violationUnderlines, warningUnderlines, errorMessages, violationMessages, warningMessages):
return ''
built_in_check
ist die Funktion, die den Code kompiliert und einen Kompilierungsfehler zurückgibt, und parse_errors
ist die Funktion, die basierend auf dem Fehler von built_in_check
entscheidet, wo hervorgehoben werden soll.
built_in_check
Die Argumente für "built_in_check" sind "self", "view", "code", "filename". Selbst ist Selbstvertrauen (dies in C #), Ansicht ist eine Registerkartenklasse, Code ist ** der Inhalt einer nicht gespeicherten Datei, die bearbeitet wird **, und Dateiname ist der Name der angezeigten Datei. Also schreibe ich die Inhaltsverarbeitung, um den Code in'built_in_check 'zu kompilieren, aber die Notizen lauten wie folgt.
-c -o- -w -unittest -debug
base_linter.py
Das Ergebnis ist also unten.
d.py
…
#Temp-Ordner zum Schreiben von Dateien während des Schreibens
TMPPATH_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), '.dtmpfiles'))
if not os.path.exists(TMPPATH_DIR):
os.mkdir(TMPPATH_DIR)
…
class Linter(BaseLinter):
def built_in_check(self, view, code, filename):
def built_in_check(self, view, code, filename):
#Pass bekommen
work_path = os.path.dirname(filename)
file_name = os.path.basename(filename)
#Holen Sie sich Einstellungen zum Kompilieren des Speicherorts
settings = view.settings().get('SublimeLinter', {}).get(self.language, {})
if(settings):
dwd = settings.get('working_directory', [])
if(dwd):
#Holen Sie es sich, wenn es im Projekt festgelegt ist
work_path = dwd
#Die Datei in der Mitte des Schreibens wird als temporäre Datei verwendet..Export direkt unter py
tempfilePath = os.path.join(TMPPATH_DIR, file_name)
with open(tempfilePath, 'w') as f:
f.write(code)
args = ["dmd", "-c", "-o-", "-w", "-unittest", "-debug", tempfilePath]
try:
#kompilieren
process = subprocess.Popen(args,
cwd=work_path,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
startupinfo=self.get_startupinfo())
result = process.communicate(None)[0]
finally:
if tempfilePath:
#Gespeicherte Datei löschen
os.remove(tempfilePath)
return result.strip()
…
SublimeText2 verfügt über eine Projektverwaltungsfunktion. Wenn Sie jedoch die Einstellungen in die Projektdatei schreiben, können Sie den Speicherort auf dmd festlegen. Wenn Sie ein selbst erstelltes Modul nicht importieren, tritt im Importteil ein Kompilierungsfehler auf (glaube ich). Die Einstellungen sind wie folgt.
xxx.sublime-project
{
"folders":
[
{
//Projektordner
"path": "~~~~"
}
],
"settings":
{
"SublimeLinter":
{
"d":
{
//dmd Der Ordner, den Sie verschieben möchten. Dies kann mit dem obigen Ordner identisch sein.
"working_directory": "~~~~~"
}
}
}
}
parse_errors
Die Fehlermeldung des Kompilierungsfehlers, der bei der Rückgabe von "built_in_check" übergeben wurde, wird an "lines" des Arguments "parse_errors" übergeben. Danach können Sie die Fehlermeldung und die Fehlerzeile aus der Fehlermeldung in jeder Zeile von "Zeilen" ausschneiden und an die Funktion "self.add_message" übergeben. Die hier zu beachtenden Punkte sind wie folgt.
errorMessages
, aber das macht hier nicht viel Sinn. Ich meine, ich habe nicht überprüft, was kommen wird. Vielleicht ist nichts drin.Also (ry
d.py
…
def parse_errors(self, view, errors, lines, errorUnderlines, violationUnderlines, warningUnderlines, errorMessages, violationMessages, warningMessages):
for line in errors.splitlines():
match = re.match(r'^(?P<filename>.+\.d)\((?P<line>\d+)\): Error: (?P<error>.+)', line)
if match:
tab_filename = os.path.basename(view.file_name())
error_filename = os.path.basename(match.group('filename'))
error, line = match.group('error'), match.group('line')
if(tab_filename == error_filename):
self.add_message(int(line), lines, error, errorMessages)
else:
line = 1
module_name = error_filename.replace('.d', '')
regions = view.find_all(r'import.*\.' + module_name)
if(regions):
line = view.rowcol(regions[0].a)[0] + 1
self.add_message(line, lines, error, errorMessages)
Dies sollte wahrscheinlich funktionieren. Wenn es nicht funktioniert, beheben Sie es bitte.