2011-11-19 4 views
25

Kiedy bawiłem się po raz pierwszy z CoffeeScript, natknąłem się na problem. W celu debugowania mój problem, próbowałem zastępując cały mój plik z jednym z przykładowych fragmentów kodu z witryny coffeescript:Nieoczekiwane "INDENT" w kodzie przykładowym CoffeeScript

kids = 
    brother: 
    name: "Max" 
    age: 11 
    sister: 
    name: "Ida" 
    age: 9 

Jednak gdy próbuję skompilować ten kod, pojawia się:

Error: In coffee/main.coffee, Parse error on line 3: Unexpected 'INDENT' 
    at Object.parseError (/usr/lib/coffeescript/parser.js:501:11) 
    at Object.parse (/usr/lib/coffeescript/parser.js:573:32) 
    at Object.compile (/usr/lib/coffeescript/coffee-script.js:23:22) 
    at /usr/lib/coffeescript/command.js:99:27 
    at /usr/lib/coffeescript/command.js:72:28 
    at fs:84:13 
    at node.js:773:9 
In coffee/main.coffee, Parse error on line 3: Unexpected 'INDENT' 

Ponieważ jest to kod z witryny CoffeeScript, zakładam, że sam kod nie jest problemem. Wydaje się jednak, że kompilator działa poprawnie; jeśli mogę skompilować:

a = 2 

generuje plik z:

(function(){ 
    var a; 
    a = 2; 
})(); 

zgodnie z oczekiwaniami. Innymi słowy, kod jest dobry, kompilator jest dobry, a jednak w jakiś sposób otrzymuję ten nieoczekiwany błąd "IDENT" ... Czy ktoś może mi pomóc zrozumieć, co się dzieje?

+0

Zawsze spróbuj wkleić swój kod do http://coffeescript.org/#try: aby sprawdzić, czy błąd występuje w najnowszym wydaniu CoffeeScript. –

+0

Miałem podobny błąd, gdy zapomniałem czegoś w poprzednim wierszu, więc nie spodziewałem się, że kod zostanie wcięty –

Odpowiedz

63

Jestem prawie pewien, że jest to kwestia tabs-vs-spaces. Powiedz swojemu edytorowi, aby nie konwertował spacji na tabulatory, jeśli to zrobi. Ponadto, sprawdź swój kod za pomocą kursora i upewnij się, że nie przeskoczy nad pustymi obszarami.

Problem polega na tym, że podczas gdy zwykli edytorzy widzą zakładkę jako odpowiednik dwóch lub czterech spacji, coffeescript widzi to jako jedną spację, więc wcięcie zostaje pomieszane.

Jeśli to wszystko nie pomoże, upewnij się, że masz najnowszą wersję coffeescript, np. 1.1.0 lub nowszy.

+2

Potrwałem trzykrotnie moje białe znaki (korzystając z funkcji znaków wyświetlanych przez funkcję Eclipse z białymi spacjami) i ponownie je wykonałem zarówno spacje, jak i tabulatory; Wciąż dostaję ten sam dokładny błąd. Jeśli chodzi o posiadanie nowego coffeescript, dostaję jakąkolwiek wersję w pakiecie Ubuntu ... wygląda jak ... 0.7.0! To może być mój problem, pozwól mi spróbować ręcznie zainstalować kawę i zobaczyć, czy to pomaga. – machineghost

+0

to pokazuje, że model pakowania i aktualizacji ubuntu jest problematyczny w takich obszarach jak NodeJS i CoffeeScript, które rozwijają się tak szybko. Zalecam zainstalowanie najnowszego stabilnego NodeJS z http://nodejs.org/download/, a następnie po prostu wykonaj 'npm install coffee-script'. IMHO za pomocą 'sudo apt-get install what-node-module' czuje się całkowicie źle; npm jest zdecydowanie lepszym narzędziem do wykonania zadania. Czy wiesz, że CoffeeScript 1.0.0 został wydany w Boże Narodzenie 2010 roku? to trzy lata temu. – flow

+0

Dzięki! Opracowałem dla mnie! – Prostakov

4

Kod jest w porządku. Upewnij się, że nie zawiedliście białych znaków (dziwne znaki kontrolne pokazujące puste, tabulatory lub podobne znaki).

+1

Dzięki, ale spróbowałem włączyć znaki białe w Eclipse i widzę, że w rzeczywistości są to spacje. Aby być bezpiecznym, spróbowałem usunąć i zastąpić całe wcięcie, zarówno ze spacjami (dwie na poziom wcięcia), jak iz zakładkami. We wszystkich przypadkach pojawia się ten sam błąd :-( – machineghost

+0

Dzięki, okazało się, że to była wersja. @ * # $ @ & * #! Nieaktualne repozytoria ... – machineghost

+0

@machineghost: Nie wspomniał o Zrobiłem. :( – thejh

8

Jeśli używasz JetBrains IDE (IntelliJ, PHPStorm, etc) zmianę ustawień, który pracował dla mnie jest:

Plik> Ustawienia> Ustawienia projektu> Kod Styl> coffeescript> Tabs i wcięcia

Tick "tab Użyj znaków" & "Inteligentne zakładki"

+0

Nie ma powodu, dla którego powinienem być zmuszony do używania zakładek.Wyjaśnięty mój błąd jest związany z niepoprawnym wcięciem kodu poniżej – Lotus

+0

zmieniono sformułowanie, aby uniknąć niezrozumienia bycia zmuszonym do posiadania to ustawienie. – eaykin

0

Jeśli masz ten sam problem, ale Twoje wcięcie jest w porządku,
to musisz cierpieć z powodu bug 2868.

Zasadniczo błąd jest mylący. Sprawdź wcięcia
błędy w require plikach d.

-1

Możesz rozwiązać ten dwa sposoby. 1. JEŻELI używasz Webstorm File-> Default Settings jak wspomniano powyżej 2.Inne obejście jest użyć innego edytora jak Sublime, tam u można nacisnąć enter na wcześniejszą linię i będzie auto zakładka go dla Ciebie ze spacjami

0

Kiedy w Atom można automatycznie konwertować spacje:

Packages > Whitespace > Convert Tabs to Spaces