νμΌμμ PHP heredoc
( <<<
) κ΅¬λ¬Έμ΄ λ°κ²¬λλ©΄ νκ·Έ μμ±μ΄ μ€μ§λ©λλ€. nowdoc
PHP ꡬ문μ κΈ°λ³Έμ μΌλ‘ λμΌνλ―λ‘ νμΌ κ΅¬λ¬Έ λΆμμ μ€λ¨νλ λ λ€λ₯Έ μΈμ΄ μμμ
λλ€.
μ΄κ²μ λν΄ νμ€νμ§ μμ΅λλ€. PHP κ°μ
$ ctags --options=NONE foo.php
<?php
class LivingBeings {
public function doSomething()
{
$foo = <<<FOO
FOO;
}
public function doSomethingElse()
{
}
}
doSomethingElse
λ©μλκ° νμΌμ λμ΄λμ§ μμ΅λλ€. heredoc
λΆλΆμ ββμ£Όμ μ²λ¦¬νμλ§μ μμ "μμ μΆλ ₯"μΉμ
μμ λ³Ό μ μλ―μ΄ λ©μλλ μ μμ μΌλ‘ μΈλ±μ±λ©λλ€.
!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
!_TAG_OUTPUT_EXCMD mixed /number, pattern, mixed, or combine/
!_TAG_OUTPUT_FILESEP slash /slash or backslash/
!_TAG_OUTPUT_MODE u-ctags /u-ctags or e-ctags/
!_TAG_PATTERN_LENGTH_LIMIT 96 /0 for no limit/
!_TAG_PROC_CWD /tmp/ //
!_TAG_PROGRAM_AUTHOR Universal Ctags Team //
!_TAG_PROGRAM_NAME Universal Ctags /Derived from Exuberant Ctags/
!_TAG_PROGRAM_URL https://ctags.io/ /official site/
!_TAG_PROGRAM_VERSION 5.9.0 /5a136315/
LivingBeings foo.php /^class LivingBeings {$/;" c
doSomething foo.php /^ public function doSomething()$/;" f class:LivingBeings
!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
!_TAG_OUTPUT_EXCMD mixed /number, pattern, mixed, or combine/
!_TAG_OUTPUT_FILESEP slash /slash or backslash/
!_TAG_OUTPUT_MODE u-ctags /u-ctags or e-ctags/
!_TAG_PATTERN_LENGTH_LIMIT 96 /0 for no limit/
!_TAG_PROC_CWD /tmp/ //
!_TAG_PROGRAM_AUTHOR Universal Ctags Team //
!_TAG_PROGRAM_NAME Universal Ctags /Derived from Exuberant Ctags/
!_TAG_PROGRAM_URL https://ctags.io/ /official site/
!_TAG_PROGRAM_VERSION 5.9.0 /5a136315/
LivingBeings foo.php /^class LivingBeings {$/;" c
doSomething foo.php /^ public function doSomething()$/;" f class:LivingBeings
doSomethingElse foo.php /^ public function doSomethingElse()$/;" f class:LivingBeings
$ ctags --version
Universal Ctags 5.9.0(5a136315), Copyright (C) 2015 Universal Ctags Team
Universal Ctags is derived from Exuberant Ctags.
Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert
Compiled: Nov 20 2020, 11:46:20
URL: https://ctags.io/
Optional compiled features: +wildcards, +regex, +iconv, +option-directory, +xpath, +yaml, +packcc
λ‘컬μμ λΉλ :
$ cd ctags_source
$ make clean && make distclean
$ ./autogen.sh
$ ./configure --prefix=$HOME
$ make
$ make install
@jespinal ,μ΄ λ³κ²½ μ¬νμ λν΄ μ΄μΌκΈ°νκ³ μμ΅λκΉ? https://wiki.php.net/rfc/flexible_heredoc_nowdoc_syntaxes ?
$ git diff |cat
git diff |cat
diff --git a/parsers/php.c b/parsers/php.c
index e3fdc241..ace25561 100644
--- a/parsers/php.c
+++ b/parsers/php.c
@@ -682,6 +682,8 @@ static void parseHeredoc (vString *const string)
int extra = EOF;
c = getcFromInputFile ();
+ if (c == ' ' || c == '\t')
+ c = getcFromInputFile ();
for (len = 0; c != 0 && (c - delimiter[len]) == 0; len++)
c = getcFromInputFile ();
$ cat input.php
cat input.php
<?php
// Taken from https://github.com/universal-ctags/ctags/issues/2717
// submitted by <strong i="5">@jespinal</strong>
class LivingBeings {
public function doSomething()
{
$foo = <<<FOO
FOO;
}
public function doSomethingElse()
{
}
}
$ u-ctags -o - input.php
u-ctags -o - input.php
LivingBeings input.php /^class LivingBeings {$/;" c
doSomething input.php /^ public function doSomething()$/;" f class:LivingBeings
$
@masatake λ§μΌλ‘λ μΆ©λΆνμ§ μμ΅λλ€. κ° μ체 μ€μ μμ΄μΌνκΈ° λλ¬Έμ μ λ²μ μ ν΄λΉ μ νμ ν΄μ ν©λλ€. μ€λͺ μ΄ λͺ ννμ§ μμ΅λλ€.
λ΄κ° μ μνλ ꡬνμ λ°κ²¬ λ λ§μ»€μ μ°μμ±μ΄ μ‘΄μ¬νλμ§ νμΈνκ³ , κ·Έλ λ€λ©΄ μ ν¨ν μλ³μλ₯Ό νμ±νλμ§ νμΈνμ¬μ΄ λ¬Έμ λ₯Ό λ°©μ§ν©λλ€.
κ·Έλ¬λ λλ μ’
λ£ λ§μ»€κ° μ λμ¬λ‘ λΆμ μ€ λ€μ μλ³μ λ¬Έμκ° μμΌλ©΄ μ€μ λ‘ μ’
λ£ λ§μ»€λΌλ κ²μ μλ―Ένλ€κ³ λ§νκ³ μΆμ΅λλ€. λ°λΌμ END;
λ μ’
λ£ (λ§μ»€κ° END
μ΄λ©΄)μ΄μ§λ§ ENDFOO
λ κ·Έλ μ§ μμ΅λλ€.
BTW, μ΄κ²μ μ΄μ λ²μ κ³Ό νΈνλμ§ μλ ꡬ문 λ³κ²½μ΄λ―λ‘ μ°λ¦¬κ° κ·Έκ²μ λν΄ λ¬΄μμ μνλμ§ λͺ¨λ₯΄κ² μ΅λλ€. νμ§λ§ PHPκ° κΈ°κΊΌμ΄ κ·Έκ²μ κΉ¨ λ¨λ¦¬λ©΄ μ°λ¦¬λ ν μ μλ€κ³ μκ°ν©λλ€. νΉν λ¬Έμ λ₯Ό μΌμΌν¬ κ°λ₯μ±μ΄ κ±°μ μκΈ° λλ¬Έμ
λλ€. μ΄μμ μΌλ‘λ *.php[1-6]
λν΄ νμ¬ κ΅¬λ¬Έμ μ¬μ©νκ³ λλ¨Έμ§μλ μ ꡬ문μ μ¬μ©νλ κ²μ΄ μ’μ§λ§ κ°μΉκ°μλ κ²½μ°μλ λ무 λ§μ λ¬Έμ κ° λ μ μμ΅λλ€.
@jespinal ,μ΄ λ³κ²½ μ¬νμ λν΄ μ΄μΌκΈ°νκ³ μμ΅λκΉ? https://wiki.php.net/rfc/flexible_heredoc_nowdoc_syntaxes ?
μ£μ‘ν©λλ€. @masatake , μ΄λ€ μ΄μ λ‘ μ§λ¬Έμ λν μλ¦Όμλ°μ§ λͺ»νμ΅λλ€.
μ, μ λ κ·Έ λ³νμ λν΄ μ΄μΌκΈ°νκ³ μμ΅λλ€. κ·Έλ¬λ κ·Έκ²μ μ€μ λ‘ PHP 7.3μμ ꡬνλμμ΅λλ€ (νμ¬ μμ λ²μ μ 7.4μ΄κ³ λ²μ 8μ΄ μ€λΉλμ΄ μμ΅λλ€). ctagsμ PHPμ λ°©λν μ¬μ©μ κΈ°λ°μ κ³ λ €ν λ μ΄κ²μ΄ μ μ΄μ μλ³΄κ³ λμ§ μμλμ§ μ λͺ¨λ₯΄κ² μ΅λλ€.
μλ‘μ΄ heredoc / nowdoc ꡬ문과 κ΄λ ¨νμ¬ μ ν¨ν / μ ν¨νμ§ μμ ꡬ문μ λν΄ μ€λͺ νκΈ° μν΄ μ΄μ μμ μμ νμ λ μ½λ μ€ λν«μ λͺ ββκ°μ§ μ€ν¬λ¦° μ·μ μΆκ°νκ³ μμ΅λλ€ (RFCλ μΆ©λΆν λͺ ννμ§ μμ΅λλ€. μκ°νλ€).
μ΄ μμμ ' TEXT
'(λ λ²μ§Έ νλͺ©)μ μ’
λ£ λ§μ»€μ
λλ€. λ°λΌμ μΈ λ²μ§Έ ' TEXT;
λ μΈλ―Έμ½λ‘ λλ μΌν λ§ μμνλ―λ‘ κ΅¬λ¬Έ λΆμ기보기μμ ꡬ문 μ μΌλ‘ μ ν¨νμ§ μμ λ¬Έμμ΄μ
λλ€.
μ΄μ μ¬λ‘μ μ μ¬ν κ²½μ° :
μΈλ―Έμ½λ‘ μ΄λ μΌν μλ€λ©΄ PHP νμλ 기뻀μ κ²μ λλ€. μ
echo <<<TEXT
some string
TEXT, 'some other string';
νμμ κ΄μ μμ μ΄κ²μ λ€μκ³Ό κ°μ΅λλ€.
echo 'some string', 'some other string';
λ€μμ νμκ° ' TEXT
'λ° ' TEXTUAL
'κ° λ κ°μ λ€λ₯Έ λ¬Έμμ΄μμ μκ³ μμΌλ―λ‘ μ ν¨ν μμ
λλ€.
λ€μμ μλͺ»λ λ€μ¬ μ°κΈ°λ‘ μΈν μλͺ»λ μ€ λν«μ λλ€. νΉν, RFC λ¬Έμ : "λ«λ λ§μ»€κ° λ³Έλ¬Έμ μ΄λ€ μ€λ³΄λ€ λ λ€μ¬ μ°κΈ°λλ©΄ ParseErrorκ° λ°μν©λλ€."
@jespinal κ°μ¬ν©λλ€.νμ§λ§ λ λμ κ·λ² μ ν μ€νΈκ° μλ€λ©΄ :) λͺ κ°μ§ κ²½μ°μλ§ λ Όλ¦¬λ₯Ό μΆμΈ‘νλ κ²μ΄ νμ κΉλ€ λ‘μ΅λλ€. λ°λ©΄ κ·λ² μ ν μ€νΈκ° μλ€λ©΄ κ·Έκ²μ ꡬνν μ μκ³ μ μλ ν κ²μ λλ€. κ·Έλ¦¬κ³ μ€μ λ‘ @masatake μ λ§ν¬μ κ·νμ μ λ³΄λ‘ μΆ©λΆνλ€κ³ μκ°ν©λλ€ : +1 :
@masatake λλ μ΅κ·Όμ λ΄κ° μ°Ύμ μμ μκ°μ κ°μν λ μ무κ²λ μ½μνμ§ μμ§λ§, λΉμ μ΄ λλ₯Ό μ΄κΈ°μ§ μλ ν 곧 μ΄κ²μ λ³΄λ €κ³ λ Έλ ₯ν κ²μ λλ€ :)
BTW @jespinal λ§μ½ μ무λ λΆννμ§ μμλ€λ©΄ λλ μ λ§λ‘ κ·Έ ꡬ문μ κ±°μ μ¬μ©νμ§ μμκΈ° λλ¬Έμ΄λΌκ³ μκ°νλ©° μ°λ¦¬λ 7.3 μ΄μ ꡬ문μ μ§μνκΈ° λλ¬Έμ λ¬Έμ κ° λ°μνλ μ μΌν κ²½μ°λ neredoc / nowdoc μ¬μ©μ μλ―Ένλ 7.3 μ΄μμ ꡬ문 μ¬μ©μ μμ΅λλ€. μ²μμ :)
μ μ λμ νλνμ§ μμμ΅λλ€. κ·Έλμ λΉμ μκ²μ μ½λ©νΈλ₯Όλ°μ μ€μ λͺ°λμ΅λλ€.
κ·Έλ¬λ μ΄μ μ°λ¦¬λ κ·νλ‘λΆν° "μ체 ν λΉ"νμλ₯Όλ°μ΅λλ€. @ b4n , μ κ³΅ν΄ μ£Όμ
μ κ°μ¬ν©λλ€.
@masatake λΉμ μ λμκ² λ§μ κ²μ κΈ°λνμ§ μλ κ²μ΄ νλͺ νλ€. μ΅κ·Όμ UCtags / Geany κΈ°μ¬λ₯Ό λ§μ΄ ν μκ°μ μ°Ύμ§ λͺ»νκΈ° λλ¬Έμ΄λ€. : disappointed :. μ¬κΈ°μ λ€μ μκ°μ ν λΉνλ λ°©λ²μ μ°ΎμΌλ €κ³ ν΄μ μ’ λ νλμ μ΄κΈΈ λ°λΌμ§ λ§ μμ§ μ½μ ν μλ μλ€.
κ·ΈλΌμλ λΆκ΅¬νκ³ λΉλ©΄ν λ¬Έμ μ λν μμ μ¬νμ # 2734λ₯Ό μ°Έμ‘°νμμμ€. :)
κ°μ¬ν©λλ€!