-
Star
(103)
You must be signed in to star a gist -
Fork
(8)
You must be signed in to fork a gist
-
-
Save castwide/28b349566a223dfb439a337aea29713e to your computer and use it in GitHub Desktop.
# The following comments fill some of the gaps in Solargraph's understanding of | |
# Rails apps. Since they're all in YARD, they get mapped in Solargraph but | |
# ignored at runtime. | |
# | |
# You can put this file anywhere in the project, as long as it gets included in | |
# the workspace maps. It's recommended that you keep it in a standalone file | |
# instead of pasting it into an existing one. | |
# | |
# @!parse | |
# class ActionController::Base | |
# include ActionController::MimeResponds | |
# extend ActiveSupport::Callbacks::ClassMethods | |
# extend AbstractController::Callbacks::ClassMethods | |
# end | |
# class ActiveRecord::Base | |
# extend ActiveRecord::QueryMethods | |
# extend ActiveRecord::FinderMethods | |
# extend ActiveRecord::Associations::ClassMethods | |
# extend ActiveRecord::Inheritance::ClassMethods | |
# include ActiveRecord::Persistence | |
# end | |
# @!override ActiveRecord::FinderMethods#find | |
# @overload find(id) | |
# @param id [Integer] | |
# @return [self] | |
# @overload find(list) | |
# @param list [Array] | |
# @return [Array<self>] | |
# @overload find(*args) | |
# @return [Array<self>] | |
# @return [self, Array<self>] |
I am trying to extend this to use additional ActiveRecord class methods (in this example, where
) ... is this the right approach?
# @!override ActiveRecord::QueryMethods#where
# @overload where(str)
# @param str [String]
# @return [Class<self>]
# @overload where(list)
# @param list [Array]
# @return [Class<self>]
# @overload where(**options)
# @param options [Hash]
# @return [Class<self>]
The issue with ActiveRecord::Relation
we discussed in castwide/solargraph#188 still applies, but yeah, I think that's generally the right idea.
@castwide missing # extend ActiveRecord::Persistence::ClassMethods
no?
You should extend the actioncontroller with the render, redirect and strong parameters
# class ActionController::Base
# include ActionController::MimeResponds
# include ActionController::Redirecting
# include ActionController::StrongParameters
# include AbstractController::Rendering
# extend ActiveSupport::Callbacks::ClassMethods
# extend AbstractController::Callbacks::ClassMethods
# end
What would the yard docs look like for extending Active Support on object. For instance, I'd like to complete .in?
on string which comes from core_ext Inclusion but can't seem to get it working after 30 mins of what I would officially refer to as "futzing" around with the definitions file.
I attempted adding this to my solargraph.yml but it didnt' seem to have any effect.
require:
- actioncable
- actionmailer
- actionpack
- actionview
- activejob
- activemodel
- activerecord
- activestorage
- activesupport
You can put this file anywhere in the project, as long as it gets included in the workspace maps
I'm not sure how to tell / make sure that the file is included in the workspace maps. Can anyone give an example implementation?
You can put this file anywhere in the project, as long as it gets included in the workspace maps
I'm not sure how to tell / make sure that the file is included in the workspace maps. Can anyone give an example implementation?
See The Comment File
section at https://solargraph.org/guides/rails
Regardless of whether it's right or wrong, I feel that having more modules in the ActiveRecord can really help a lot in the development experience, and thus, I add the following:
extend all modules under Active Record
# class ActiveRecord::Base
# extend ActiveRecord::Aggregations
# extend ActiveRecord::Aggregations::ClassMethods
# extend ActiveRecord::Batches
# extend ActiveRecord::Calculations
# extend ActiveRecord::Callbacks
# extend ActiveRecord::Coders
# extend ActiveRecord::ConnectionAdapters
# extend ActiveRecord::ConnectionAdapters::AbstractPool
# extend ActiveRecord::ConnectionAdapters::ColumnMethods
# extend ActiveRecord::ConnectionAdapters::DatabaseLimits
# extend ActiveRecord::ConnectionAdapters::DatabaseStatements
# extend ActiveRecord::ConnectionAdapters::DetermineIfPreparableVisitor
# extend ActiveRecord::ConnectionAdapters::MySQL
# extend ActiveRecord::ConnectionAdapters::MySQL::ColumnMethods
# extend ActiveRecord::ConnectionAdapters::MySQL::DatabaseStatements
# extend ActiveRecord::ConnectionAdapters::MySQL::Quoting
# extend ActiveRecord::ConnectionAdapters::MySQL::SchemaStatements
# extend ActiveRecord::ConnectionAdapters::PostgreSQL
# extend ActiveRecord::ConnectionAdapters::PostgreSQL::ColumnMethods
# extend ActiveRecord::ConnectionAdapters::PostgreSQL::DatabaseStatements
# extend ActiveRecord::ConnectionAdapters::PostgreSQL::Quoting
# extend ActiveRecord::ConnectionAdapters::PostgreSQL::SchemaStatements
# extend ActiveRecord::ConnectionAdapters::PostgreSQL::OID
# extend ActiveRecord::ConnectionAdapters::PostgreSQL::ReferentialIntegrity
# extend ActiveRecord::ConnectionAdapters::PostgreSQL::Utils
# extend ActiveRecord::ConnectionAdapters::QueryCache
# extend ActiveRecord::ConnectionAdapters::QueryCache::ConnectionPoolConfiguration
# extend ActiveRecord::ConnectionAdapters::Quoting
# extend ActiveRecord::ConnectionAdapters::Savepoints
# extend ActiveRecord::ConnectionAdapters::SQLite3
# extend ActiveRecord::ConnectionAdapters::SQLite3::DatabaseStatements
# extend ActiveRecord::ConnectionAdapters::SQLite3::Quoting
# extend ActiveRecord::ConnectionAdapters::SQLite3::SchemaStatements
# extend ActiveRecord::ConnectionAdapters::SchemaStatements
# extend ActiveRecord::ConnectionHandling
# extend ActiveRecord::Core
# extend ActiveRecord::Core::ClassMethods
# extend ActiveRecord::CounterCache
# extend ActiveRecord::CounterCache::ClassMethods
# extend ActiveRecord::DefineCallbacks
# extend ActiveRecord::DefineCallbacks::ClassMethods
# extend ActiveRecord::Delegation::ClassMethods
# extend ActiveRecord::Delegation::ClassSpecificRelation
# extend ActiveRecord::Delegation::ClassSpecificRelation::ClassMethods
# extend ActiveRecord::Delegation::DelegateCache
# extend ActiveRecord::DynamicMatchers
# extend ActiveRecord::Enum
# extend ActiveRecord::Explain
# extend ActiveRecord::FinderMethods
# extend ActiveRecord::Generators
# extend ActiveRecord::Generators::Migration
# extend ActiveRecord::Generators::Migration::ClassMethods
# extend ActiveRecord::Inheritance
# extend ActiveRecord::Inheritance::ClassMethods
# extend ActiveRecord::Integration
# extend ActiveRecord::Integration::ClassMethods
# extend ActiveRecord::LegacyYamlAdapter
# extend ActiveRecord::LegacyYamlAdapter::Rails41
# extend ActiveRecord::LegacyYamlAdapter::Rails420::
# extend ActiveRecord::Locking
# extend ActiveRecord::Locking::Optimistic
# extend ActiveRecord::Locking::Optimistic::ClassMethods
# extend ActiveRecord::Locking::Pessimistic
# extend ActiveRecord::Middleware
# extend ActiveRecord::ModelSchema
# extend ActiveRecord::ModelSchema::ClassMethods
# extend ActiveRecord::NestedAttributes
# extend ActiveRecord::NoTouching
# extend ActiveRecord::NoTouching::ClassMethods
# extend ActiveRecord::NullRelation
# extend ActiveRecord::Persistence
# extend ActiveRecord::Persistence::ClassMethods
# extend ActiveRecord::Querying
# extend ActiveRecord::QueryMethods
# extend ActiveRecord::Railties
# extend ActiveRecord::Railties::CollectionCacheAssociationLoading
# extend ActiveRecord::Railties::ControllerRuntime
# extend ActiveRecord::Railties::ControllerRuntime::ClassMethods
# extend ActiveRecord::ReadonlyAttributes
# extend ActiveRecord::ReadonlyAttributes::ClassMethods
# extend ActiveRecord::Reflection
# extend ActiveRecord::Reflection::ClassMethods
# extend ActiveRecord::Sanitization
# extend ActiveRecord::Sanitization::ClassMethods
# extend ActiveRecord::Scoping::ClassMethods
# extend ActiveRecord::Scoping::Default
# extend ActiveRecord::Scoping::Default::ClassMethods
# extend ActiveRecord::Scoping::Named
# extend ActiveRecord::Scoping::Named::ClassMethods
# extend ActiveRecord::SecureToken
# extend ActiveRecord::SecureToken::ClassMethods
# extend ActiveRecord::Serialization
# extend ActiveRecord::SpawnMethods
# extend ActiveRecord::Store
# extend ActiveRecord::Store::ClassMethods
# extend ActiveRecord::Suppressor
# extend ActiveRecord::Suppressor::ClassMethods
# extend ActiveRecord::Tasks
# extend ActiveRecord::Tasks::DatabaseTasks
# extend ActiveRecord::TestDatabases
# extend ActiveRecord::TestFixtures
# extend ActiveRecord::TestFixtures::ClassMethods
# extend ActiveRecord::Timestamp
# extend ActiveRecord::Timestamp::ClassMethods
# extend ActiveRecord::TouchLater
# extend ActiveRecord::Transactions
# extend ActiveRecord::Transactions::ClassMethods
# extend ActiveRecord::Translation
# extend ActiveRecord::Type
# extend ActiveRecord::Type::Internal
# extend ActiveRecord::Type::Internal::Timezone
# extend ActiveRecord::TypeCaster
# extend ActiveRecord::Validations
# extend ActiveRecord::Validations::Callbacks
# extend ActiveRecord::Validations::ClassMethods
# extend ActiveRecord::Validations::Clusivity
# extend ActiveRecord::VERSION
# end
And some other thought...
- Since I have added by using solargraph to select the modules one by one, there should be a programmatic way to deal with the above.
- The yard document seems to tell you whether the function returns a relation or not? (for example,
.all
function says "ActiveRecord::Scoping::Named::ClassMethods#all Returns an ActiveRecord::Relation scope object") maybe we can use that information to annotate the function?
Not sure whether it is possible or not, any thoughts?
You might be interested on the solargraph-rails gem instead of relying on this ad-hoc config file
You might be interested on the solargraph-rails gem instead of relying on this ad-hoc config file
There is no "Up vote" so... thanks!
This doesn't appear to have made a difference for me. I'm just confused at this point.
@Samuelodan I found answer in the entire rails thread castwide/solargraph#87
you might need to install docs. in my case what helped me was
gem install yard
yard docs
bundle add solargraph solargraph-rails
solargraph config
.solargraph.yml
---
include:
- "**/*.rb"
exclude:
- spec/**/*
- test/**/*
- vendor/**/*
- ".bundle/**/*"
require:
- actioncable
- actionmailer
- actionpack
- actionview
- activejob
- activemodel
- activerecord
- activestorage
- activesupport
domains: []
reporters:
- rubocop
- require_not_found
formatter:
rubocop:
cops: safe
except: []
only: []
extra_args: []
require_paths: []
plugins:
- solargraph-rails
max_files: 5000
I updated the gist to take advantage of some changes in Solargraph 0.34.0. The
require
calls are no longer needed, I added a few more mixins, and the@!override
directive is an experimental feature for supplementing documentation from external gems. See castwide/solargraph#87 for more information.