Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions lib/rouge/lexers/php.rb
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,13 @@ def builtins
groups Keyword::Declaration, Text, Name::Class
end

rule %r/(enum)
(\s+)
(#{id_with_ns})/ix do |m|
groups Keyword::Declaration, Text, Name::Class
push :in_enum
end

mixin :names

rule %r/[;,\(\)\{\}\[\]]/, Punctuation
Expand Down Expand Up @@ -376,6 +383,29 @@ def builtins
mixin :whitespace
mixin :return
end

state :in_enum do
rule %r/:/, Punctuation, :in_enum_base_type
rule %r/\{/, Punctuation, :in_enum_body
mixin :escape
mixin :whitespace
mixin :return
end

state :in_enum_base_type do
rule id, Keyword::Type, :pop!
mixin :escape
mixin :whitespace
mixin :return
end

state :in_enum_body do
rule %r/\}/, Punctuation, :pop!
rule %r/(case)(\s+)(#{id})/i do
groups Keyword, Text, Name::Constant
end
mixin :php
end
end
end
end
16 changes: 16 additions & 0 deletions spec/visual/samples/php
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,22 @@ interface SomeInterface {
}


/* Enums */

enum Suit {
case Hearts;
case Diamonds;
case Clubs;
case Spades;
}
enum Status: string {
case Pending = 'pending';
case Processing = 'processing';
case Completed = 'completed';
case Failed = 'failed';
}


/* Imports */

use some\namespace\ClassA;
Expand Down