A Ruby interface to the Twitter API.
This report summarizes scanner evidence for sferik/twitter-ruby, a Ruby project with 4,570 GitHub stars. SynthScan examined 29,924 lines of code across 197 source files, recording 302 pattern matches distributed across 5 syntactic categories. The legacy adjusted pattern signal is 10.3 (Moderate pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 302 finding(s).
Are imports declared and package/API names verified? 0 finding(s).
Are wrappers, guards, and repeated structures necessary? 31 finding(s).
Which changes need focused human review? 302 finding(s).
Run additional scans to build a history of the legacy pattern signal. Score changes are not a measure of AI adoption or code quality.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 302 distinct pattern matches across 5 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | lib/twitter/variant.rb | 1 | require "twitter/base" | COMMENT |
| LOW | lib/twitter/base.rb | 21 | COMMENT | |
| LOW | lib/twitter/base.rb | 61 | COMMENT | |
| LOW | lib/twitter/base.rb | 101 | end | COMMENT |
| LOW | lib/twitter/identity.rb | 1 | require "equalizer" | COMMENT |
| LOW | lib/twitter/saved_search.rb | 1 | require "twitter/creatable" | COMMENT |
| LOW | lib/twitter/saved_search.rb | 21 | # @return [String] | COMMENT |
| LOW | lib/twitter/cursor.rb | 21 | # @api public | COMMENT |
| LOW | lib/twitter/headers.rb | 1 | require "uri" | COMMENT |
| LOW | lib/twitter/headers.rb | 21 | @bearer_token_request = options.delete(:bearer_token_request) | COMMENT |
| LOW | lib/twitter/entities.rb | 21 | end | COMMENT |
| LOW | lib/twitter/entities.rb | 61 | # | COMMENT |
| LOW | lib/twitter/entities.rb | 81 | memoize :symbols | COMMENT |
| LOW | lib/twitter/entities.rb | 101 | def uris | COMMENT |
| LOW | lib/twitter/entities.rb | 121 | uris.any? | COMMENT |
| LOW | lib/twitter/direct_message_event.rb | 41 | # Normalizes the response attributes | COMMENT |
| LOW | lib/twitter/language.rb | 1 | require "twitter/base" | COMMENT |
| LOW | lib/twitter/language.rb | 21 | # | COMMENT |
| LOW | lib/twitter/geo_results.rb | 21 | # @example | COMMENT |
| LOW | lib/twitter/rate_limit.rb | 21 | # | COMMENT |
| LOW | lib/twitter/rate_limit.rb | 41 | end | COMMENT |
| LOW | lib/twitter/settings.rb | 1 | require "twitter/base" | COMMENT |
| LOW | lib/twitter/settings.rb | 21 | # The language preference | COMMENT |
| LOW | lib/twitter/utils.rb | 1 | module Twitter | COMMENT |
| LOW | lib/twitter/search_results.rb | 21 | # @api public | COMMENT |
| LOW | lib/twitter/search_results.rb | 61 | # Returns true if this is the last page of results | COMMENT |
| LOW | lib/twitter/tweet.rb | 21 | # @example | COMMENT |
| LOW | lib/twitter/tweet.rb | 41 | # @api public | COMMENT |
| LOW | lib/twitter/tweet.rb | 61 | # The ID of the user being replied to | COMMENT |
| LOW | lib/twitter/tweet.rb | 81 | COMMENT | |
| LOW | lib/twitter/tweet.rb | 101 | # @!method reply? | COMMENT |
| LOW | lib/twitter/tweet.rb | 121 | alias_method :retweeted_tweet, :retweeted_status | COMMENT |
| LOW | lib/twitter/tweet.rb | 141 | # Returns the quoted tweet | COMMENT |
| LOW | lib/twitter/tweet.rb | 161 | # @!method quoted_tweet? | COMMENT |
| LOW | lib/twitter/tweet.rb | 201 | # | COMMENT |
| LOW | lib/twitter/factory.rb | 1 | module Twitter | COMMENT |
| LOW | lib/twitter/size.rb | 1 | require "equalizer" | COMMENT |
| LOW | lib/twitter/size.rb | 21 | # @return [Integer] | COMMENT |
| LOW | lib/twitter/size.rb | 41 | # The width in pixels | COMMENT |
| LOW | lib/twitter/arguments.rb | 1 | module Twitter | COMMENT |
| LOW | lib/twitter/trend.rb | 1 | require "equalizer" | COMMENT |
| LOW | lib/twitter/trend.rb | 21 | # @return [String] | COMMENT |
| LOW | lib/twitter/trend_results.rb | 21 | attr_reader :attrs | COMMENT |
| LOW | lib/twitter/trend_results.rb | 41 | # @api public | COMMENT |
| LOW | lib/twitter/trend_results.rb | 61 | end | COMMENT |
| LOW | lib/twitter/oembed.rb | 1 | require "twitter/base" | COMMENT |
| LOW | lib/twitter/oembed.rb | 21 | # The author name | COMMENT |
| LOW | lib/twitter/oembed.rb | 41 | COMMENT | |
| LOW | lib/twitter/client.rb | 21 | # @example | COMMENT |
| LOW | lib/twitter/client.rb | 41 | COMMENT | |
| LOW | lib/twitter/client.rb | 61 | # @example | COMMENT |
| LOW | lib/twitter/client.rb | 121 | end | COMMENT |
| LOW | lib/twitter/profile.rb | 21 | COMMENT | |
| LOW | lib/twitter/profile.rb | 41 | # @!method profile_banner_url_https | COMMENT |
| LOW | lib/twitter/profile.rb | 61 | alias_method :profile_banner_url_https?, :profile_banner_uri? | COMMENT |
| LOW | lib/twitter/profile.rb | 81 | COMMENT | |
| LOW | lib/twitter/direct_message.rb | 21 | # @api public | COMMENT |
| LOW | lib/twitter/premium_search_results.rb | 21 | # Returns the attributes as a hash | COMMENT |
| LOW | lib/twitter/premium_search_results.rb | 101 | @collection.concat(value.fetch(:results, []).map { |tweet| Tweet.new(tweet) }) | COMMENT |
| LOW | lib/twitter/metadata.rb | 1 | require "twitter/base" | COMMENT |
| 199 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/test_helper.rb | 71 | def build_request_execution_verifier(request_pattern, uri, options, keyword_options, default_once:, &block) | CODE |
| LOW | test/test_helper.rb | 82 | def normalize_request_pattern_assertion_options(uri, options, keyword_options) | CODE |
| LOW | test/test_helper.rb | 87 | def extract_request_count_options(verification_options) | CODE |
| LOW | test/test_helper.rb | 208 | def resolve_stubbed_const_path(const_path) | CODE |
| LOW | test/twitter/premium_search_results_test.rb | 18 | def assert_premium_search_called(client:, expected_query:, expected_options:, expected_config:, return_value:) | CODE |
| LOW | test/support/media_object_examples.rb | 148 | def uri_predicate_true_example(method_name, source_name, klass) | CODE |
| LOW | test/support/media_object_examples.rb | 156 | def uri_predicate_false_example(method_name, source_name, klass) | CODE |
| LOW | test/support/rest_users_profile_image_examples.rb | 2 | def profile_image_upload_examples(method_name:, path:, fixture_name:, option_key:) | CODE |
| LOW⚡ | test/support/rest_users_profile_image_examples.rb | 17 | def profile_image_requests_correct_resource_example(method_name:, path:, fixture_name:) | CODE |
| LOW⚡ | test/support/rest_users_profile_image_examples.rb | 25 | def profile_image_returns_user_example(method_name:, fixture_name:) | CODE |
| LOW⚡ | test/support/rest_users_profile_image_examples.rb | 34 | def profile_image_with_options_example(method_name:, path:, fixture_name:, option_key:) | CODE |
| LOW | test/support/rest_users_profile_image_examples.rb | 47 | def profile_image_multipart_upload_example(method_name:, path:, fixture_name:, option_key:) | CODE |
| LOW | lib/twitter/error.rb | 253 | def extract_message_from_errors(body) | CODE |
| LOW | …witter/direct_messages/welcome_message_rule_wrapper.rb | 50 | def build_welcome_message_rule(attrs) | CODE |
| LOW | lib/twitter/rest/direct_messages.rb | 241 | def create_direct_message_event(*args) | CODE |
| LOW | lib/twitter/rest/direct_messages.rb | 265 | def create_direct_message_event_with_media(user, text, media, options = {}) | CODE |
| LOW | lib/twitter/rest/utils.rb | 101 | def perform_request_with_object(request_method, path, options, klass, params = nil) | CODE |
| LOW | lib/twitter/rest/utils.rb | 124 | def perform_post_with_objects(path, options, klass) | CODE |
| LOW | lib/twitter/rest/utils.rb | 136 | def perform_request_with_objects(request_method, path, options, klass) | CODE |
| LOW | lib/twitter/rest/utils.rb | 169 | def parallel_users_from_response(request_method, path, args) | CODE |
| LOW | lib/twitter/rest/utils.rb | 197 | def objects_from_response_with_user(klass, request_method, path, args) | CODE |
| LOW | lib/twitter/rest/utils.rb | 211 | def parallel_objects_from_response(klass, request_method, path, args) | CODE |
| LOW | lib/twitter/rest/utils.rb | 240 | def cursor_from_response_with_user(collection_name, klass, path, args) | CODE |
| LOW | lib/twitter/rest/request.rb | 197 | def fail_or_return_response_body(code, body, response) | CODE |
| LOW | lib/twitter/rest/lists.rb | 485 | def cursor_from_response_with_list(path, args) | CODE |
| LOW | lib/twitter/rest/lists.rb | 511 | def list_from_response_with_user(path, args) | CODE |
| LOW | lib/twitter/rest/lists.rb | 523 | def list_from_response_with_users(path, args) | CODE |
| LOW | lib/twitter/rest/users.rb | 114 | def update_profile_background_image(image, options = {}) | CODE |
| LOW | lib/twitter/rest/direct_messages/welcome_messages.rb | 108 | def create_welcome_message_rule(welcome_message_id, options = {}) | CODE |
| LOW | lib/twitter/rest/direct_messages/welcome_messages.rb | 125 | def destroy_welcome_message_rule(*ids) | CODE |
| LOW | lib/twitter/rest/direct_messages/welcome_messages.rb | 152 | def welcome_message_rule_list(options = {}) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | lib/twitter/base.rb | 177 | # Check if an attribute is falsey or empty | COMMENT |
| LOW | lib/twitter/cursor.rb | 73 | # Check if this is the last page of results | COMMENT |
| LOW | lib/twitter/cursor.rb | 84 | # Check if the limit has been reached | COMMENT |
| LOW | lib/twitter/headers.rb | 25 | # Check if this is a bearer token request | COMMENT |
| LOW | lib/twitter/creatable.rb | 24 | # Check if the created_at attribute is present | COMMENT |
| LOW | lib/twitter/client.rb | 88 | # Check if user token credentials are present | COMMENT |
| LOW | lib/twitter/client.rb | 123 | # Check if all credentials are present | COMMENT |
| LOW | lib/twitter/client.rb | 135 | # Check if string is blank or nil | COMMENT |
| LOW | lib/twitter/rest/utils.rb | 254 | # Check if user_id is set | COMMENT |
| LOW | lib/twitter/rest/request.rb | 257 | # Check if all timeout keys are defined | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | test/twitter/utils_test.rb | 5 | # Create a test class that includes the Utils module to test instance methods | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | lib/twitter/rest/timelines.rb | 60 | # @option options [Boolean, String, Integer] :include_rts Specifies that the timeline should include native retw | COMMENT |