Как получить все строковые литералы в файле исходного кода Ruby? - PullRequest
1 голос
/ 09 декабря 2011

Я анализирую некоторый код и ищу строковые литералы, чтобы проверить, есть ли у меня дубликаты.Например, если у меня есть

def test_foo
  input_filename = "foo.txt"
  # ...
end

def test_bar
  input_filename = "bar.txt" # Fine
  # ...
end

def test_baz
  # Bad! Refactor it to a constant that's shared by test_foo and test_baz
  input_filename = "foo.txt" 
  # ...
end

, я хочу, чтобы программа анализа сообщила мне, что ["foo.txt", "bar.txt", "foo.txt"] существует в моем исходном коде.

Как я могу это сделать?

1 Ответ

5 голосов
/ 09 декабря 2011

Если вы установите ruby_parser или parsetree , вы сможете сделать что-то вроде этого (при условии, что текст программы в text):

result = RubyParser.new.parse(text)
result.flatten.to_a.select {|elt| elt.is_a?(String)}

(Очевидно, это может быть лучше, но этого должно быть достаточно, чтобы вы начали!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...