VS Code erkennt Zeilenumbrüche nicht korrekt (Windows 11)

robinkognito

Mitglied
Hallo, bei mir tritt in der Nutzung von VS Code zur Java-Programmierung folgendes Problem auf:

Mehrzeilige Methoden-Verkettungen werden von der IDE nicht erkannt und einzelne Umbrüche als End-of-the-line interpretiert. Das führt dazu, dass ich beispielsweise Streams nicht über mehrere Zeilen hinweg anlegen kann, sondern alles in einer einzelnen Zeile deklarieren muss.

Kurz zu meiner Arbeitsumgebung: Ich nutze Windows 11, VS Code und öffne meine Java-Dateien in der Jshell. In anderen IDE, die ich für Projektentwicklung nutze (z.B. Intellij) tritt das Problem nicht auf. Allerdings benötige ich VS Studio als einfachen Texteditor, da so von der Uni gefordert (wir arbeiten im Rahmen des Programmieren-Moduls ausschließlich in der JShell und ohne IDE-Werkzeuge).

Nun habe ich schon den Tipp bekommen, dass es an den Zeilenumbruch-Einstellungen von VS Code unter Windows (default: CRLF) liegen könnte, aber auch nach Umstellen auf LF, dem Verwenden unterschiedlicher Terminals (PowerShell, WSL) konnte ich das Problem leider nicht beheben.

Ich bin durch die intensive Arbeit mit der JShell im Rahmen der Uni nun schon öfters auf JShell-spezifische Probleme gestoßen

Java:
List.of("Apfel", "Ankunft", "brachial", "altern", "THM").stream()
    .map(String::toUpperCase)
    .filter(s -> s.startsWith("A"))
    .count();

Code:
jshell> /o nightly_business.java
|  Fehler:
|  Unzulässiger Ausdrucksbeginn
|      .map(String::toUpperCase)
|      ^

Über ChatGPT habe ich noch den Tipp erhalten, mal

Code:
Get-Content datei.java | Format-Hex | Select-String "0A|0D"

auszuführen, um zu prüfen, ob LF oder CRLF existiert. Leider wird hier gar kein passender String gefunden, was ja schon mal darauf hindeutet, dass die Datei wirklich nicht in LF formartiert ist. Es ist mir aber ein Rätsel, wie ich das ändern könnte, wenn für den Editor in VS Code explizit LF eingestellt wurde und das für neu angelegte Dateien

Ich möchte auch mal zeigen, in welcher Form die Umbruch-Zeichen vorhanden sind:

1739103992372.png

1739104019379.png

Wenn meine Recherchen korrekt sind, könnte das darauf hindeuten, das LF zwar korrekt aktiviert ist, die Zeilenumbrüche aber erst gar nicht korrekt gespeichert werden (da kein \n). Fragt sich nur, was das ansonsten für Zeichen sein sollen (oder ob die Zeichen in der Darstellung doch schon escaped werden).

Habt ihr Ideen, wo die Ursache liegt und wie ich das beheben kann? Vor allem so, dass ich künftig nicht jede Datei manuell in das korrekte Format formatieren muss, sondern es per default angewendet wird.
 
Für mich ließt sich das nicht wie ein VSCode-Problem. Um in JShell mehrzeilige Anweisungen zu schreiben, muss man Ende die Zeile mit STRG+Enter umbrechen. Fügt man einfach mehrzeiligen Code in das Terminal ein, dann fehlt das STRG+Enter natürlich. Man kann auch jsh-Dateien ausführen, dort müssten Zeilenumbrüche wie in jeder anderen Datei funktionieren.
 
Ich glaube ich weis was du machst. Deine Datei sieht einfach so aus:
Java:
List.of("Apfel", "Ankunft", "brachial", "altern", "THM").stream()
    .map(String::toUpperCase)
    .filter(s -> s.startsWith("A"))
    .count();
Dann erhalte ich auch den Fehler. Java-Klassen haben aber eine Syntax:
Java:
public class Test {

    public static void main(String[] args) {

        long count = List.of("Apfel", "Ankunft", "brachial", "altern", "THM").stream()
            .map(String::toUpperCase)
            .filter(s -> s.startsWith("A"))
            .count();

        System.out.println(count);

    }

}
Code:
jshell> /o Test.java
jshell> Test.main(new String[0])
3

nightly_business.java ist also keine Klasse sondern nur einfach irgendwelcher Code. Die Endung .java erfordert eine richtige Klasse - welche nach UpperCamelCase benannt werden.

KennungstypRegeln für die NamensgebungBeispiele
KlassenKlassennamen sollten Substantive in sein , wobei der erste Buchstabe jedes Wortes groß geschrieben werden muss. Verwenden Sie ganze Wörter – vermeiden Sie Akronyme und Abkürzungen (es sei denn, die Abkürzung wird viel häufiger verwendet als die Langform, wie z. B. URL oder HTML).UpperCamelCase
  • class Raster {}
  • class ImageSprite {}
MethodenMethoden sollten Verben sein oder aus mehreren Wörtern bestehende Namen, die mit einem Verb in Kleinbuchstaben beginnen; das heißt, der erste Buchstabe muss klein geschrieben sein und die Anfangsbuchstaben der nachfolgenden Wörter müssen groß geschrieben sein.lowerCamelCase
  • run();
  • runFast();
  • getBackground();
VariablenLokale Variablen, Instanzvariablen und Klassenvariablen werden ebenfalls in geschrieben . Variablennamen sollten nicht mit Unterstrichen ( ) oder Dollarzeichen ( ) beginnen, obwohl beide zulässig sind. Dies steht im Gegensatz zu anderen Codierungskonventionen , die besagen, dass Unterstriche als Präfix für alle Instanzvariablen verwendet werden sollen.lowerCamelCase_$
Variablennamen sollten kurz, aber aussagekräftig sein. Die Wahl eines Variablennamens sollte mnemotechnisch sein , d. h. so, dass er dem flüchtigen Betrachter den Verwendungszweck klar macht. Variablennamen mit nur einem Zeichen sollten vermieden werden, außer bei temporären „Wegwerfvariablen“. Übliche Namen für temporäre Variablen sind i, j, k, m und n für Ganzzahlen und c, d und e für Zeichen.
  • int i;
  • char c;
  • float myWidth;
KonstantenKonstanten sollten in SCREAMING_SNAKE_CASE geschrieben werden . Konstantennamen können ggf. auch Ziffern enthalten, jedoch nicht als erstes Zeichen.
  • static final int MAX_PARTICIPANTS = 10;
 

Zurück
Oben