Module: Steep
- Defined in:
- lib/steep.rb,
lib/steep/cli.rb,
lib/steep/daemon.rb,
lib/steep/source.rb,
lib/steep/typing.rb,
lib/steep/locator.rb,
lib/steep/project.rb,
lib/steep/version.rb,
lib/steep/equatable.rb,
lib/steep/rake_task.rb,
lib/steep/ast/ignore.rb,
lib/steep/ast/builtin.rb,
lib/steep/method_name.rb,
lib/steep/node_helper.rb,
lib/steep/path_helper.rb,
lib/steep/project/dsl.rb,
lib/steep/drivers/init.rb,
lib/steep/expectations.rb,
lib/steep/ast/types/any.rb,
lib/steep/ast/types/bot.rb,
lib/steep/ast/types/nil.rb,
lib/steep/ast/types/top.rb,
lib/steep/ast/types/var.rb,
lib/steep/daemon/server.rb,
lib/steep/drivers/check.rb,
lib/steep/drivers/query.rb,
lib/steep/drivers/stats.rb,
lib/steep/drivers/watch.rb,
lib/steep/located_value.rb,
lib/steep/module_helper.rb,
lib/steep/project/group.rb,
lib/steep/server/master.rb,
lib/steep/thread_waiter.rb,
lib/steep/ast/annotation.rb,
lib/steep/ast/types/name.rb,
lib/steep/ast/types/proc.rb,
lib/steep/ast/types/self.rb,
lib/steep/ast/types/void.rb,
lib/steep/drivers/vendor.rb,
lib/steep/drivers/worker.rb,
lib/steep/project/target.rb,
lib/steep/tagged_logging.rb,
lib/steep/ast/types/class.rb,
lib/steep/ast/types/logic.rb,
lib/steep/ast/types/tuple.rb,
lib/steep/ast/types/union.rb,
lib/steep/diagnostic/ruby.rb,
lib/steep/index/rbs_index.rb,
lib/steep/interface/block.rb,
lib/steep/interface/shape.rb,
lib/steep/project/options.rb,
lib/steep/project/pattern.rb,
lib/steep/subtyping/cache.rb,
lib/steep/subtyping/check.rb,
lib/steep/ast/types/helper.rb,
lib/steep/ast/types/record.rb,
lib/steep/subtyping/result.rb,
lib/steep/annotation_parser.rb,
lib/steep/ast/types/boolean.rb,
lib/steep/ast/types/factory.rb,
lib/steep/ast/types/literal.rb,
lib/steep/diagnostic/helper.rb,
lib/steep/drivers/checkfile.rb,
lib/steep/interface/builder.rb,
lib/steep/type_construction.rb,
lib/steep/annotations_helper.rb,
lib/steep/ast/types/instance.rb,
lib/steep/drivers/langserver.rb,
lib/steep/index/source_index.rb,
lib/steep/interface/function.rb,
lib/steep/server/base_worker.rb,
lib/steep/server/delay_queue.rb,
lib/steep/subtyping/relation.rb,
lib/steep/drivers/annotations.rb,
lib/steep/drivers/stop_server.rb,
lib/steep/signature/validator.rb,
lib/steep/daemon/configuration.rb,
lib/steep/diagnostic/signature.rb,
lib/steep/drivers/start_server.rb,
lib/steep/interface/type_param.rb,
lib/steep/server/change_buffer.rb,
lib/steep/server/lsp_formatter.rb,
lib/steep/services/file_loader.rb,
lib/steep/source/ignore_ranges.rb,
lib/steep/drivers/print_project.rb,
lib/steep/interface/method_type.rb,
lib/steep/server/custom_methods.rb,
lib/steep/server/worker_process.rb,
lib/steep/services/goto_service.rb,
lib/steep/subtyping/constraints.rb,
lib/steep/ast/types/intersection.rb,
lib/steep/interface/substitution.rb,
lib/steep/type_inference/context.rb,
lib/steep/ast/node/type_assertion.rb,
lib/steep/services/content_change.rb,
lib/steep/type_inference/type_env.rb,
lib/steep/diagnostic/lsp_formatter.rb,
lib/steep/server/type_check_worker.rb,
lib/steep/services/path_assignment.rb,
lib/steep/type_inference/case_when.rb,
lib/steep/type_inference/send_args.rb,
lib/steep/ast/annotation/collection.rb,
lib/steep/ast/node/type_application.rb,
lib/steep/ast/types/shared_instance.rb,
lib/steep/drivers/utils/jobs_option.rb,
lib/steep/server/interaction_worker.rb,
lib/steep/server/target_group_files.rb,
lib/steep/server/work_done_progress.rb,
lib/steep/services/stats_calculator.rb,
lib/steep/diagnostic/result_printer2.rb,
lib/steep/drivers/diagnostic_printer.rb,
lib/steep/services/signature_service.rb,
lib/steep/type_inference/method_call.rb,
lib/steep/drivers/utils/driver_helper.rb,
lib/steep/services/hover_provider/rbs.rb,
lib/steep/services/type_check_service.rb,
lib/steep/subtyping/variable_variance.rb,
lib/steep/type_inference/block_params.rb,
lib/steep/type_inference/constant_env.rb,
lib/steep/server/type_check_controller.rb,
lib/steep/services/completion_provider.rb,
lib/steep/services/hover_provider/ruby.rb,
lib/steep/type_inference/method_params.rb,
lib/steep/index/signature_symbol_provider.rb,
lib/steep/services/hover_provider/content.rb,
lib/steep/type_inference/type_env_builder.rb,
lib/steep/services/completion_provider/rbs.rb,
lib/steep/services/signature_help_provider.rb,
lib/steep/services/completion_provider/ruby.rb,
lib/steep/type_inference/multiple_assignment.rb,
lib/steep/server/inline_source_change_detector.rb,
lib/steep/type_inference/logic_type_interpreter.rb,
lib/steep/services/completion_provider/type_name.rb,
lib/steep/drivers/diagnostic_printer/base_formatter.rb,
lib/steep/drivers/diagnostic_printer/code_formatter.rb,
lib/steep/services/hover_provider/singleton_methods.rb,
lib/steep/diagnostic/deprecated/else_on_exhaustive_case.rb,
lib/steep/diagnostic/deprecated/unknown_constant_assigned.rb,
lib/steep/drivers/diagnostic_printer/github_actions_formatter.rb
Defined Under Namespace
Modules: AST, AnnotationsHelper, Daemon, Diagnostic, Drivers, Equatable, Index, Interface, ModuleHelper, NodeHelper, PathHelper, Server, Services, Signature, Subtyping, TypeInference
Classes: AnnotationParser, CLI, Expectations, LocatedValue, Locator, Project, RakeTask, Sampler, Source, TaggedLogging, ThreadWaiter, TypeConstruction, Typing
Constant Summary
collapse
- VERSION =
"2.0.0.0.beta1"
- InstanceMethodName =
_ = Struct.new(:type_name, :method_name, keyword_init: true) do
def to_s
"#{type_name}##{method_name}"
end
def relative
InstanceMethodName.new(type_name: type_name.relative!, method_name: method_name)
end
end
- SingletonMethodName =
_ = Struct.new(:type_name, :method_name, keyword_init: true) do
def to_s
"#{type_name}.#{method_name}"
end
def relative
SingletonMethodName.new(type_name: type_name.relative!, method_name: method_name)
end
end
Class Method Summary
collapse
Class Method Details
.can_fork? ⇒ Boolean
237
238
239
240
241
242
243
244
245
246
247
|
# File 'lib/steep.rb', line 237
def self.can_fork?
return @can_fork if defined?(@can_fork)
@can_fork = begin
pid = fork { exit!(0) }
Process.waitpid(pid) if pid
true
rescue NotImplementedError
false
end
end
|
.log_error(exn, message: "Unexpected error: #{exn.inspect}") ⇒ Object
228
229
230
231
232
233
234
235
|
# File 'lib/steep.rb', line 228
def self.log_error(exn, message: "Unexpected error: #{exn.inspect}")
Steep.logger.fatal message
if backtrace = exn.backtrace
backtrace.each do |loc|
Steep.logger.error " #{loc}"
end
end
end
|
.log_output ⇒ Object
187
188
189
|
# File 'lib/steep.rb', line 187
def self.log_output
@log_output
end
|
.log_output=(output) ⇒ Object
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
|
# File 'lib/steep.rb', line 191
def self.log_output=(output)
@log_output = output
if output.is_a?(String)
io = File.open(output, "a")
else
io = output
end
prev_level = @logger&.level
@logger = new_logger(io, prev_level)
prev_level = @ui_logger&.level
@ui_logger = new_logger(io, prev_level)
output
end
|
175
176
177
|
# File 'lib/steep.rb', line 175
def self.logger
@logger || raise
end
|
.measure(message, level: :warn, threshold: 0.0) ⇒ Object
213
214
215
216
217
218
219
220
221
222
223
224
225
226
|
# File 'lib/steep.rb', line 213
def self.measure(message, level: :warn, threshold: 0.0)
start = Time.now
begin
yield
ensure
time = Time.now - start
if level.is_a?(Symbol)
level = Logger.const_get(level.to_s.upcase)
end
if time > threshold
self.logger.log(level) { "#{message} took #{time} seconds" }
end
end
end
|
.measure2(message, level: :warn) ⇒ Object
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
|
# File 'lib/steep.rb', line 290
def self.measure2(message, level: :warn)
sampler = Sampler.new
result = yield(sampler)
if level.is_a?(Symbol)
level = Logger.const_get(level.to_s.upcase)
end
logger.log(level) { "#{sampler.total}secs for \"#{message}\"" }
logger.log(level) { " Average: #{sampler.average}secs"}
logger.log(level) { " Median: #{sampler.percentile(50)}secs"}
logger.log(level) { " Samples: #{sampler.count}"}
logger.log(level) { " 99 percentile: #{sampler.percentile(99)}secs"}
logger.log(level) { " 90 percentile: #{sampler.percentile(90)}secs"}
logger.log(level) { " 10 Slowests:"}
sampler.slowests(10).each do |message, time|
logger.log(level) { " #{message} (#{time}secs)"}
end
result
end
|
.new_logger(output, prev_level) ⇒ Object
183
184
185
|
# File 'lib/steep.rb', line 183
def self.new_logger(output, prev_level)
TaggedLogging.new(output, level: prev_level || Logger::ERROR)
end
|
.ui_logger ⇒ Object
179
180
181
|
# File 'lib/steep.rb', line 179
def self.ui_logger
@ui_logger || raise
end
|